[HADOOP] 어떻게 실행 고정 표시기 컨테이너에서 명령을 실행하려면?
HADOOP어떻게 실행 고정 표시기 컨테이너에서 명령을 실행하려면?
나는 용기를 실행 하둡 있습니다. 나는 출력을 표시, 입력 디렉토리를 생성하는 기본 예제를 처리 같은 작업 명령을지도-줄이 포함 된 다른 고정 표시기 파일이 있습니다. 두 번째 파일에 대한 기본 이미지가 먼저 고정 표시기 파일에서 hadoop_image 생성됩니다.
편집하다
Dockerfile - 하둡을위한
#base image is ubuntu:precise
#cdh installation
#hadoop-0.20-conf-pseudo installation
#CMD to start-all.sh
start-all.sh
#start all the services under /etc/init.d/hadoop-*
이로부터 생성 된 기본 이미지 하둡.
Dockerfile2
#base image is hadoop
#flume-ng and flume-ng agent installation
#conf change
#flume-start.sh
flume-start.sh
#start flume services
나는 개별적으로 모두 용기를 실행하고 있습니다. 그것은 잘 작동합니다. 그러나 내가 실행하는 경우
docker run -it flume_service
이 수로 시작하고 프롬프트 [/ 빈 / bash는이 flume-start.sh의 마지막 라인] 나에게 강타를 보여줍니다. 상기 I 실행할
hadoop fs -ls /
두 번째 실행중인 컨테이너에, 나는 다음과 같은 오류를 얻고있다
LS는 : 514fa776649a / 172.17.5.188는 localhost로부터 전화 : 8020는 연결 예외에 실패 java.net.ConnectException : 연결이 거부; 자세한 내용은 참조하십시오 : http://wiki.apache.org/hadoop/ConnectionRefused
나는 하둡 서비스가 아직 시작되지 않기 때문에 내가이 오류를 얻고 이해합니다. 하지만 내 의심의 여지가 내 첫 번째 컨테이너가 실행되고 있습니다. 나는 두 번째 컨테이너에 대한이 같은 기본 이미지를 사용하고 있습니다. 그럼 왜 내가이 오류는 무엇입니까? 난 수로 contianer에 HDFS-site.xml 파일에서 아무것도를 변경해야합니까?
의사 분산 모드 설치.
어떤 제안?
아니면 내가 너무 같은 어떤 포트를 노출해야합니까? 그렇다면 것은 나에게 예를 제공하십시오
EDIT 2
iptables -t nat -L -n
내가 참조
sudo iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-6
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-6
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-
Chain DOCKER (2 references)
target prot opt source destination
그것은 고정 표시기의 @의 domian입니다. 아니 용기 내부.
편집하다 surazj '대답에서 마지막 코멘트를 참조하십시오
해결법
-
==============================
1.당신은 컨테이너를 연결하는 시도 해 봤나?
당신은 컨테이너를 연결하는 시도 해 봤나?
예를 들어, 용기라는 이름의 하둡은 psedo의 DIST 모드에서 실행됩니다. 당신은 수로를 포함하는 다른 용기를 가지고 싶어. 당신은 같은 컨테이너를 연결할 수
docker run -it --link hadoop:hadoop --name flume ubuntu:14.04 bash
당신이 수로 컨테이너 내부에 얻을 때 - 타입 ENV 명령은 하둡 컨테이너에 의해 노출 된 IP와 포트를 볼 수 있습니다.
플룸 컨테이너에서 당신은 같은 일을 할 수 있어야합니다. (하둡 용기에 포트를 노출한다)
$ hadoop fs -ls hdfs://<hadoop containers IP>:8020/
당신이 점점 오류가 일부 하둡 서비스 수로에서 실행되고 있지 관련이있을 수 있습니다. 서비스 실행을 확인하는 표준 새 번역을한다. 하지만 난 당신이 수로 컨테이너에서 제대로 하둡 클래스 경로 설정이있는 경우, 당신은 위의 HDFS 명령을 실행할 수 있습니다 생각은 (HDFS를 -ls : // : 8020 /) 아무것도 시작하지 않고. 그러나 당신이 원하는 경우
hadoop fs -ls /
수로 컨테이너에서 작동하도록, 당신은 또한 수로 컨테이너에 하둡 서비스를 시작해야합니다.
당신에 코어를 site.xml이 너무 네임 노드와 같은 dfs.namenode.rpc 주소를 추가 할 모든 IP의 연결을 청취
<property> <name>fs.defaultFS</name> <value>hdfs://localhost:8020</value> </property> <property> <name>dfs.namenode.rpc-address</name> <value>0.0.0.0:8020</value> </property>
네임 노드와 데이터 노드를 반드시 다시 시작 확인
sudo는 /etc/init.d/hadoop-hdfs-namenode를 다시 시작 && sudo는 /etc/init.d/hadoop-hdfs-datanode 다시 시작
그런 다음 연결 오류, 예를 들면없이 하둡 컨테이너에서이 작업을 수행 할 수 있어야한다
링크 된 용기에. 당신의 하둡 컨테이너에 의해 노출 된 포트를 볼 수 ENV를 입력
당신은 같은 것을 볼 수 HADOOP_PORT_8020_TCP = TCP : //172.17.0.11 : 8020
그럼 당신은 연결된 컨테이너에서 연결을 확인할 수 있습니다.
-
==============================
2.나는 아직 같은 문제를 만났다 생각합니다. 나는 하나가 docker1에서 하둡 명령 "start-all.sh"에 의해 하둡 네임 노드와 데이터 노드를 시작할 수 없습니다.
나는 아직 같은 문제를 만났다 생각합니다. 나는 하나가 docker1에서 하둡 명령 "start-all.sh"에 의해 하둡 네임 노드와 데이터 노드를 시작할 수 없습니다.
그것은 "hadoop-daemons.sh"를 통해 네임 노드와 데이터 노드를 시작하지만 실패 때문이다. 진짜 문제는 "SSH를"고정 표시기에서 작동하지입니다.
그래서, 당신도 할 수있다
당신은 데이터 노드와 네임 노드 명령 "표준 새 번역 '에 의해 잘 작동하고 있습니다 볼 수 있습니다
문안 인사.
from https://stackoverflow.com/questions/28178408/how-to-execute-a-command-on-a-running-docker-container by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Sqoop을 명령은 하둡에서 작동합니다 추가 않는 방법 (0) | 2019.10.12 |
---|---|
[HADOOP] 지역 사용하여 자바로 FTP에서 파일을 다운로드하면 파일을 읽을 수 있습니다 - 인코딩 문제를 (0) | 2019.10.12 |
[HADOOP] 지역의 HBase를 번호는 성장 계속 (0) | 2019.10.12 |
[HADOOP] 계단식의 직교 제품 (0) | 2019.10.12 |
[HADOOP] 하둡 맵리 듀스에서 XML 파싱 (0) | 2019.10.12 |