티스토리 뷰
개요
하둡클러스터가 부서별로 여러대를 운영할 경우 rpc-address 를 기반으로 접근하는 경우가 많다. 하지만 HA구성이 되어있다면 리더를 담당하는 서버가 변경되서 동작이 안되는 경우가 존재한다. 이걸 해결하려면 rpc-address 가 아니라 nameservice 를 이용해 접근할 수 있어야 한다.
클러스터가 다른 하둡의 nameservice 를 등록하려면 어떻게 해야할까?
다음과 같은 형식으로 hdfs-site.xml 를 수정하면 여러대의 nameservice 를 사용할 수 있게 된다.
NameService 설정 통합방법
보면 클러스터별 hdfs-site.xml 설정파일을 받아서, nameservice 관련된 설정을 묶어서 hdfs-site.xml 설정을 만들어 내면된다.
예를 들면 다음과 같다. 원래 xml 구조이지만 가독성이 좋게 properties 형으로 표현한것이니 참고하자.
다음과 같이 A, B 클러스터의 설정이 존재한다면 두개를 합친 설정을 만들면 된다.
- A클러스터 (nameservice1) : 내 클러스터
dfs.nameservices=nameservice1
dfs.client.failover.proxy.provider.nameservice1=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.namenodes.nameservice1=namenode01,namenode02
dfs.namenode.rpc-address.nameservice1.namenode01=10.10.10.1:8020
dfs.namenode.rpc-address.nameservice1.namenode02=10.10.10.2:8020
- B클러스터 (nameservice2) : 딴 사람 클러스터
dfs.nameservices=nameservice2
dfs.ha.namenodes.nameservice2=nn1,nn2
dfs.client.failover.proxy.provider.nameservice2=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.namenode.rpc-address.nameservice2.nn1=20.20.0.1:8020
dfs.namenode.rpc-address.nameservice2.nn2=20.20.0.2:8020
- A+B클러스터 (nameservice1, nameservice2) - 통합해서 둘다 사용
dfs.nameservices=nameservice1,nameservice2
dfs.ha.namenodes.nameservice1=namenode01,namenode02
dfs.client.failover.proxy.provider.nameservice1=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.namenode.rpc-address.nameservice1.namenode01=10.10.10.1:8020
dfs.namenode.rpc-address.nameservice1.namenode02=10.10.10.2:8020
dfs.ha.namenodes.nameservice2=nn1,nn2
dfs.client.failover.proxy.provider.nameservice2=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.namenode.rpc-address.nameservice2.nn1=20.20.0.1:8020
dfs.namenode.rpc-address.nameservice2.nn2=20.20.0.2:8020
참고로 다시 말하지만 편의상 xml 이 아니라 properties 로 표현한거고 실제 설정은 xml 이니 참고하자.
딴 클러스터의 hdfs-site.xml 설정을 요청해도 되지만, 하둡에서 마스터 노드의 주소를 알면 다음과 같은 패턴으로도 정보를 알아낼수 있다.
http://하둡주소:50070/conf
마무리
이렇게 hdfs-site.xml 을 수정하면, 다음과 같이 외부 클러스터도 nameservice 이름으로 접근이 가능하다.
hadoop --config <수정한 하둡설정경로> distcp hdfs://nameservice1/경로 hdfs://nameservice2/경로
얏호!
'데이터처리 > Hadoop' 카테고리의 다른 글
[YARN] java.io.IOException: DestHost:destPort 오류문제 (0) | 2022.09.19 |
---|---|
hadoop client 설치와 HADOOP_CLASSPATH 잡기 (0) | 2022.09.06 |
[하둡] 커버로스 인증시 GSS initiate failed 오류문제 (0) | 2022.07.20 |
[HADOOP] Kerberos 인증 적용된 하둡 접근하기 (0) | 2022.07.18 |
[HDFS] 파일 삭제할때 휴지통(.Trash)에 안넣고 바로 버리기 (0) | 2021.11.15 |