데이터노드를 추가/삭제하려면,

$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



4. $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes 실행.


5. 추가할 datanode3 서버의 hdfs-site.xml 등의 환경설정 파일을 적절하게 세팅
cf) hdfs-site.xml 등등


6. 추가할 datanode3 서버의 데이터노드와 태스크트래커 구동.
[root@localhost] # /home/hadoop/bin/hadoop-daemon.sh start datanode
[root@localhost] # /home/hadoop/bin/hadoop-daemon.sh start tasktracker


7. 데이터를 분산하기 위해 $HADOOP_HOME/bin/hadoop balancer -threshold N 실행으로 밸런스 맞춤. </p> <p>
(N은 데이터노드간 데이터 사이즈 차이의 한계 퍼센테이지)













Posted by bloodguy
,