일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- airflow설치
- jmx-exporter
- Streamlit
- prometheus
- Redshift
- kafka
- aiagent
- milvus
- vectorDB
- RAG
- Python
- metadabatase
- javascript
- amazonlinux
- ubuntu
- sparkstreaming
- Dag
- pySpark
- 루프백주소
- 설치
- dockercompose
- grafana
- SQL
- 오블완
- BigQuery
- docker
- hadoop
- MSA
- airflow
- spark
- Today
- Total
데이터 노트
하둡 네임노드 에러 해결 본문
하둡 분산 클러스터를 구상한 후, 하둡을 실행 시켰으나, 오류가 발생했다.
하둡 클러스터 구성은 namenode01/02, datanode01/02이며,
자세한 내용은 여기!
에러 상황
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까지 완벽히 노드 올리기 성공!
네트워크,, 포트,, 어렵다,,
앞으로 많이 공부하자.
이전 블로그에서 옮겨온 글입니다.
'Lab' 카테고리의 다른 글
[side-1] Milvus DB에 텍스트 데이터 임베딩하여 적재하기 (0) | 2025.01.17 |
---|---|
[ubuntu 20.04] docker 설치하기 (0) | 2023.02.10 |
EC2에서 하둡 분산 클러스터 만들기 (0) | 2023.02.10 |
Window 노트북 Linux 컴퓨터 만들기 (Ubuntu) (0) | 2023.02.10 |
docker로 mysql 설치하기 (MAC) (0) | 2022.08.22 |