하둡 분산 클러스터를 구상한 후, 하둡을 실행 시켰으나, 오류가 발생했다.
하둡 클러스터 구성은 namenode01/02, datanode01/02이며,
자세한 내용은 여기!
https://velog.io/@jhyun223/EC2에서-하둡-분산-클러스터-만들기
- start-all.sh 시, namenode만 안 올라옴
결론부터 말하자면, try4에서 해결했다.
로그를 우선적으로 살펴보니 이렇게 적혀 있었다.
# 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
하지만 네임노드는 안 올라온다!ㅠ
여러 레퍼런스를 찾다가 포트가 충돌되었을 가능성이 있다는 것을 보고, 포트 번호를 변경 설정해주었다.
9001번으로 변경하고, ufw로 방화벽도 열어주었다.
$ sudo ufw allow 9001
응 안돼~ ㅠㅠ
다시 9000번으로 돌려줬다..
로그를 잘 살펴보면 이 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 내용에 초점을 두어 새로운 트라이를 해 보았다.
start-all.sh 시, datanode들은 외부 통신이 필요하기 때문에 public ip로 적어주는 게 맞지만, namenode의 경우 자기 자신과의 소통을 위해서는 public으로 쓸 경우, 굳이 본인과의 소통인데 외부로 나갔다가 들어온다는게 이상하다!!
라는 결론에 이르러, namenode의 경우, hosts파일에서 자기 자신의 경우에는 private ip로 기재해주었다.
$ sudo vim /etc/hosts
# 각 namenode01/02 자기 자신의 private ip로 설정 변경
이후 다시 start-all.sh 하니 namenode까지 완벽히 노드 올리기 성공!
네트워크,, 포트,, 어렵다,,
앞으로 많이 공부하자.