본문 바로가기
BigData 기술/Hadoop

[HDFS] Rack Awareness 란

by 잇서니 2020. 7. 15.
반응형

 

HDFS 데이터 블록 복제

HDFS는 기본적으로 블록을 3개씩 복제한다. 복제시 아래와 같은 순서로 블록을 저장할 데이터노드를 선정한다.

Node local > Rack local > off switch
  • Node local : 작업하는 노드가 데이터노드의 일부라면, 여기에 블록을 저장한다.
  • Rack local : 작업하는 노드와 동일한 랙에 있는 노드에 블록을 저장한다.
  • off switch : 작업하는 노드와 다른 랙에 있는 노드에 블록을 저장한다.

 

이렇게 나누어 저장함으로써 장애가 생겨도 데이터 유실이 없도록 한다.

 

 

근데 하둡이 어떻게 노드의 위치를 알 수 있을까?

하둡의 Rack Awareness 설정을 통해 노드의 위치를 파악하는 것이다.

만약 namenode가 topology를 알아오지 못하면 무조건 /default-rack 으로 보낸다.

 

Rack Awareness 설정

/etc/hadoop/conf/core-site.xml

<property>
        <name>net.topology.node.switch.mapping.impl</name>
        <value>org.apache.hadoop.net.ScriptBasedMapping</value>
</property>
<property>
        <name>net.topology.script.file.name</name>
        <value>/etc/hadoop/conf/topology.sh</value>
</property>

 

/etc/hadoop/conf/topology.sh

#!/bin/sh
HADOOP_CONF=/etc/hadoop/conf

while [ $# -gt 0 ] ; do
  nodeArg=$1
  exec< ${HADOOP_CONF}/topology.data
  result=""
  while read line ; do
    ar=( $line )
    if [ "${ar[0]}" = "$nodeArg" ] ; then
      result="${ar[1]}"
    fi
  done
  shift
  if [ -z "$result" ] ; then
    echo -n "/default/rack "
  else
    echo -n "$result "
  fi
done

 

/etc/hadoop/conf/topology.data

# Add hostnames to this file. Format <host ip> <rack name>
10.10.10.10 /dc1/rack0
10.10.10.11 /dc1/rack1

 

랙설정 이후 YARN resource manager와 Namenode 재시작이 필요하다.

 

참고

기존 노드의 topology.data 의 레벨과(ex. /dc1/rack0) 추가 노드의 topology.data (ex. /default-rack) 의 레벨이 다르면  노드 추가가 제대로 진행되지 않는다. 네임노드가 topology를 제대로 알지 못하므로 /default-rack 을 무조건 찾는다.

노드 추가 작업시, topology 설정을 마치고 진행하자 !

 

참고링크

https://d2.naver.com/helloworld/0475200

 

반응형

댓글