Zeppelin/Jupyter Notebook 서버로 Spark Job 제출
  • PDF

Zeppelin/Jupyter Notebook 서버로 Spark Job 제출

  • PDF

서버에 Zeppelin/Jupyter Notebook 서버를 설치하고 이 노트북을 이용하여 Cloud Hadoop에 Spark를 실행하기 위한 클라이언트 Configuration을 소개합니다.

참고
  • Cloud Hadoop에서 사용하는 HDP의 스택에는 Zeppelin이 이미 포함되어 있습니다. 하지만 리소스 분리를 위해 Zeppelin을 Hadoop 클러스터 외부 VM 또는 Docker에 설치하는 구성을 권장합니다.
  • 이 예제에서는 별도 리눅스 User를 생성하지 않고 root로 진행합니다. 운영 환경에서는 전용 User를 생성하는 것을 권장합니다.

서버 생성 및 설정

1. 서버 생성

서버 1대를 아래와 같은 스펙으로 생성해 주십시오.(Server 시작 참고)

  • 부팅 디스크 50GB
  • CentOS 7.3(64-bit)
주의

서버를 생성할 때 네트워크 접근 설정 단계에서 ACG를 Cloud Hadoop의 ACG와 동일하게 생성해 주십시오.
hadoop-chadoop-use-ex7_1-1_ko

2. 포트 포워딩 설정

서버의 포트 포워딩 설정 메뉴에서 터미널로 서버에 접속하기 위한 IP와 포트를 설정해 주십시오.

  • 여기서 생성한 IP 주소는 ssh 접속을 위해서만 사용합니다.

3. 공인 IP 설정

서버의 서버 관리 및 설정 변경 > 공인 IP 설정 변경 메뉴에서 공인 IP를 할당해 주십시오.

  • 공인 IP(Public IP)를 할당하지 않으면 로컬 브라우저에서 Zeppelin, Jupyter 서버에 접속할 수 없습니다.

hadoop-chadoop-use-ex7_1-3_ko

4. ACG 설정

로컬 브라우저에서 8080(Zeppelin) 포트, 8888(Jupyter) 포트에 접속할 수 있도록 ACG 설정을 변경해 주십시오. (방화벽 설정(ACG) 참고)

  • IP는 [my ip] 로 한정할 수도 있으나, 이 가이드에서는 다른 사용자도 있다고 가정하여 0.0.0.0/0으로 설정했습니다.

서버 접속 후 설정

Zeppelin, Jupyter는 원래 Cloud Hadoop 서비스(Spark, Hadoop)에 대한 클라이언트 역할이므로 미리 설정 해줘야 할 것들이 있습니다.
직전에 생성한 서버에 접속한 후 아래 명령어를 수행해 주십시오.

1. JDK 8 설치

다음 명령어를 실행하여 jdk8을 설치해 주십시오.

$ wget --header="Cookie:oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
$ yum install -y jdk-8u131-linux-x64.rpm

JAVA_HOME 변수를 .bash_profile에 설정해 주십시오.

export JAVA_HOME=/usr/java/default
export PATH=$PATH:JAVA_HOME/bin

2. Hadoop Configuration 다운로드

연결해서 사용하려는 Cloud Hadoop의 Hadoop Client Configuration을 가져와야 합니다.

Hadoop Configuration을 다운로드하는 방법은 다음과 같습니다.

  1. Ambari UI에 접속한 후 HDFS > Service Actions > Download Client Config를 클릭해서 Hadoop Client Configuration을 다운로드해 주십시오.

    • 이 가이드에서는 로컬 PC의 ~/Downloads/HDFS_CLIENT-configs.tar.gz 경로에 다운로드했습니다. 마찬가지로 YARN에서도 Download Client Config 작업을 수행해 주십시오.
      hadoop-chadoop-use-ex7_04_ko
  2. scp로 로컬에 다운받은 configuration을 서버 인스턴스에 전송해 주십시오.

    • port와 public ip는 포트포워딩 설정 메뉴에서 설정한 값을 입력해 주십시오.
    • /root 아래에 HDFS_CLIENT-configs.tar.gz 파일을 확인할 수 있습니다.
    scp -i <YOUR-PEM-KEY-PATH>.pem -P <PORT> ~/Downloads/HDFS_CLIENT-configs.tar.gz root@<SSH-IP>:/root
    
    scp -i <YOUR-PEM-KEY-PATH>.pem -P <PORT> ~/Downloads/YARN_CLIENT-configs.tar.gz root@<SSH-IP>:/root
    
  3. /root/hadoop-conf에 압축을 해제해 주십시오.

    cd ~
    mkdir ~/prereqs ~/prereqs/hadoop-conf
    tar -xvzf HDFS_CLIENT-configs.tar.gz -C ~/prereqs/hadoop-conf
    tar -xvzf YARN_CLIENT-configs.tar.gz -C ~/prereqs/hadoop-conf
    
참고

/root/prereqs/hadoop-conf/yarn-site.xml에서 다음 property를 바꿔줘야 RequestHedgingRMFailoverProxyProvider가 발생하지 않습니다.

<property>
<name>yarn.client.failover-proxy-provider</name><value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
</property>

3. spark 클라이언트 설치

Zeppelin Notebook에서 Cloud Hadoop에 설치된 Spark를 사용하기 위해서는 Spark 클라이언트가 필요합니다.

다음 명령어를 사용하여 경로를 SPARK_HOME=/root/prereqs/spark으로 설정해 주십시오.

$ cd ~/prereqs
$ wget -P ~/prereqs https://archive.apache.org/dist/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz
$ cd ~/prereqs && tar -xzvf spark-1.6.0-bin-hadoop2.6.tgz
$ mv ~/prereqs/spark-1.6.0-bin-hadoop2.6 ~/prereqs/spark

4. spark-client Configuration

다음 명령어를 사용하여 $SPARK_HOME/conf 아래에 있는 다음 파일들을 수정해 주십시오.

$ cd $SPARK_HOME/conf
$ mv spark-defaults.conf.template spark-defaults.conf
$ mv spark-env.sh.template spark-env.sh
  • spark-defaults.conf
    현재 Cloud Hadoop의 HDP 스택 버전은 3.1.0.0-78입니다.
    Ambari UI 페이지의 Cluster Admin > Stack and Versions > VERSIONS 에서 확인할 수 있습니다.
spark.driver.extraJavaOptions -Dhdp.version=2.6.5.0–292 spark.yarn.am.extraJavaOptions -Dhdp.version=2.6.5.0–292
  • spark-env.sh
export JAVA_HOME=/usr/java/default
export HADOOP_CONF_DIR=/root/prereqs/hadoop-conf

Zeppelin 설치 및 실행

1. Zeppelin 설치

  1. 다음 명령어를 사용하여 Zeppelin 설치 파일을 다운받아 압축을 푼 후 /root/zeppelin으로 이동시켜 주십시오.
  • ZEPPELINE_HOME/root/zeppelin으로 설정

    $ cd ~
    $ wget http://mirror.navercorp.com/apache/zeppelin/zeppelin-0.8.2/zeppelin-0.8.2-bin-all.tgz 
    $ tar -xzvf zeppelin-0.8.2-bin-all.tgz
    $ mv zeppelin-0.8.2-bin-all zeppelin
    
  1. $ZEPPELIN_HOME/conf에서 다음의 Configuration 파일을 확인하십시오.
참고

configuration property에 대한 내용은 Default configuration를 참고해 주십시오.

  • zeppelin-env.sh

yarn-client 모드의 경우 driver와 executors 사이의 네트워크 지연이애플리케이션 실행 성능에 큰 영향을 끼치므로 운영 환경에서는 클러스터 모드를 권장합니다.
클러스터 모드를 사용하려면 MASTER=yarn-cluster로 변경해 주십시오.

export MASTER=yarn-client
export HADOOP_CONF_DIR=/root/prereqs/hadoop-conf
export SPARK_HOME=/root/prereqs/spark
  • zeppelin-site.xml

Zeppelin에서 anonymous로 접속하는 것을 방지합니다.

<property>
<name>zeppelin.anonymous.allowed</name>
<value>false</value>
<description>Anonymous user allowed by default</description>
</property>
  • shiro.ini

Zeppelin 접속 계정을 관리할 수 있는 파일입니다. admin 계정이 처음에는 disable로 되어 있기 때문에 활성화를 시켜야 합니다.
password1, admin 부분을 원하는 패스워드, 계정 이름으로 변경해 주십시오.

[users]
# List of users with their password allowed to access Zeppelin.
# To use a different strategy (LDAP / Database / ...) check the shiro doc at http://shiro.apache.org/configuration.html#Configuration-INISections
# To enable admin user, uncomment the following line and set an appropriate password.
admin = password1, admin
user1 = password2, role1, role2

2. Zeppelin 실행

Zeppelin 설치 및 환경 설정이 완료되면 Zeppelin을 시작할 수 있습니다. 아래 명령어로 Zeppelin을 실행해 주십시오.
http://<SERVER-PUBLIC-IP>:8080에서 Zeppelin Notebook을 사용할 수 있습니다.

$ZEPPELIN_HOME/bin/zeppelin-daemon.sh start

예제로 있는 Spark 노트(%spark interpreter)를 실행시킬 수 있습니다.

hadoop-chadoop-use-ex7_2-2_ko

Cloud Hadoop의 Resource Manager UI에서는 아래와 같이 YARN 위에서 Spark가 실행되는 것을 확인할 수 있습니다.

hadoop-chadoop-use-ex7_2-3_ko

Jupyter 설치 및 실행

1. Jupyter 설치

다음과 같이 python-pip 명령어를 사용하여 Jupyter를 설치해 주십시오.

pip install jupyter
참고

Jupyter에 대한 자세한 내용은 Jupyter 홈페이지를 참고해 주십시오.

2. Jupyter 실행

다음 명령어를 사용하여 Jupyter를 실행해 주십시오.

  • root로 jupyter를 실행하는 경우 --allow-root 옵션을 붙여줘야 합니다.(권장하지 않음)
  • port의 기본값은 8888으로 --port 옵션으로 다른 값으로 지정할 수 있습니다.
jupyter notebook --ip=0.0.0.0

http://<SERVER-PUBLIC-IP>: 8888/?token=<TOKEN-ID>에서 jupyter notebook을 사용할 수 있습니다.
hadoop-chadoop-use-ex7_3-1_ko

Jupyter에서 PySpark(Spark Python API)를 사용하기 위해 별도의 커널을 추가할 필요가 없으며 기본 Python 커널을 사용하면 됩니다. findspark 모듈에 SPARK_HOMEpath만 정확히 입력해 주십시오.

Zeppelin 실행 시와 마찬가지로 Cloud Hadoop의 Resource Manager UI에서 아래와 같이 YARN 위에서 Spark가 실행되는 것을 확인할 수 있습니다.
hadoop-chadoop-use-ex7_3-2_ko


이 글이 도움이 되었나요?