웹사이트 검색

RHEL/CentOS 6.5에서 CDH4를 사용하여 Hadoop 다중 노드 클러스터 설치


Hadoop은 Apache가 빅데이터 처리를 위해 개발한 오픈소스 프로그래밍 프레임워크입니다. HDFS(Hadoop 분산 파일 시스템)를 사용하여 클러스터의 모든 데이터 노드에 분산 방식으로 데이터를 저장하고 맵리듀스 모델을 사용하여 데이터를 처리합니다.

Namenode(NN)는 HDFSJobtracker(JT)를 제어하는 마스터 데몬입니다. )는 MapReduce 엔진의 마스터 데몬입니다.

요구사항

이 튜토리얼에서는 두 개의 CentOS 6.3 VM '마스터' 및 '노드'를 사용합니다. (마스터와 노드는 내 호스트 이름입니다). '마스터' IP는 172.21.17.175이고 노드 IP는 '172.21.17.188'입니다. 다음 지침은 RHEL/CentOS 6.x 버전에서도 작동합니다.

마스터에서
[root@master ~]# hostname

master
[root@master ~]# ifconfig|grep 'inet addr'|head -1

inet addr:172.21.17.175  Bcast:172.21.19.255  Mask:255.255.252.0
노드에서
[root@node ~]# hostname

node
[root@node ~]# ifconfig|grep 'inet addr'|head -1

inet addr:172.21.17.188  Bcast:172.21.19.255  Mask:255.255.252.0

DNS가 설정되지 않은 경우 먼저 모든 클러스터 호스트가 '/etc/hosts' 파일(각 노드)에 있는지 확인하십시오.

마스터에서
[root@master ~]# cat /etc/hosts

172.21.17.175 master
172.21.17.188 node
노드에서
[root@node ~]# cat /etc/hosts

172.21.17.197 qabox
172.21.17.176 ansible-ground

CentOS에 Hadoop 다중 노드 클러스터 설치

우리는 공식 CDH 저장소를 사용하여 클러스터의 모든 호스트(마스터 및 노드)에 CDH4를 설치합니다.

1단계: CDH 리포지토리 다운로드 설치

공식 CDH 다운로드 페이지로 이동하여 CDH4(예: 4.6) 버전을 다운로드하거나 다음 wget 명령을 사용하여 저장소를 다운로드하고 설치할 수 있습니다.

RHEL/CentOS 32비트
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/i386/cloudera-cdh-4-0.i386.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.i386.rpm
RHEL/CentOS 64비트
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm

Hadoop 다중 노드 클러스터를 설치하기 전에 시스템 아키텍처에 따라 다음 명령 중 하나를 실행하여 Cloudera 공개 GPG 키를 리포지토리에 추가하세요.

## on 32-bit System ##

rpm --import http://archive.cloudera.com/cdh4/redhat/6/i386/cdh/RPM-GPG-KEY-cloudera
## on 64-bit System ##

rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera

2단계: JobTracker 및 NameNode 설정

그런 다음, 다음 명령을 실행하여 마스터 서버에 JobTracker 및 NameNode를 설치하고 설정합니다.

[root@master ~]# yum clean all 
[root@master ~]# yum install hadoop-0.20-mapreduce-jobtracker
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-namenode

3단계: 보조 이름 노드 설정

다시 마스터 서버에서 다음 명령을 실행하여 보조 이름 노드를 설정합니다.

[root@master ~]# yum clean all 
[root@master ~]# yum install hadoop-hdfs-secondarynam

4단계: Tasktracker 및 Datanode 설정

다음으로 JobTracker, NameNode 및 보조(또는 대기) NameNode 호스트(이 경우 노드)를 제외한 모든 클러스터 호스트(노드)에 tasktracker 및 datanode를 설정합니다.

[root@node ~]# yum clean all
[root@node ~]# yum install hadoop-0.20-mapreduce-tasktracker hadoop-hdfs-datanode

5단계: Hadoop 클라이언트 설정

별도의 컴퓨터에 Hadoop 클라이언트를 설치할 수 있습니다(이 경우 데이터노드에 설치했으므로 모든 컴퓨터에 설치할 수 있습니다).

[root@node ~]# yum install hadoop-client

6단계: 노드에 HDFS 배포

이제 위 단계를 마쳤으면 hdfs 배포(모든 노드에서 수행)로 진행해 보겠습니다.

기본 구성을 /etc/hadoop 디렉토리(클러스터의 각 노드에 있음)에 복사합니다.

[root@master ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
[root@node ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster

대안 명령을 사용하여 다음과 같이 사용자 정의 디렉터리를 설정합니다(클러스터의 각 노드에서).

[root@master ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf

[root@master ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
[root@node ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf

[root@node ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

7단계: 구성 파일 사용자 정의

이제 'core-site.xml' 파일을 열고 클러스터의 각 노드에서 'fs.defaultFS'를 업데이트하세요.

[root@master conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://master/</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://master/</value>
</property>
</configuration>

다음으로 클러스터의 각 노드에 있는 hdfs-site.xml에서 "dfs.permissions.superusergroup"을 업데이트합니다.

[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
     <name>dfs.name.dir</name>
     <value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
  </property>
  <property>
     <name>dfs.permissions.superusergroup</name>
     <value>hadoop</value>
  </property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
     <name>dfs.name.dir</name>
     <value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
  </property>
  <property>
     <name>dfs.permissions.superusergroup</name>
     <value>hadoop</value>
  </property>
</configuration>

참고: 위 구성이 모든 노드에 있는지 확인하세요(한 노드에서 수행하고 scp를 실행하여 나머지 노드에 복사). 노드).

8단계: 로컬 저장소 디렉터리 구성

NameNode( Master 및 Node )의 'hdfs-site.xml'에서 "dfs.name.dir 또는 dfs.namenode.name.dir"을 업데이트합니다. 강조표시된 값을 변경하세요.

[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
 <name>dfs.namenode.name.dir</name>
 <value>file:///data/1/dfs/nn,/nfsmount/dfs/nn</value>
</property>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
 <name>dfs.datanode.data.dir</name>
 <value>file:///data/1/dfs/dn,/data/2/dfs/dn,/data/3/dfs/dn</value>
</property>

9단계: 디렉터리 생성 및 권한 관리

아래 명령을 실행하여 디렉토리 구조를 생성하고 Namenode(마스터) 및 Datanode(노드) 시스템에서 사용자 권한을 관리하십시오.

[root@master]# mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
[root@master]# chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
[root@node]#  mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
[root@node]#  chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn

다음 명령을 실행하여 (마스터에서) 네임노드를 포맷합니다.

[root@master conf]# sudo -u hdfs hdfs namenode -format

10단계: 보조 NameNode 구성

hdfs-site.xml 파일에 다음 속성을 추가하고 Master에 표시된 대로 값을 바꿉니다.

<property>
  <name>dfs.namenode.http-address</name>
  <value>172.21.17.175:50070</value>
  <description>
    The address and port on which the NameNode UI will listen.
  </description>
</property>

참고: 이 경우 값은 마스터 VM의 IP 주소여야 합니다.

이제 MRv1(Map-reduce 버전 1)을 배포해 보겠습니다. 표시된 값에 따라 'mapred-site.xml' 파일을 엽니다.

[root@master conf]# cp hdfs-site.xml mapred-site.xml
[root@master conf]# vi mapred-site.xml
[root@master conf]# cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
 <name>mapred.job.tracker</name>
 <value>master:8021</value>
</property>
</configuration>

다음으로, 다음 scp 명령을 사용하여 'mapred-site.xml' 파일을 노드 머신에 복사합니다.

[root@master conf]# scp /etc/hadoop/conf/mapred-site.xml node:/etc/hadoop/conf/
mapred-site.xml                                                                      100%  200     0.2KB/s   00:00

이제 MRv1 데몬에서 사용할 로컬 저장소 디렉터리를 구성합니다. 다시 'mapred-site.xml' 파일을 열고 각 TaskTracker에 대해 아래와 같이 변경합니다.

<property>
 <name>mapred.local.dir</name>
 <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value>
</property>

'mapred-site.xml' 파일에서 이러한 디렉터리를 지정한 후 디렉터리를 생성하고 클러스터의 각 노드에 올바른 파일 권한을 할당해야 합니다.

mkdir -p /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
chown -R mapred:hadoop /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local

10단계: HDFS 시작

이제 다음 명령을 실행하여 클러스터의 모든 노드에서 HDFS를 시작합니다.

[root@master conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
[root@node conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done

11단계: HDFS /tmp 및 MapReduce /var 디렉터리 생성

아래에 언급된 것과 같이 적절한 권한으로 /tmp를 생성해야 합니다.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp
[root@master conf]# sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
[root@master conf]# sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred

이제 HDFS 파일 구조를 확인하십시오.

[root@node conf]# sudo -u hdfs hadoop fs -ls -R /

drwxrwxrwt   - hdfs hadoop          	0 2014-05-29 09:58 /tmp
drwxr-xr-x   	- hdfs hadoop          	0 2014-05-29 09:59 /var
drwxr-xr-x  	- hdfs hadoop          	0 2014-05-29 09:59 /var/lib
drwxr-xr-x   	- hdfs hadoop         	0 2014-05-29 09:59 /var/lib/hadoop-hdfs
drwxr-xr-x   	- hdfs hadoop          	0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache
drwxr-xr-x   	- mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred
drwxr-xr-x   	- mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred
drwxrwxrwt   - mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging

HDFS를 시작하고 '/tmp'를 생성한 후 JobTracker를 시작하기 전에 'mapred.system.dir' 매개변수로 지정된 HDFS 디렉토리를 생성하십시오(기본적으로 $ {hadoop.tmp .dir}/mapred/system 및 소유자를 mapred로 변경합니다.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp/mapred/system
[root@master conf]# sudo -u hdfs hadoop fs -chown mapred:hadoop /tmp/mapred/system

12단계: MapReduce 시작

MapReduce를 시작하려면: TT 및 JT 서비스를 시작하세요.

각 TaskTracker 시스템에서
[root@node conf]# service hadoop-0.20-mapreduce-tasktracker start

Starting Tasktracker:                               [  OK  ]
starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-node.out
JobTracker 시스템에서
[root@master conf]# service hadoop-0.20-mapreduce-jobtracker start

Starting Jobtracker:                                [  OK  ]

starting jobtracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-master.out

다음으로 각 hadoop 사용자에 대한 홈 디렉터리를 만듭니다. NameNode에서 이 작업을 수행하는 것이 좋습니다. 예를 들어.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir  /user/<user>
[root@master conf]# sudo -u hdfs hadoop fs -chown <user> /user/<user>

참고: 여기서 는 각 사용자의 Linux 사용자 이름입니다.

또는 다음과 같이 홈 디렉터리를 만들 수 있습니다.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/$USER
[root@master conf]# sudo -u hdfs hadoop fs -chown $USER /user/$USER

13단계: 브라우저에서 JT, NN UI 열기

브라우저를 열고 URL을 http://ip_address_of_namenode:50070으로 입력하여 Namenode에 액세스하세요.

JobTracker에 액세스하려면 브라우저에서 다른 탭을 열고 URL을 http://ip_address_of_jobtracker:50030으로 입력하세요.

이 절차는 RHEL/CentOS 5.X/6.X에서 성공적으로 테스트되었습니다. 설치에 문제가 있는 경우 아래에 의견을 남겨주시면 해결 방법을 안내해 드리겠습니다.