Word Count job on Cluster settings
1. Cluster settings
1-1. /etc/hosts 파일 수정
sudo vim /etc/hosts 명령어를 통해서 <그림 1> 과 같이 cluster node 들의 내부 ethernet ip를 입력해주었다.
<그림 1. /etc/hosts 파일 설정>
1-2. SSH Key 설정
master, slaves 들에게 무언가를 요청하고, 받을 때 ssh를 통해 접근하게 되는데, 이 때 비밀번호를 입력하지 않도록 하기 위해서 ssh key를 설정하여 이를 노드들에게 전달해주어야 한다.
따라서 다음과 같은 명령어로 설정하였다.
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
ssh-copy-id -i ~/.ssh/id_rsa.pub slave3
ssh-copy-id -i ~/.ssh/id_rsa.pub slave4
1-3. Slaves, Masters file 설정
~/hadoop/etc/hadoop/slaves 파일 ( <그림 2> ) 과 ~/hadoop/etc/hadoop/masters 파일 ( <그림 3>을 다음과 같이 수정하였다.
<그림 2. masters 파일 설정> <그림 3. slaves 파일 설정>
1-4. mapred-site.xml, core-site.xml file, hdfs-site.xml, yarn-site.xml 파일 설정
<그림 4. mapred-site.xml 파일 설정>
<그림 5. core-site.xml 파일 설정>
<그림 6. master node에서의 hdfs-site.xml 설정>
<그림 7. slave node에서의 hdfs-site.xml 설정>
<그림 8. yarn-site.xml 파일 설정>
1.5. namenode format 및 ./sbin/start-all.sh 실행
문제점 1. 원래는 master node에서 bin/hadoop namenode -format 명령어를 실행해야 했는데, 실수로 slave2에서 bin/hadoop namenode -format 명령어를 실행하게 되어, master와 slave2에서의 cluster setting(xml 파일들)이 날라가게 되었습니다.
해결방법: 다시 setting을 처음부터 하였습니다.
문제점 2. master node에서 bin/hadoop namenode -format명령어를 하고 ./sbin/start-all.sh 를 실행하니, 모든 slave에서 datanode가 켜지지 않았습니다.
해결방법: 자세한 오류 로그를 살펴보니, datanode의 clusterId와 namenode의 clusterId가 맞지 않다고 하여, 모든 slave의 datanode clusterId와 namenode의 clusterId를 동일하게 해주었습니다. (hadoop namenode -format clusterId ~~~~.)
문제점 3. 다시 ./sbin/start-all.sh을 해보니 , master node에서 NodeManager와 DataNode가 켜지지 않았습니다.
해결방법: manually 켜주었습니다. 명령어: ./sbin/hadoop-daemon.sh start datanode, ./sbin/hadoop-daemon.sh start nodemanager.
위와 같은 문제점들을 해결하고, slave와 master에서 모든 데몬들이 잘 띄워져 있는지 <그림 9>, <그림 10>과 같이 확인하였습니다.
<그림 10. master에서의 jps 결과>
2. hdfs dfsadmin -report 결과
전체 dfs의 용량은 약 585GB정도로 설정되었지만 실질적인 사용가능한 용량은 약 541GB정도 였습니다.
아직 job을 제출하지 않았기 때문에 전체 dfs에서 사용되고 있는 부분은 0% 였고, corrupted block이나 missing block들이 존재하지 않았습니다.
총 5개의 node(slave1, slave2, slave3, slave4, master) 가 dfs를 구성하는데, 각각의 노드는 정상적으로 cluster에 붙어 있음을 status를 통해 확인할 수 있었고, DFS가 사용하지 않는 (즉, \dfs.datanode.data.dir. 말고 다른 곳에서 사용되고 있는) 용량은 약 4GB정도 였습니다. slave node에서 DFS에서 더 저장할 수 있는 storage 용량은 대부분 약 108GB정도 였습니다. 또한 Cache capacity가 0B이기 때문에 , Cache를 이용하고 있는 이용률(Cache used)은 0%로 나오고 있다. 즉, Cache를 사용하지 않고 있다는 의미입니다.
3. Local에 있는 Input zip파일을 hdfs에 업로드
다음과 같은 명령어를 통해 local에 있는 txt.gz파일을 hdfs에 업로드하였습니다.
bin/hadoop fs -mkdir -p /input // root 아래 input directory 생성
bin/hadoop fs -put ~/data/soc-Epinions1.txt.gz /input //hdfs에 업로드
bin/hadoop fs -mkdir -p /output // root 아래 output directory 생성
4. Cluster setting을 가지고 Word Count 돌려보기
<그림 11>과 같이 hdfs에 있는 input data를 가지고 word count 예제를 돌려보았는데, 제출한 job을 dr.who라는 user가 지속적으로 죽이는 것을 관찰하였습니다. 또한, dr.who user가 제가 제출하지 않은 job들을 <그림 12>와 같이 수행하고 있는 것을 볼 수 있었습니다.
<그림 11. word count 실행>
<그림 12. Dr.who 의 job 수행>
5. NameNode Web ui 분석
또한,
bin/hadoop fs -put ~/data/soc-Epinions1.txt.gz /input
bin/hadoop fs -put ~/data/soc-LiveJournal1.txt.gz /input
bin/hadoop fs -put ~/data/soc-LiveJournal1.txt.gz /input
명령어를 통해, hdfs에 gzip 파일들을 올린 후, NameNode Web ui를 확인하여 위와같은 결과를 볼 수 있습니다.
OverView 에서 보면, NameNode가 언제 시작되었는지, 버전은 무엇인지, 컴파일 된 시점은 언제인지, ClusterId는 무엇인지, Black Pool ID가 무엇인지 알 수 있습니다. 이 때, Block Pool 이란 하나의 네임스페이스에 속하는 block의 집합을 의미합니다.
Summary에서 보면, configured capacity는 585.52GB로써 이는 HDFS에 저장할 수 있는 총 용량을 의미합니다. DFS에서 사용한 용량은 약 748MB 입니다. 이 때, Non-DFS used = Configured Capacity - Remaining Space - DFS Used 이기 때문에 21.21GB정도가 DFS가 사용하지 않는 용량입니다. 또한 남아있는 용량(DFS Remaining)은 약 539GB 입니다. Block Pool이 사용한 용량은 DFS에서 사용한 용량과 동일하게 약 748MB 입니다.
또한 현재 Cluster를 구성하고 있는 Live Node는 5개(master, slave1, slave2, slave3, slave4)로 구성되어 있습니다. Dead Node는 0개인 것을 확인할 수 있습니다.
구체적인 DataNode information을 확인해보았는데, 5개의 datanode가 등록되어 있어야 하는데, 1개밖에 없는 것을 확인하였습니다. 이 문제를 해결하기 위해서, sudo vim /etc/hosts 명령어를 통해서 127.0.0.1 (루프백 ip)의 hostname이 모든 노드들이 동일하게 ‘xenial’로 설정되었던 것을 각각 ‘xenial1’, ‘xenial2’, .... ‘xenial5’, 로 바꾸어 해결하였습니다. 따라서 아래와 같은 DataNode Information을 얻을 수 있었습니다.
hdfs에 추가적으로 더 많은 input data들을 업로드 하였고, 약 9.1GB가 hdfs에 업로드 되도록 하였습니다. 위 그림에서, 4개의 노드가 hdfs를 구성함을 알 수 있습니다. 구체적으로, 각각의 slave들이 9.1GB의 data를 각 노드에 분산하여 약 2.3GB씩 약 22개의 block에 걸쳐 저장하는 것을 위 그림을 통해 볼 수 있습니다.
댓글
댓글 쓰기