hadoop cluster@docker container
· 수고를 줄이기 위해 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 두드리면 클러스터 상태로 기동한다.
Reference
이 문제에 관하여(hadoop cluster@docker container), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/esmjp/items/bb04c4c2512f9edcf1db텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)