인프런 커뮤니티 질문&답변

dauuni님의 프로필 이미지
dauuni

작성한 질문수

Hadoop HA Datanode java.net.UnknownHostException

작성

·

110

·

수정됨

0

Hadoop Namenode HA 구성을 했습니다.

core-site.xml에 fs.defaultFS를 hdfs://hadoop-ha로 설정했습니다.

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-ha</value>
    </property>

 

WebHDFS REST API 중 파일 생성하는 API를 Active 상태의 Namenode 주소로 호출했는데,

{
    "RemoteException": {
        "exception": "IllegalArgumentException",
        "javaClassName": "java.lang.IllegalArgumentException",
        "message": "java.net.UnknownHostException: hadoop-ha"
    }
}

위와 같은 에러가 발생합니다.

호출한 API

[ PUT ] http://{server_ip}:{active_namenode_port}/webhdfs/v1/testB?op=CREATE

 

마찬가지로 datanode의 내부 쉘에서 hdfs dfs -ls /와 같은 명령어를 입력하면,

2024-08-05 06:08:49,260 WARN fs.FileSystem: Failed to initialize filesystem hdfs://hadoop-cluster: java.lang.IllegalArgumentException: java.net.UnknownHostException: hadoop-ha

-ls: java.net.UnknownHostException: hadoop-ha

에러가 발생합니다.

 

Hadoop HA 구성은 본 서버에 namenode1, namenode2, datanode1, datanode2, datanode3을

docker compose로 같은 네트워크 내에서 동작하도록 5개 컨테이너를 생성하여 실행하였습니다.

 

각 컨테이너의 /etc/hosts에 active 상태의 namenode 주소를

active_namenode_container_ip    hadoop-ha

이렇게 하나씩 명시하면 API 호출도 잘 되고 명령어 실행도 잘 되지만,
active namenode가 죽고 standby namenode가 active 상태가 되면 동일한 에러가 발생합니다.

 

hadoop-ha를 active 상태의 namenode ip와 자동으로 연결되도록 하는 방법은 없나요? 🥲🥲

 

ha 설정은 namenode가 죽었을 때 정상적으로 돌아가게 하기 위한 구성인데,

/etc/hosts를 수동으로 명시하는 방법은 맞지 않은 거 같아서 질문 남깁니다..( ᐪ ᐪ )

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

dauuni님의 질문에 답변드립니다.

제공된 정보에는 Hadoop HA 구성 및 java.net.UnknownHostException: hadoop-ha 문제 해결에 관한 직접적인 해답이 포함되어 있지 않습니다. 그러나 문제의 근본적인 원인은 Hadoop 클러스터의 HA(High Availability) 구성 시 hadoop-ha라는 호스트 이름이 클러스터 내 다른 노드에서 잘 해석되지 않기 때문일 가능성이 높습니다.

HA 구성에서는 Zookeeper와 같은 외부 서비스를 사용하여 현재 활성 상태인 NameNode의 주소를 추적하고 해당 정보를 클러스터 내부에 공유하는 방법이 일반적입니다. 따라서, 문제를 해결하려면 다음과 같은 접근 방법을 고려해 볼 수 있습니다:

  1. Zookeeper Quorum 설정 확인: Hadoop HA 환경에서 Zookeeper는 Active/Standby 상태의 NameNode 정보를 관리하는 데 사용됩니다. hadoop-ha 호스트 이름에 대한 참조는 Zookeeper를 통해 관리되어야 하며, 클러스터의 모든 컴포넌트(예: DataNodes, 클라이언트 등)가 해당 정보에 접근할 수 있어야 합니다.

  2. core-site.xml 및 hdfs-site.xml 설정 재확인: HA 구성과 관련된 설정이 올바르게 구성되었는지 확인합니다. 특히 hdfs-site.xml에서 dfs.nameservices, dfs.ha.namenodes.[nameservice id], dfs.namenode.rpc-address.[nameservice id].[namenode id] 등의 설정이 올바르게 되어 있는지 검토합니다.

  3. DNS 또는 Hosts 파일: 시스템의 /etc/hosts 파일을 수동으로 수정하는 대신, DNS 서비스를 사용하여 hadoop-ha 같은 논리적인 호스트 이름을 해결할 수 있도록 구성하는 방식을 고려해 보세요. 이 경우, DNS가 failover를 감지하고 자동으로 새로운 Active NameNode의 IP 주소를 반영하도록 할 수 있어야 합니다.

고급 HA 구성 문제와 같이 복잡한 상황에서는 Hadoop 공식 문서, 특히 HA 구성과 관련된 섹션을 살펴보는 것이 좋습니다. 또한 Hadoop 관련 커뮤니티나 포럼에서 유사한 문제를 경험한 사용자들의 사례를 참고하는 것도 도움이 될 수 있습니다.

제가 드린 답변이 dauuni님의 문제 해결에 도움이 되길 바랍니다. 좀 더 구체적인 도움이 필요하면, Hadoop 공식 문서나 관련 커뮤니티에 질문을 올리시는 것도 좋은 방법입니다.

dauuni님의 프로필 이미지
dauuni

작성한 질문수

질문하기