前言,其實zoo官網本身是提供docker鏡像的,隻是不能提任務在yarn上排程,跑在單機docker環境下,上不了生産。
如果想省事完全可以參閱官方提供的鏡像使用手冊,不必自己建構。
位址:https://analytics-zoo.github.io/master/#DockerUserGuide/
1.建構Zoo鏡像
建構鏡像需要如下環境
Anaconda (包含Python、Analytics-Zoo、Notebook等運作環境)
JDK
Hadoop
Spark
1.1Anaconda安裝環境與安裝包制作
由于在建構鏡像階段安裝軟體速度較慢,是以使用已經安裝好環境的anaconda。
如果沒有安裝,直接在實體機上執行Anaconda3-5.2.0-Linux-x86_64.sh也可以,然後安裝-AnalyticsZoo、Notebook等運作環境即可。
1.2 start-notebook.sh腳本
#!/bin/bash jupyter notebook --allow-root --no-browser --ip='*' --port=$NotebookPort --notebook-dir='/opt/workspace' --NotebookApp.token=$NotebookToken |
$NotebookPort和$NotebookToken可以在啟動的環境變量裡配置
--notebook-dir='/opt/workspace' 表示notebook預設工作空間
1.3建構zoo鏡像
如下是建構zoo鏡像的Dockerfile
FROM centos:centos7.4.1708 WORKDIR / #安裝spark 暫時沒用到,可删 ADD spark.master.tar.gz /usr/local #安裝hadoop ADD hadoop.master.tar.gz /usr/local #安裝 Anaconda(已包含所需環境) ADD anaconda3.tar.gz /root/ #安裝 JDK ADD jdk-8u121-linux-x64.tar.gz /usr/local #拷貝notebook啟動腳本 COPY start-notebook.sh /opt #建立notebook工作目錄 RUN mkdir -p /opt/workspace/ #配置Java Hadoop Anaconda環境變量 ENV JAVA_HOME=/usr/local/jdk1.8.0_121 HADOOP_COF_DIR=/usr/local/hadoop/etc/hadoop PATH=/root/anaconda3/bin:$JAVA_HOME/bin:$PATH JRE_HOME=${JAVA_HOME}/jre CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar ENTRYPOINT [""] |
其中spark和hadoop都是官網提供的包,改了名字。
執行鏡像建構指令
docker build -t zoo:0.1.0 . |
2.啟動鏡像配置環境
執行如下啟動腳本
docker run -itd --net=host -e NotebookPort=12345 -e NotebookToken=qwer1234 zoo:0.1.0 bash |
其中NotebookPort是啟動notebook端口号,不能與本機已使用端口沖突,NotebookToken為notebook登陸密碼,都不加引号。
修改hadoop叢集配置,使容器能夠感覺叢集
修改/etc/host和/usr/local/hadoop/etc/hadoop/slave檔案
hosts檔案
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 :1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.180.210.176 master 10.180.210.28 node3 10.180.210.8 node2 |
Slave檔案
master node3 node2 |
執行notebook啟動腳本
cd /opt ./start-notebook.sh |
3.運作測試
在浏覽器中通路notebook,位址容器所在機器IP: NotebookPort 密碼為NotebookToken
建立python3工程,并執行如下代碼
from zoo import init_spark_on_yarn sc = init_spark_on_yarn(hadoop_conf="/usr/local/hadoop/etc/hadoop",conda_name="zoo", num_executor=2,executor_cores=1,executor_memory="2g",driver_memory="1g",driver_cores=4,extra_executor_memory_for_ray="2g") |
執行結果如下:
在notebook中檢視執行結果:
在yarn中檢視運作中的任務: