前言,其实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中查看运行中的任务: