-
인쇄
-
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와 동일하게 생성해 주십시오.
2. 포트 포워딩 설정
서버의 포트 포워딩 설정 메뉴에서 터미널로 서버에 접속하기 위한 IP와 포트를 설정해 주십시오.
- 여기서 생성한 IP 주소는 ssh 접속을 위해서만 사용합니다.
3. 공인 IP 설정
서버의 서버 관리 및 설정 변경 > 공인 IP 설정 변경 메뉴에서 공인 IP를 할당해 주십시오.
- 공인 IP(Public IP)를 할당하지 않으면 로컬 브라우저에서 Zeppelin, Jupyter 서버에 접속할 수 없습니다.
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을 다운로드하는 방법은 다음과 같습니다.
-
Ambari UI에 접속한 후 HDFS > Service Actions > Download Client Config를 클릭해서 Hadoop Client Configuration을 다운로드해 주십시오.
- 이 가이드에서는 로컬 PC의
~/Downloads/HDFS_CLIENT-configs.tar.gz
경로에 다운로드했습니다. 마찬가지로 YARN에서도 Download Client Config 작업을 수행해 주십시오.
- 이 가이드에서는 로컬 PC의
-
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
-
/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 설치
- 다음 명령어를 사용하여 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
$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)를 실행시킬 수 있습니다.
Cloud Hadoop의 Resource Manager UI에서는 아래와 같이 YARN 위에서 Spark가 실행되는 것을 확인할 수 있습니다.
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을 사용할 수 있습니다.
Jupyter에서 PySpark(Spark Python API)를 사용하기 위해 별도의 커널을 추가할 필요가 없으며 기본 Python 커널을 사용하면 됩니다. findspark 모듈에 SPARK_HOMEpath
만 정확히 입력해 주십시오.
Zeppelin 실행 시와 마찬가지로 Cloud Hadoop의 Resource Manager UI에서 아래와 같이 YARN 위에서 Spark가 실행되는 것을 확인할 수 있습니다.