hadoop cluster@docker container

5413 단어 Hdfshadoop
· hadoop을 1에서 공부하기 위해 우선 컨테이너에 환경 구축
· 수고를 줄이기 위해 sequenceiq/hadoop-docker를 이용한다
・아래 구성으로 구축


노드 이름
역할


hadoop1
Namenode/ResourceManager/datanode/NodeManager

hadoop2
datanode/NodeManager

hadoop3
datanode/NodeManager


컨테이너 이미지 얻기


docker pull sequenceiq/hadoop-docker

첫 번째 노드 시작


docker run -it --name hadoop1 -h hadoop1 -p 50070:50070 -p 8088:8088 sequenceiq/hadoop-docker /etc/bootstrap.sh -bash
/
Starting sshd:                                             [  OK  ]
Starting namenodes on [hadoop1]
hadoop1: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-hadoop1.out
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-hadoop1.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-hadoop1.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn--resourcemanager-hadoop1.out
localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-hadoop1.out
bash-4.1# 


두 번째 노드 시작


docker run -it --name hadoop2 -h hadoop2 sequenceiq/hadoop-docker /etc/bootstrap.sh -bash

세 번째 노드 시작


docker run -it --name hadoop3 -h hadoop3 sequenceiq/hadoop-docker /etc/bootstrap.sh -bash

관리 화면 보면 자동으로는 클러스터가 되지 않는다. . .

정지



bootstrap으로 단독으로 기동하고 있으므로, 우선 각각 떨어뜨린다
$HADOOP_PREFIX/sbin/stop-all.sh

hosts 설정



각 컨테이너에서 각 컨테이너의 IP 작성
vi /etc/hosts
172.17.0.2  hadoop1
172.17.0.3  hadoop2
172.17.0.4  hadoop3

HDFS 설정



이하, master가 되는 1호기로 실시

데이터 디렉토리 작성


mkdir -p /hdfs/data1

core-site.xml 수정



작성한 디렉토리의 기술을 추가
vi /usr/local/hadoop/etc/hadoop/core-site.xml 
<configuration>
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hadoop1:9000</value>
   </property>
   <property>
      <name>hadoop.tmp.dir</name>
      <value>/hdfs/data1</value>
   </property>
</configuration>

mapred-site.xml 수정



다음을 추가
vi mapred-site.xml
    <name>mapred.job.tracker</name>
    <value>hadoop1:8021</value>
    <final>true</final>
  </property>

yarn-site.xml 수정



다음을 추가
vi yarn-site.xml 
  <property>
   <name>yarn.resourcemanager.resource-tracker.address</name>
   <value>hadoop1:8031</value>
  </property>

slave 수정


vi slaves
hadoop1
hadoop2
hadoop3

2~3노드에 복사



rsync로 복사
rsync -av /usr/local/hadoop/etc/hadoop/ hadoop2:/usr/local/hadoop/etc/hadoop/

rsync -av /usr/local/hadoop/etc/hadoop/ hadoop3:/usr/local/hadoop/etc/hadoop/

초기화


$HADOOP_PREFIX/bin/hadoop namenode -format

시작



1호기로 기동
$HADOOP_PREFIX/sbin/start-all.sh

시작 확인



jps 명령으로 확인

node1
jps
218 NameNode
769 NodeManager
349 DataNode
663 ResourceManager
481 SecondaryNameNode
1089 Jps

node2~3
jps
260 Jps
162 NodeManager
61 DataNode

시작 확인 @ WebUI



우선, 3대 클러스터 구성으로 기동했다

htp://192.168.99.100:8088/cぅs r/ 때문에


http://192.168.99.100:50070/


컨테이너 재시작 대응



bootstrap 코멘트 아웃



컨테이너 재기동으로 컨피규레이션 초기화 & 낭비로 기동하기 때문에 움직이지 않게 한다.
vi /etc/bootstrap.sh
#!/bin/bash

: ${HADOOP_PREFIX:=/usr/local/hadoop}

$HADOOP_PREFIX/etc/hadoop/hadoop-env.sh

rm /tmp/*.pid

# installing libraries if any - (resource urls added comma separated to the ACP system variable)
cd $HADOOP_PREFIX/share/hadoop/common ; for cp in ${ACP//,/ }; do  echo == $cp; curl -LO $cp ; done; cd -

# altering the core-site configuration
#sed s/HOSTNAME/$HOSTNAME/ /usr/local/hadoop/etc/hadoop/core-site.xml.template > /usr/local/hadoop/etc/hadoop/core-site.xml


service sshd start
#$HADOOP_PREFIX/sbin/start-dfs.sh
#$HADOOP_PREFIX/sbin/start-yarn.sh

if [[ $1 == "-d" ]]; then
  while true; do sleep 1000; done
fi

if [[ $1 == "-bash" ]]; then
  /bin/bash
fi

그리고는 hosts가 매번 초기화되는 &IP 바뀌기 때문에--하자. .
일단 컨테이너 재기동 후, hosts 재기록하고 node1로 start-all.sh 두드리면 클러스터 상태로 기동한다.

좋은 웹페이지 즐겨찾기