하둡 네임노드 에러

Jihyun Lee·2022년 11월 16일
0

achacha-project

목록 보기
2/2
post-thumbnail

하둡 분산 클러스터를 구상한 후, 하둡을 실행 시켰으나, 오류가 발생했다.

하둡 클러스터 구성은 namenode01/02, datanode01/02이며,
자세한 내용은 여기!

https://velog.io/@jhyun223/EC2에서-하둡-분산-클러스터-만들기

에러 상황

  1. start-all.sh 시, namenode만 안 올라옴

해결을 위한 노력

결론부터 말하자면, try4에서 해결했다.

Try1. log를 확인하자.

로그를 우선적으로 살펴보니 이렇게 적혀 있었다.

# log 확인
$ ~/hadoop/logs/hadoop-ubuntu-namenode-namenode.log

# log error 내용
java.net.BindException: Problem binding to [namenode:9000] java.net.BindException: Cannot assign requested address; For more details see:  http://wiki.apache.org/hadoop/BindException

9000번 포트에 바인딩이 되지 않는 듯 하다.
EC2 사이트에서 인바운드 규칙에 9000번이 추가되어 있지 않았으므로, 추가해주었다.

이후 다시 namenode 포맷 후 실행

$ hdfs namenode -format
$ start-all.sh

하지만 네임노드는 안 올라온다!ㅠ

try2. 포트 충돌 가능성

여러 레퍼런스를 찾다가 포트가 충돌되었을 가능성이 있다는 것을 보고, 포트 번호를 변경 설정해주었다.
9001번으로 변경하고, ufw로 방화벽도 열어주었다.

$ sudo ufw allow 9001

응 안돼~ ㅠㅠ
다시 9000번으로 돌려줬다..

try3. 공식 문서 확인

로그를 잘 살펴보면 이 error와 관련된 내용은 공식 문서 어디를 참고해라! 라고 적혀 있어서 해당 공식 문서를 살펴보았다.

https://cwiki.apache.org/confluence/display/HADOOP2/BindException

공식 문서에서 제공하는 해결 방법들

  • 포트가 이미 사용 중 (가장 가능성 높음)
    : netstat으로 9000번 포트가 사용중인지 확인해 보았으나 안 잡혀있음.

  • 포트가 1024보다 작으면 OS에서 프로그램이 “신뢰할 수 있는 포트”에 바인딩되지 않을 수 있음
    : 포트가 1024보다 큼

  • 구성이 hostname:port 값인 경우, 호스트 이름이 잘못되었거나 해당 IP 주소가 시스템에 없는 것일 수 있습니다.
    : 오타 오류 없음

  • 이미 실행중인 서비스의 인스턴스가 있음
    : 해당 사항 없음

  • EC2에서 실행 중인 경우 서비스는 공용 호스트 이름 또는 IP를 사용하거나 "0.0.0.0"을 주소로 암시적으로 사용하여 공용 Elastic IP 주소를 명시적으로 바인딩하려고 합니다.

다 확인해 봤는데 문제가 없었고, 마지막의 IP 내용에 초점을 두어 새로운 트라이를 해 보았다.

try4. hosts 파일 IP 변경

start-all.sh 시, datanode들은 외부 통신이 필요하기 때문에 public ip로 적어주는 게 맞지만, namenode의 경우 자기 자신과의 소통을 위해서는 public으로 쓸 경우, 굳이 본인과의 소통인데 외부로 나갔다가 들어온다는게 이상하다!!
라는 결론에 이르러, namenode의 경우, hosts파일에서 자기 자신의 경우에는 private ip로 기재해주었다.

$ sudo vim /etc/hosts

# 각 namenode01/02 자기 자신의 private ip로 설정 변경

이후 다시 start-all.sh 하니 namenode까지 완벽히 노드 올리기 성공!


네트워크,, 포트,, 어렵다,,
앞으로 많이 공부하자.

0개의 댓글