Language/NoSQL&JDBC

Hadoop 설치 정리

아르비스 2011. 8. 30. 09:35
 Hadoop은 다중 코어와 디스크를 사용하도록 설계되어 있으므로, 어떤 하드웨어라도 충분히 활용할 수있다.
 HDFS 클러스터에서 데이터노드 저장소 용도로 RAID(Redundant Array of Independent Disks)를 사용하더라도 얻을수 있는 이득은 없다. HDFS는 노드간에 복제하는 기능이 있어, RAID가 제공하는 중복성(Redundancy)은 필요하지 않다.
 Hadoop은 대부분이 자바로 작성되어 자바가상머신 JVM이 설치된 어떤 플랫폼에서도 구성될수 있다.
 32Bit 구조에서는 자바의 최대 힙메모리는 3GB로 제한된다. 이를 피하기위해서 네임노드는 일반적으로 64Bit 하드웨어에서 구동된다.

 - 설 치 -
* OS 설치 - Ubuntu
  어떤 플랫폼에서도 가능하지만, 필자는 Ubunutu Server(64Bit)에 설치 하였다
 http://www.ubuntu.com/downlaod/ubuntu/download

server version 설치후 확인은

% uname -a
Linux ubuntu 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux


* Java 설치
 하둡을 구동하기 위해서는 자바 6이나 이후 버전이 필요하다. 
% add-apt-rrepository "deb http://archive.canonical.com/ lucid partner"
를 실행하거나 혹은 sources.list 파일에 아래와 같이 직접 수정해준다.
% vi /etc/apt/sources.list

deb http://archive.canonical.com/ lucid partnet

위와 같이 설정해주고
% apt-get install sun-java6-jdk


설치가 완료되면, 다음과 같이 확인할 수 있다

% java -version
java version "1.6.0_26"
java(TM) SE Runtime Environment (build 1.6.0_26-b03)
java HotSpot(TM) 64-Bit Server VM(build 20.1-b02, mixed mode)


기존 다른 버전의 Java가 설치되어 있다면, 다음처럼 해당 버전을 선택하면 된다.
% update-alternative --config java


* Hadoop 계정 
 하둡 전용 사용자 계정을 생성하는 것이 좋다.
% addgroup hadoop

% adduser --ingroup hadoop hadoop

% vi /etc/passwd
 < hadoop 필드에서 x 제거>
  x를 제거하게 되면, password를 묻지 않고, 로그인이 가능하다.

*  Hadoop 설치
 아파치 하둡페이지 에서 내려 받는다. (http://hadoop.apache.org/common/releases.html)
최신 버전의 download link를 확인한 후 다음과 같이 받는다.

% wget http://mirror.apache-kr.ogr//hadoop/common/hadoop-0.20.203.0/hadoop-0.20.203.0rc1.tar.gz

하둡은 /usr/local 등의 위치에 압축을 해제해야 한다.
하둡은 하둡 사용자 홈디렉토리에 설치하지 않는다. 홈디렉토리는 NFS로 마운트된 디렉토리이기 때문이다.

% cd /usr/local

% sudo tar -xzf hadoop-x.y.z.tar.gz
....

하둡파일의 소유자를 하둡 사용자와 그룹이 되도록 변경해야 한다.
% sudo chown -R hadoop:hadoop hadoop-x.y.z

사용을 편리하게 하기 위해서 폴더명을 hadoop으로 변경한다.
% ls -s hadoop-x.y.x/ hadoop
(혹은  % mv hadoop-x.y.z/ hadoop )

* SSH 설정
 하둡 제어 스크립트 들은 SSH를 이용하여 범 클러스터 내 동작을 수행한다. 무정지 작업을 위해서 SSH를 사용하여 컴퓨터에서 하둡계정으로 암호없는 로그인이 가능하다. 
% ssh-keygen -t rsa -f ~/.ssh/id_rsa

( ssh-keygen options 
    -t [rsa/dsa]            : RSA나 DSA의 암호화 방식 설정
    -f [파일 위치]          : key 파일 이름 및 경로 설정
    -P [value]               : Specify old passphrase  )

다음 접속한 클러스터 내에 접속하고자 하는 모든 컴퓨터의 ~/.ssh/authorized_keys에 공개키가 있는지를 확인해야 한다.
% cat ~/.ssh/id_rsa.pub  >> ~/.ssh/authorized_keys

% ssh localhost
위와 같이 실행하여 test한다.
만약 다음과 같은 에러 발생시
 ssh:connect to host localhost port 22: Connection refused

SSH가 설치가 안된것으로 설치해준다.
% sudo apt-get install ssh

* 하둡 환경 설정   
  하둡의 설정파일은 conf/ 디렉토리에 있다. 
 - hadoop 설정 파일
 파일명 형식 설명 
hadoop-env.sh   Bash 스크립트  하둡을 구동하는 스크립에서 사용되는 환경 변수
core-site.xml  하둡 설정 XML  HDFS와 맵리듀스에 공통적으로 사용되는  IO 설정같은 하둡 코어를 위한 환경 설정 구성 
hdfs-site.xml  하둡 설정 XML 네임노드, 보조 네임노드 데이터노드 등과 같은 HDFS 데몬을 위한 환경 설정구성 
mapred-site.xml  하둡 설정 XML  잡트래커와 태스크트래커 같은 맵리듀스 데몬을 위한 환경설정 
masters 일반 텍스트  보조 네임노드를 구동시킬 컴퓨터 목록(라인당 하나) 
slaves  일반 텍스트  데이터노드와 태스크트래커를 구동시킬 컴퓨터의 목록(라인당 하나) 
hadoop-metric.properties 자바 속성  매트릭스가 하둡에서 어떻게 표시되는지를 제어하는 속성 
log4j.properties 자바 속성  시스템 로그 파일을 위한 속성, 네임노드의 감시로그, 태스크트래커의 자식 프로세서의 수행로그 

네임노드는 많은 메모리를 요구한다. 모든 네임스페이스의 파일과 블록 메타정보를 메모리에 유지해야 하기 때문이다. 

* 개발 환경 상세 설정
 -hadoop-env.sh
 기본적으로 하둡은 데몬당 1,000MB(1GB)의 메모리를 할당한다. HADOOP_HEAPSIZE에서 재설정 가능하다.

- worker computer memory 계산
 JVM 기본 메모리사용량(MB) 8개의 프로세서에 사용되는 메모리(자식 JVM당 400MB를 사용할 경우) 
DataNode  1,000  1,000 
TaskTraker  1,000  1,000 
자식 맵 테스크  2 x 200  7 X 400 
자식 리듀스 태스크  2 x 200  7 x 400 
총 합  2,800  7,600 

마스터노드에 해당하는 각 네임노드, 보조 네임노드, 잡트래터 데몬은 1,000MB가 기본이며, 총 3,000MB를 사용한다.

- JAVA 설정
 export JAVA_HOME=/usr/lib/jvm/java-6-sun

* 중요 하둡 데몬 속성
이러한 중요한 속성은 아래 3개 파일에 의해 설정된다.
  - core-site.xml
  - hdfs-site.xml
  - mapred-site.xml

HDFS를 구동하기 위해서는 네이노드가 될 컴퓨터가 선정되어야 하며, fs.default.name 값이 HDFS 파일시스템  URI이고, 호스트는 네임노드의 호스트 명이거나 IP주소 이고, 포트는 RPC를 받기위한 포트번호이다. 포트번호가 지정되지 않으면 기본적으로 8020을 사용한다.

- 중요한 HDFS데몬 속성들
 속성이름 유형  기본값  설명 
 fs.default.name URI file://  기본 파일시스템, URI는 호스트명과 네임노드의 RPC 서버가 실행되는 포트번호를 정의한다. 기본포트는 8020이다. core-site.xml에 지정함. 
dfs.name.dir  따움표로 구분된 디렉토리 이름  ${hadoop.tmp.dir}/
dfs/name 
네임노드가 영속적인 메타데이터를 지정할 디렉토리 리스트들을 지정한다. 네임노드는 매타데이터의 복사본을 리스트 상의 디렉토리별로 저장한다.
dfs.data.dir 따움표를 구분된 디렉토리 이름  ${hadoop.tmp.dir}/
dfs/data 
네임노드에서 블록을 저장할 디렉토리의 리스트를 지정한다. 각 블록을 이 디렉토리 중 오직 한군데에 저장된다. 
fs.checkpoint.dir  따움표로 구분된 디렉토리 이림  ${hadoop.tmp.dir}/
dfs/namesecondary 
보조 네임노드가 체크포인트 데이터를 저장할 디렉토리의 리스트를 지정한다. 리스트상의 개별 디렉토리에 체크포인트의 복제본이 저장된다. 


- 맵리듀스
mapred.job.tracker 속성이며, 호스트명이나 IP 주소 그리고 잡트래커가 사용할 포트번호를 기재한다. 기본 포트번호는 8021번이다.
 속성이름 유형  기본값  설명 
mapred.job.tracker  호스트명과 포트번호  local  호스트명과 잡트래커의 RPC 서버가 실행되는 포트번호를 정의한다. 기본값은 Local로 설정되며, 잡트래커는 맵리듀스 잡이 실행될 때 요청에 의해 프로세서가 실행된다.  
mapred.local.dir  따움로표 구분된 디렉토리 이름  ${hadoop.tmp.dir}/
mapred/local 
맵리듀스가 잡 과정에서 발생하는 중간 데이터를 저장하는 디렉토리의 리스트임. 중간 데이테는 잡이 끝나면 삭제된다. 
mapred.system.dir URI  ${hadoop.tmp.dir}/
mapred/system 
잡이 실행될 때 공유파일들이 저장되는 디렉토리이며, fs.default.name 속성값에 상대적 경로를 갖는다. 
mapred.tasktracker.
map.tasks.maximum
정수  태스크트래커에서 동시에 한번에 실행할 수 있는 맵 태스크 개수 


 속성이름 유형  기본값  설명 
mapred.job.tracker 호스트명과 포트번호 Local  호스트명과 잡트래커의 RPC 서버가 실행되는 포트번호를 정의한다. 기본값은 Local로 설정되며, 잡트래커는 맵리듀스 잡이 실행될 때 요청에 의해 프로세서가 실행된다. 
mapred.local.dir 따움표로 구분된 디렉토리 이름  ${hadoop.tmp.dir}/
mapred/local 
맵리듀스가 잡 과정에서 발생하는 중간 데이터를 저장하는 디렉토리의 리스트임. 중간데이터는 잡이 끝나면 삭제된다. 
mapred.system.dir  URI  ${hadoop.tmp.dir}/
mappred/system 
잡이 실행될 때 공유파일들이 저장되는 디렉토리이며, fs.defult.name속성값에 상대적 경로를 갖는다. 
 mapred.tasktracer.
map.tasks.maximum 
정수  태스크트래커에서 동시에 한번에 실행할 수있는 맵 태스크 개수 
mapred.tasktracker.
reduce.tasks.
maximum 
정수  태스크트래커에서 동시에 실행할 수 있는 리듀스 태스크 개수 
mapred.child.java.
opts 
문자열  -Xms200m  태스크트래커에서 자식 프로세서를 실행할때 사용하는 JVM옵션이다.