hdfs:// 로 데이터를 읽고 쓰는 클라이언트를 방화벽 너머에 두어야 한다. HA 와 Kerberos 가 켜진 클러스터 기준으로 어떤 포트가 필요한지 정리한다.
클라이언트는 메타데이터를 NameNode 에서 받고, 실제 데이터는 DataNode 와 주고받는다. 두 계층 모두 열려 있어야 한다. NameNode 만 열고 DataNode 를 막아 두면 파일 목록은 보이는데 읽기가 멈춘다.
| 대상 | 기본 포트 | 설정 키 | 용도 |
|---|---|---|---|
| NameNode RPC | 8020 | dfs.namenode.rpc-address |
메타데이터. 배포판에 따라 9000 |
| NameNode HTTP | 9870 | dfs.namenode.http-address |
웹 UI, WebHDFS |
| NameNode HTTPS | 9871 | dfs.namenode.https-address |
TLS 사용 시 |
| DataNode 데이터 전송 | 9866 | dfs.datanode.address |
실제 블록 읽기 · 쓰기 |
| DataNode IPC | 9867 | dfs.datanode.ipc.address |
클라이언트 IPC |
| DataNode HTTP | 9864 | dfs.datanode.http.address |
상태 확인, WebHDFS 리다이렉트 |
| JournalNode RPC | 8485 | dfs.journalnode.rpc-address |
HA 노드 간. 클라이언트에는 불필요 |
| JournalNode HTTP | 8480 | dfs.journalnode.http-address |
HA 노드 간 |
| ZooKeeper | 2181 | - | HA 에서 활성 NameNode 판별 |
9870/9864/9866/9867 은 Hadoop 3.x 기준이다. Hadoop 2.x 는 각각 50070/50075/50010/50020 을 썼다. 클러스터 버전을 먼저 확인한다.
HA 구성에서는 두 NameNode 모두에 같은 포트를 열어야 한다. 클라이언트가 active 와 standby 를 번갈아 시도해 active 를 찾기 때문이다.
| 대상 | 포트 | 프로토콜 | 용도 |
|---|---|---|---|
| KDC | 88 | TCP/UDP | 티켓 발급 |
| kadmin | 749 | TCP | principal 관리 |
| kpasswd | 464 | TCP/UDP | 비밀번호 변경 |
클라이언트에서 KDC 로 88 이 열려 있어야 kinit 이 된다. 시간 동기화도 필수다. NTP 가 어긋나면 Clock skew too great 로 인증이 실패한다.
kinit -kt /etc/security/keytabs/user.keytab user@KRB.EXAMPLE.NET
klist
hdfs dfs -ls /
nc -vz namenode01 8020
nc -vz datanode01 9866
hdfs getconf -confKey dfs.namenode.rpc-address
hdfs getconf -confKey dfs.datanode.address
hdfs dfsadmin -report | head
WebHDFS 는 NameNode HTTP 포트로 요청을 받은 뒤 DataNode HTTP 포트로 리다이렉트한다. 따라서 클라이언트에서 DataNode 의 HTTP 포트까지 접근할 수 있어야 한다. 접근이 불가능한 망 구성이라면 WebHDFS 대신 HttpFS 게이트웨이를 두고 한 포트만 여는 편이 낫다.
클라이언트가 DataNode 를 IP 가 아닌 호스트명으로 찾게 하려면 dfs.client.use.datanode.hostname=true 를 준다. NAT 환경이나 DNS 만 열린 환경에서 필요하다.