• 검색 결과가 없습니다.

docker로 spark-hadoop-cluster 만들기

N/A
N/A
Protected

Academic year: 2022

Share "docker로 spark-hadoop-cluster 만들기"

Copied!
6
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

docker로 spark-hadoop-cluster 만들기

1. 작업 디렉토리 생성 2.Dockerfile 작성 3.도커이미지 빌드

4.Dockerhub에 도커이미지 업로드 (1) 도커허브에 Repository 만들기 (2) 도커이미지 이름 변경 (3) 도커이미지 업로드 5.spark-hadoop-cluster 구동

(1) 컨테이너 구동 (2) 클러스터 구동 (3) 클러스터 구동 테스트 6.github와 연동

(1) 작업디렉토리 github와 연동 (2) Dockerhub autobuild 적용 개선할 사항

1. 작업 디렉토리 생성

docker-spark-yarn-cluster Dockerfile

LICENSE README.md config

core-site.xml hadoop-env.sh hdfs-site.xml mapred-site.xml slaves

spark

log4j.properties spark-defaults.conf spark-env.sh ssh_config yarn-site.xml scripts

spark-services.sh startHadoopCluster.sh

2.Dockerfile 작성

vim Dockerfile

FROM centos:7 USER root

# os & JAVA RUN yum -y update \

&& yum install -y openssh-server openssh-clients \ && yum -y install vim net-tools zip wget \

&& yum clean all

#

RUN wget -O /hadoop.tar.gz http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz \ && tar xfz hadoop.tar.gz \

&& mv /hadoop-2.7.7 /usr/local/hadoop \ && rm /hadoop.tar.gz

#

RUN wget -O /spark.tar.gz http://apache.mirror.cdnetworks.com/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz \ && tar xfz spark.tar.gz \

&& mv /spark-2.4.5-bin-hadoop2.7 /usr/local/spark \ && rm /spark.tar.gz

(2)

#scala

RUN wget http://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.rpm \ && yum install -y scala-2.11.8.rpm \

&& yum clean all \ && rm scala-2.11.8.rpm

# java

RUN yum install -y java-1.8.0-openjdk-devel ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk

# ssh

RUN ssh-keygen -t rsa -f $HOME/.ssh/id_rsa -P "" \

&& cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

RUN sed -i 's/HostKey/\#HostKey/g' /etc/ssh/sshd_config \

&& echo "HostKey ~/.ssh/id_rsa" >> /etc/ssh/sshd_config

# /

ENV HADOOP_HOME=/usr/local/hadoop ENV SPARK_HOME=/usr/local/spark

ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME:sbin

RUN mkdir -p $HADOOP_HOME/hdfs/namenode \ && mkdir -p $HADOOP_HOME/hdfs/datanode

# /

COPY config/ /tmp/

RUN mv /tmp/ssh_config $HOME/.ssh/config \

&& mv /tmp/hadoop-env.sh $HADOOP_HOME/etc/hadoop/hadoop-env.sh \ && mv /tmp/core-site.xml $HADOOP_HOME/etc/hadoop/core-site.xml \ && mv /tmp/hdfs-site.xml $HADOOP_HOME/etc/hadoop/hdfs-site.xml \

&& mv /tmp/mapred-site.xml $HADOOP_HOME/etc/hadoop/mapred-site.xml.template \

&& cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml \ && mv /tmp/yarn-site.xml $HADOOP_HOME/etc/hadoop/yarn-site.xml \

&& cp /tmp/slaves $HADOOP_HOME/etc/hadoop/slaves \ && mv /tmp/slaves $SPARK_HOME/conf/slaves \

&& mv /tmp/spark/spark-env.sh $SPARK_HOME/conf/spark-env.sh \

&& mv /tmp/spark/log4j.properties $SPARK_HOME/conf/log4j.properties \ && mv /tmp/spark/spark-defaults.conf $SPARK_HOME/conf/spark-defaults.conf

# &

ADD scripts/spark-services.sh $HADOOP_HOME/spark-services.sh

RUN chmod 744 -R $HADOOP_HOME

RUN $HADOOP_HOME/bin/hdfs namenode -format

EXPOSE 50010 50020 50070 50075 50090 8020 9000 EXPOSE 10020 19888

EXPOSE 8030 8031 8032 8033 8040 8042 8088

EXPOSE 49707 2122 7001 7002 7003 7004 7005 7006 7007 8888 9000 ENTRYPOINT /usr/sbin/sshd; cd $SPARK_HOME; bash

도커파일 다이어트 시키기

3.도커이미지 빌드

docker build -t sunny-spark-hadoop-cluster:1.0 .

4.Dockerhub에 도커이미지 업로드

(3)

(1) 도커허브에 Repository 만들기

https://hub.docker.com/

(2) 도커이미지 이름 변경

docker tag -t sunny-spark-hadoop-cluster:1.0 <Dockerhub-id>/sunny-spark-hadoop-cluster:1.0

(3) 도커이미지 업로드

docker login

docker push <Dockerhub-id>/sunny-spark-hadoop-cluster:1.0

5.spark-hadoop-cluster 구동

(1) 컨테이너 구동

./startHadoopCluster.sh <the number of slave nodes>

startHadoopCluster.sh

#!/bin/bash

# VARIABLES

IMG_NAME="sunnydockerhub/sunny-spark-hadoop-cluster:latest"

HOST_PREFIX="mycluster"

NETWORK_NAME=$HOST_PREFIX

N=$1

NET_QUERY=$(docker network ls | grep -i $NETWORK_NAME) if [ -z "$NET_QUERY" ]; then

docker network create --driver=bridge $NETWORK_NAME fi

# START HADOOP SLAVES i=1

while [ $i -le $N ] do

HADOOP_SLAVE="$HOST_PREFIX"-slave-$i

docker run --name $HADOOP_SLAVE -h $HADOOP_SLAVE --net=$NETWORK_NAME -itd "$IMG_NAME"

i=$(( $i + 1 )) done

# START HADOOP MASTER

HADOOP_MASTER="$HOST_PREFIX"-master

docker run --name $HADOOP_MASTER -h $HADOOP_MASTER --net=$NETWORK_NAME \ -p 8088:8088 -p 50070:50070 -p 50090:50090 \

-p 18080:18080 \ -itd "$IMG_NAME"

(2) 클러스터 구동

(4)

#

docker attach mycluster-master

# slave ( slave )

vim $HADOOP_HOME/etc/hadoop/slaves

#

./$HADOOP_HOME/spark-services.sh

(3) 클러스터 구동 테스트

클러스터 UI 확인

리소스매니저 : http://<Host IP>:8088 HDFS : http://<Host IP>:50070

스파크 프로그램 실행

spark-submit --master yarn --deploy-mode client --num-executors 2 --executor-memory 4G --executor-cores 4 -- class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.11-2.4.5.jar

스파크 모니터링

스파크 히스토리 서버 : http://<Host IP>:18080

또는 리소스매니저 http://<Host IP>:8088 에서 yarn application 모니터링

6.github와 연동

(5)

도커허브에 이미지를 올려봤다. Dockerfile을 수정하면 이미지가 자동으로 빌드되도록 github와 연동해본다.

(1) 작업디렉토리 github와 연동

cd ~/docker-spark-yarn-cluster git init

#

git remote add origin <your-github-address>

# push git add .

git commit -m "First Commit!"

git push origin master

(2) Dockerhub autobuild 적용

Dockerhub에서 github 계정 연결 https://hub.docker.com/

Dockerhub Repository autobuild 설정 github 연결

build 설정

github의 브랜치와 Dockerfile 경로를 설정한다. 해당 브랜치에서 Dockerfile이 변경되면 Dockerhub에서 이를 감지하여 자동으로 이미지를 빌드한다.

(6)

auto build 확인

github master 브랜치에 commit하면 Dockerhub에서 이미지 빌드가 자동으로 시작된다.

개선할 사항

이미지 크기가 너무 크다. 빌드하거나 다운로드 받을 때 오래 걸린다.

이미지를 분리?해본다.

dockerhub autobuild(github) 설정을 했다. github에서 Dockerfile을 수정하면 자동 빌드된다. 근데 항상 Dockerfile 처음부분부터 빌드된다.

변경부분부터 빌드하는 방법은 없나?

도커 이미지에 하둡/스파크 설정이 박혀있다. 변경하고 싶으면 컨테이너 만든 후 사용자가 직접 수정해야 된다.

설정을 변수화?해서 컨테이너 만들 때 설정이 적용되도록 할 수 있나?

클러스터 HA 구성이 아니다.

컨테이너 붙여서 HA 구성으로 클러스터를 만들어본다?

참조

관련 문서

마지막으로 push 명령어를 사용하면 원격 저장소에 소스코드가 업로드 됩니다. git push –u

[r]

학사일정 및 월별 이미지

인터넷 이용자수, 웹사이트 수, 인터넷 접속 인프라 등 수치적인 면면으로만 보면 중국은 이 미 인터넷 쇼핑몰 시장이 성장할 만한 충분한 조 건을 갖추고 있는 것처럼 보인다..

따라서 절단면의 초점을 수동 으로 맞춘 다음에 렌즈에 테이프를 붙여서 초점이 바뀌지 않게 하였고, 하루에 2번씩 디지털사진기의 자동초점 기능을 써서 확인하였다..

이 연구에서는 미국보다 더 좋은 절단면을 만들기 위해서 시신의 온몸을 포매하고 얼리는 장비 (포매상자, 냉동고)와 기술, 그리고 0.2 mm 간격으로 연속절단하는 장비

낭비작업 하나하나에 대해 왜(Why)를 되풀이 하여 낭비에 대한 근본적인 문제가 무엇인가를 찾는다..

레드 + 네이비 남성적인 느낌 강하고 브라운 +. 네이비