이야기박스

Hadoop 시리즈. Hadoop3 설치하기 - Observer node 본문

Computer & Data/Big Data

Hadoop 시리즈. Hadoop3 설치하기 - Observer node

박스님 2021. 9. 26. 14:24
반응형

이번에는 지난 하둡 설치 포스팅에 이어서 하둡3의 새로운 기능, 옵저버 노드에 대한 포스팅을 다루어보도록 하겠습니다.

 

Observer Namenode?

HA 구성된 하둡 네임노드를 보면, 하나의 Active Namenode, 그리고 하나 이상의 Standby Namenode로 구성되게 됩니다.

하지만 Standby Namenode는 직접적인 하둡의 읽기/쓰기 요청을 처리해주지 않기 때문에, Active Namenode 혼자서 독박을 쓰게 됩니다. 규모가 큰 클러스터 일 수록, 오버헤드가 크겠죠.

 

Observer Namenode는 여기서 Active Namenode의 읽기 요청에 부담을 덜어주게 됩니다. Active Namenode와 마찬가지로 읽기에 사용될 블록의 위치 정보를 가지고 읽기 요청을 함께 처리하게 됩니다.

 

동작 방식

클라이언트가 하둡에 읽기 요청을 생성하면 Active Namenode로부터 트랜잭션 ID를 얻게 됩니다. 그리고 이후에, 클라이언트가 하둡에 재차 읽기 요청을 하게 되면,  이 요청은 Observer Namenode로 전달되게 됩니다.

 

Observer Namenode는 여기서 받은 트랜잭션 ID와 원래 자신이 가지고 있던 트랜잭션 ID를 비교하고 적합한 결과를 클라이언트에게 반환하게 됩니다.

 

구성 방법

지난 기본 설치 구성의 마스터 3번서버를 Observer 서버로 전환하려고 합니다.

노드 역할 비고
story-hadoop-master01 Active Namenode  
story-hadoop-master02 Standby Namenode  
story-hadoop-master03 Standby Namenode Observer Node 테스트 예정
story-hadoop-worker01 Datanode  
story-hadoop-worker02 Datanode  
story-hadoop-worker03 Datanode  

 

ZKFC 종료

NOTE: the feature for Observer NameNode to participate in failover is not implemented yet. Therefore, as described in the next section, you should only use transitionToObserver to bring up an observer. ZKFC could be turned on the Observer NameNode, but it doesn’t do anything when the NameNode is in Observer state. ZKFC will participate in the election of Active after the NameNode is transitioned to standby state.

아직 ZKFC와 Observer Namenode를 함께 사용하지 못하는 듯 합니다. zkfc를 아래 커맨드로 종료시켜 줍니다.

hdfs --daemon stop zkfc

 

설정 정보 추가

Namenodes hdfs-site.xml

<property>
    <name>dfs.ha.tail-edits.in-progress</name>
    <value>true</value>
</property>

<property>
    <name>dfs.ha.tail-edits.period</name>
    <value>0ms</value>
</property>

<property>
    <name>dfs.ha.tail-edits.period.backoff-max</name>
    <value>10ms</value>
</property>

<property>
    <name>dfs.journalnode.edit-cache-size.bytes</name>
    <value>1048576</value>
</property>

<property>
    <name>dfs.namenode.accesstime.precision</name>
    <value>0</value>
</property>

 

Datanodes hdfs-site.xml

<property>
    <name>dfs.client.failover.proxy.provider.<nameservice></name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider</value>
</property>

<property>
    <name>dfs.client.failover.observer.auto-msync-period.<nameservice></name>
    <value>500ms</value>
</property>

 

상태 변경 명령어

hdfs haadmin -transitionToObserver nn3 --forcemanual

 

상태 확인

$ hdfs haadmin -getAllServiceState
story-hadoop-master01:8020       active
story-hadoop-master02:8020       standby
story-hadoop-master03:8020       observer

 

 

읽기 테스트

$ hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.2-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 1000
$ cat TestDFSIO_results.log
----- TestDFSIO ----- : read
            Date & time: Sun Sep 26 14:15:57 KST 2021
        Number of files: 10
 Total MBytes processed: 10000
      Throughput mb/sec: 328.69
 Average IO rate mb/sec: 360.4
  IO rate std deviation: 143.56
     Test exec time sec: 32.92

Observer Namenode를 적용하기 전, 테스트와 비교해보았습니다.

  적용 전 적용 후, 1차 적용 후, 2차
Throughput mb/sec 412.88 328.69 391.67
 Average IO rate mb/sec 464.31 360.4 408.21
IO rate std deviation 166.27 143.56 93.28
Test exec time sec 26.8 32.92 27.74

테스트 클러스터라 다른 읽기/쓰기 요청이 있는 것도 아니고, 테스트 규모가 워낙 작아서 가시적인 비교 결과는 나오지 않았습니다 ㅎㅎ

그냥 재미삼아 돌려보았습니다 ㅎㅎ

 

참고

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/ObserverNameNode.html

 

Apache Hadoop 3.3.1 – Consistent Reads from HDFS Observer NameNode

 

반응형