데이터노드를 추가/삭제하려면,
$HADOOP_HOME/conf/slaves 에 데이터노드 호스트명를 추가하거나 삭제하고,
$HADOOP_HOME/bin/start-all.sh, stop-all.sh 로 재구동하면 되긴 하지만,
이렇게 하면 다운타임이 생기므로 다운타임 없이 하려면 $HADOOP_HOME/conf/hdfs-site.xml 에
dfs.hosts.exclude, dfs.host 를 설정해주고 $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes 명령어를 실행해주면 됨.
물론 추후 hadoop cluster 재구동 할 때 적용될 수 있도록 slaves에도 동일한 내용이 적용되어 있어야 함.
데이터노드 삭제
1. $HADOOP_HOME/conf/hdfs-site.xml 파일에 아래 내용 추가
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/conf/exclude_list</value>
</property>
2. 위에서 지정한 /home/hadoop/conf/exclude_list 파일에 삭제하고자 하는 데이터노드의 호스트명을 기록.
host_to_remove1
host_to_remove2
3. $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes 실행.
$HADOOP_HOME/bin/hadoop dfsadmin -report 로 보면 삭제할 데이터노드의 Decommission Status가 Decommission in progress로 나옴.
서버가 후지고 데이터가 많다면 replicationFactor를 맞추기 위해 나머지 데이터노드들이 데이터를 분배하는 과정이 필요하므로 오래 걸릴 수 있음.
[주의]
뭐가 꼬인건지 호스트명으로 지정하면 삭제가 안되고 죽은 노드만 하나 더 추가되는 경우가 생김.
원래 데이터노드가 7개였는데 exclude를 지정하면 (8 total, 1 dead)로 뜨는 경우가 있음.
이럴 땐 exclude 에 호스트명이 아니라 ip 주소를 넣으면 제대로 삭제가 됨.
데이터노드 추가
1. 네임노드의 $HADOOP_HOME/conf/hdfs-site.xml 파일에 아래 내용 추가.
<property>
<name>dfs.hosts</name>
<value>/home/hadoop/conf/include_list</value>
</property>
2. 위에서 지정한 /home/hadoop/conf/include_list 파일에 데이터노드로 사용하고자 하는 모든 호스트명 기록.
datanode1
datanode2
datanode3
3. 네임노드의 $HADOOP_HOME/conf/slaves 파일에 추가하고자 하는 데이터노드 호스트명 추가.
datanode1
datanode2
datanode3
[root@localhost] # /home/hadoop/bin/hadoop-daemon.sh start datanode
[root@localhost] # /home/hadoop/bin/hadoop-daemon.sh start tasktracker
'Hadoop' 카테고리의 다른 글
[Hadoop] MapReduce가 이상할 정도로 오래 걸리거나 실패할 경우 (Too many fetch-failures) (0) | 2015.03.20 |
---|---|
[Hadoop] balancer 대역폭 변경 (set balancer bandwidth) (0) | 2015.03.19 |
[Hadoop] 네이티브 라이브러리 빌드 (build native library) (9) | 2015.03.17 |
[Hadoop] 사용가능한 메모리가 있는데 swap 사용량이 증가할 때 (swapped out even when there is free memory available) (0) | 2015.01.28 |
[Hadoop] Streaming Map/Reduce 시 input 파일(디렉토리) 지정하기 (0) | 2012.08.10 |