*Hadoop3 를 Docker container에 올려서 실행하는 방법은 아래 링크 참고.

http://eyeballs.tistory.com/14 






Hadoop 3 깃허브에서 만든 Dockerfile 을 해부해보는 시간을 갖겠습니다.


몇몇 명령어들은 커스터마이징 되어 있기 때문에 본래의 Dockerfile과 다릅니다.

*참고로 아래 Dockerfile 을 그대로 build 하면 돌아가지 않습니다.

제대로 된 Dockerfile은 가장 위에 있는 14번 글 안에 있습니다.


FROM ubuntu:latest


ENV DEBIAN_FRONTEND noninteractive

ENV HADOOP_HOME /opt/hadoop

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64


RUN apt-get update

RUN apt-get install -y --reinstall build-essential #컴파일을 하기 위해 필요한 것들(gcc, make 등)

RUN apt-get install -y ssh 

RUN apt-get install -y rsync 

RUN apt-get install -y vim 

RUN apt-get install -y net-tools

RUN apt-get install -y openjdk-8-jdk #hadoop3 에서 필수적인 jdk8 을 설치.

RUN apt-get install -y python2.7-dev #python 2.7 로 설치.

RUN apt-get install -y libxml2-dev 

RUN apt-get install -y libkrb5-dev 

RUN apt-get install -y libffi-dev 

RUN apt-get install -y libssl-dev 

RUN apt-get install -y libldap2-dev 

RUN apt-get install -y python-lxml 

RUN apt-get install -y libxslt1-dev 

RUN apt-get install -y libgmp3-dev 

RUN apt-get install -y libsasl2-dev 

RUN apt-get install -y libsqlite3-dev  

RUN apt-get install -y libmysqlclient-dev


RUN \

    if [ ! -e /usr/bin/python ]; then ln -s /usr/bin/python2.7 /usr/bin/python; fi #/usr/bin/python 파일이 있으면 /usr/bin/python2.7을 /usr/bin/python 으로 바로가기 할 수 있도록 심볼릭 링크를 만든다.


RUN \

    wget https://archive.apache.org/dist/hadoop/core/hadoop-3.1.1/hadoop-3.1.1.tar.gz && \

    tar -xzf hadoop-3.1.1.tar.gz && \

    mv hadoop-3.1.1 $HADOOP_HOME && \

    for user in hadoop hdfs yarn mapred; do \

         useradd -U -M -d /opt/hadoop/ --shell /bin/bash ${user}; \ #hadoop, hdfs, yarn, mapred 라는 이름으로 사용자를 등록한다. home dir는 /opt/hadoop/ 이며 계정의 로그인쉘은 /bin/bash 이다.

    done && \

    for user in root hdfs yarn mapred; do \

         usermod -G hadoop ${user}; \ #위에서 만든 사용자들과 root를 hadoop 이란 그룹으로 묶는다.

    done && \

    echo "export JAVA_HOME=$JAVA_HOME" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh && \ #각종 환경 변수들을 hadoop-env.sh에 넣는다.

    echo "export HDFS_DATANODE_USER=root" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh && \

#    echo "export HDFS_DATANODE_SECURE_USER=hdfs" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh && \

    echo "export HDFS_NAMENODE_USER=root" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh && \

    echo "export HDFS_SECONDARYNAMENODE_USER=root" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh && \

    echo "export YARN_RESOURCEMANAGER_USER=root" >> $HADOOP_HOME/etc/hadoop/yarn-env.sh && \

    echo "export YARN_NODEMANAGER_USER=root" >> $HADOOP_HOME/etc/hadoop/yarn-env.sh && \

    echo "PATH=$PATH:$HADOOP_HOME/bin" >> ~/.bashrc


RUN \

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa && \ #ssh를 위한 key를 생성한다. pw는 ''. 

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && \ #생성한 키를 저장한다.

    chmod 0600 ~/.ssh/authorized_keys #권한을 사용자만 읽고 쓸 수 있도록 바꾼다.


ADD *xml $HADOOP_HOME/etc/hadoop/


ADD ssh_config /root/.ssh/config


ADD start-all.sh start-all.sh


EXPOSE 8088 9870 9864 19888 8042 8888


CMD bash start-all.sh #Docker Container가 시작되었을 때 이 명령어를 실행하여 start all 한다.


ENV DEBIAN_FRONTEND teletype

 





+ Recent posts