-
Notifications
You must be signed in to change notification settings - Fork 440
利用docker部署分布式EasyML集群
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。使用虚拟化的docker容器搭建的集群的管理和控制部署都更加方便。Weave能够创建一个虚拟网络,用于连接部署在多台主机上的Docker容器,可以实现跨主机docker容器通信。使用docker和weave可以搭建分布式EML集群(目前不支持开发环境连接集群,可将项目打包部署至集群tomcat服务中)。
我们在三台机器上部署分布式EML集群,均为64位CentOs7系统。三台机器如下:
主机A:192.168.0.100 hadoop-master 主机B:192.168.0.101 hadoop-slave1 主机C:192.168.0.102 hadoop-slave2
在三台机器上分别执行以下操作:
- 按照official guide 在每台机器安装docker(要求版本在1.10.0及以上)。
- 可以使用
docker version
命令查看是否成功安装docker。
- 从dockerhub中获取mysql server和ubuntu_eml镜像。
docker pull nkxujun/mysql_eml:version_number(默认为latest) //导入mysql镜像 docker pull nkxujun/ubuntu_eml:version_number(默认为latest) //导入ubuntu镜像
-
进入 google drive disk 或者 Baidu Cloud下载EML依赖文件和配置文件(注意:下载的版本号应与上一步下载的镜像一致)。
-
进入上一步下载的文件目录,使用
sh build.sh
命令构建cluster镜像。
cd /root/EML/Environment sh build.sh
- 可以使用
docker images
查看镜像是否导入构建成功。
docker images
- Weave能够创建一个虚拟网络,用于连接部署在多台主机上的Docker容器,这样容器就像被接入了同一个网络交换机,那些使用网络的应用程序不必去配置端口映射和链接等信息。在三台机器上分别执行以下命令下载安装weave。
curl -L git.io/weave -o /usr/local/bin/weave chmod a+x /usr/local/bin/weave
- 使用
docker images
命令,可以看到,weave下载了三个镜像,分别是weaveexec、weave、和weavedb,也可以使用weave version
命令查看weave是否下载安装成功。
weave version
- 使用
brctl show
命令可以看到两个网桥,分别是docker和weave生成的。
brctl show
- 在三台主机上分别启动weave。
weave launch //在主机A上启动weave weave launch 192.168.0.100 //在主机B上启动weave,并连接A weave launch 192.168.0.100 //在主机C上启动weave,并连接A
- 使用
weave status
命令,可以看到,B、C已经通过weave与A成功建立连接。
weave status
在三台机器上分别配置weave环境。
eval $(weave env)
- 在主机A上创建hadoop-master容器,创建启动并初始化mysql容器。weave的默认网段为10.32.0.0/12,我们在创建容器命令中为容器指定一个weave网段的ip地址。
//创建mysql容器 docker run -e WEAVE_CIDR=10.32.0.2/12 --name mysql --hostname mysql.weave.local -p 3306:3306 -d nkxujun/mysql_eml:version_number(默认为latest) //进入EML所在目录,运行脚本初始化mysql sh init_mysql.sh //创建hadoop-master容器 docker run -itd -e WEAVE_CIDR=10.32.0.3/12 --name=hadoop-master --hostname hadoop-master.weave.local -p 8032:8032 -p 18080:18080 -p 19888:19888 -p 7077:7077 -p 50070:50070 -p 8088:8088 -p 9000:9000 -p 11000:11000 -p 50030:50030 -p 8050:8050 -p 8081:8081 -p 8900:8900 --add-host mysql.weave.local:10.32.0.2 --add-host hadoop-master.weave.local:10.32.0.3 --add-host hadoop-slave1.weave.local:10.32.0.4 --add-host hadoop-slave2.weave.local:10.32.0.5 \cluster /bin/bash
- 在主机B上创建并启动hadoop-slave1容器。
docker run -itd -e WEAVE_CIDR=10.32.0.4/12 --name=hadoop-slave1 --hostname hadoop-slave1.weave.local -p 8042:8042 -p 50010:50010 -p 50020:50020 --add-host mysql.weave.local:10.32.0.2 --add-host hadoop-master.weave.local:10.32.0.3 --add-host hadoop-slave1.weave.local:10.32.0.4 --add-host hadoop-slave2.weave.local:10.32.0.5 \cluster /bin/bash
- 在主机C上创建并启动hadoop-slave2容器。
docker run -itd -e WEAVE_CIDR=10.32.0.5/12 --name=hadoop-slave2 --hostname hadoop-slave2.weave.local -p 8043:8042 -p 50011:50011 -p 50021:50021 --add-host mysql.weave.local:10.32.0.2 --add-host hadoop-master.weave.local:10.32.0.3 --add-host hadoop-slave1.weave.local:10.32.0.4 --add-host hadoop-slave2.weave.local:10.32.0.5 \cluster /bin/bash
可以使用docker ps
命令查看容器是否创建启动成功。下图是主机A中的容器。
docker ps
- 使用
docker exec -it hadoop-master /bin/bash
命令进入容器,使用ifconfig
命令查看容器网络配置。可以看到,除docker网卡外,weave在容器中添加了一个虚拟网卡来搭建网络,跨主机容器容器可通过该网通信。
docker exec -it hadoop-master /bin/bash //进入容器 ifconfig //查看容器网络配置
- 从hadoop-master容器内ping hadoop-slave1,0 packet loss,说明网络是联通的,weave配置正确,可以在此基础上启动各项服务。
ping hadoop-slave1
- 将hadoop各节点和mysql的IP地址添加至浏览器所在的物理机hosts文件中,例如:
192.168.0.100 hadoop-master 192.168.0.100 mysql 192.168.0.101 hadoop-slave1 192.168.0.102 hadoop-slave2
在hadoop三个节点容器间两两配置ssh免密访问,保证每个容器能ssh免密登录至另外两个容器。
- 进入hadoop-master容器,运行start-hadoop.sh脚本,启动hadoop和spark服务。
docker exec -it hadoop-master /bin/bash //进入容器 sh start-hadoop.sh //运行脚本
- 在浏览器访问http://hadoop-master:50070(Hadoop主页),该端口号为hadoop namenode的端口。 进入网页之后选择Datanodes Tab,查看网页的Datanodes是否正常
- 在hadoop-master容器根目录下执行run-wordcount.sh进行hdfs文件上传测试,在hadoop主页上,进入Utility->Browers File System中,若能看到/user/root/input下有文件,则成功。
- 进入hadoop-master容器,运行start-oozie.sh脚本,启动oozie和tomcat服务。
docker exec -it hadoop-master /bin/bash //进入容器 sh start-oozie.sh //运行脚本
-
在浏览器中打开http://hadoop-master:11000/oozie/ 进入Ooize Web Console页面。
-
在Oozie Web Console的workflow jobs中查看是否有名字为shell-wf的任务,且该任务的状态为SUCCESS,若是则表示Oozie启动成功。
- 在浏览器中打开http://hadoop-master:18080(Tomcat主页),若显示成功则表示tomcat启动成功。
-
使用Chrome浏览器(非Chrome浏览器打开页面可能会导致部分功能显示不正常)打开http://hadoop-master:18080/EMLStudio/ 看是否能访问Easy Machine Learning主页。
-
默认登入账号:
[email protected]
;密码:bdaict
。 -
登入EML系统后,点击左侧侧边栏的Job->examples,点击上面的任务进行显示。
-
点击绘图区下方的Clone按钮,再点击Submit按钮提交job,若job运行成功(全部节点显示绿色)则表示系统搭建成功。
-
Installation And Introduction
-
Sample Description
-
Tips For Developers
-
Problem Summary