WordCount on Cluster Settings

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 분석 




./sbin/yarn-stop.sh 통해 master ResourceManager stop하고, slave NodeManager stop하도록 하였습니다.
또한
bin/hadoop fs -put ~/data/soc-Epinions1.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 걸쳐 저장하는 것을 그림을 통해 있습니다

댓글