복붙노트

[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. ==============================

    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. ==============================

    2.나는 아직 같은 문제를 만났다 생각합니다. 나는 하나가 docker1에서 하둡 명령 "start-all.sh"에 의해 하둡 네임 노드와 데이터 노드를 시작할 수 없습니다.

    나는 아직 같은 문제를 만났다 생각합니다. 나는 하나가 docker1에서 하둡 명령 "start-all.sh"에 의해 하둡 네임 노드와 데이터 노드를 시작할 수 없습니다.

    그것은 "hadoop-daemons.sh"를 통해 네임 노드와 데이터 노드를 시작하지만 실패 때문이다. 진짜 문제는 "SSH를"고정 표시기에서 작동하지입니다.

    그래서, 당신도 할 수있다

    당신은 데이터 노드와 네임 노드 명령 "표준 새 번역 '에 의해 잘 작동하고 있습니다 볼 수 있습니다

    문안 인사.

  3. from https://stackoverflow.com/questions/28178408/how-to-execute-a-command-on-a-running-docker-container by cc-by-sa and MIT license