저는 3노드 hadoop을 가지고 있고 3개의 도커 컨테이너를 시작했습니다. 우리 모두 알고 있듯이 도커 컨테이너의 서비스 포트는 -P를 사용하여 컨테이너의 모든 포트를 호스트 포트에 매핑합니다. 호스트 포트 명령은 다음과 같습니다.
으아아아호스트 디렉터리를 매핑하고, 모든 컨테이너 포트를 호스트에 매핑하고, 컨테이너의 호스트 이름을 설정하는 마스터 노드의 시작 스크립트입니다.
프로세스를 보면
결과는 다음과 같습니다. 미화 작업을 했습니다.
으아아아자주 사용하는 50070과 8088은 매핑되어 있지만 9000은 그렇지 않습니다. 9000 프로토콜이 hdfs이고 tcp에 속하지 않을 수 있다는 것을 알고 있는데 호스트에서 어떻게 액세스할 수 있나요?
IDEA를 사용하고 싶습니다. Hadoop Java 프로그램을 개발하려면 입력 및 출력 디렉터리가 hdfs:ip:9000/directory 형식이어야 합니다. 도커 컨테이너의 포트에 접근하는 방법을 모르겠습니다
HDFS ipc 포트가 없다는 것은
.sequenceiq/hadoop-docker
이미지 시퀀스iq/hadoop-docker#48의 버그입니다. 수정되었지만(https://github.com/sequenceiq... 참조), 해당 관리자는 새 버전의 이미지를 만들지 않았기 때문에 지금도 사용하는 데 문제가 있습니다해결책은 매우 간단합니다.
docker run
뒤의 매개변수에-p 9000:9000
을 수동으로 추가하면 됩니다.그런데 Hadoop 웹사이트에서
sequenceiq/hadoop-docker
docker 이미지를 언급하고 있지만Dockerfile
글로 볼 때 해당 작성자는 Docker에 대해 피상적으로만 이해하고 있으며 실제로는 Docker의 공식Dockerfile
모범 사례를 따르지 않습니다. 지침에 따르면 이미지가 매우 부풀어 오르고 잘 만들어지지 않았습니다. 능력이 있다면 공식 모범 사례 지침에 따라 필요한 이미지를 맞춤설정해야 합니다.