-
Notifications
You must be signed in to change notification settings - Fork 440
Docker Toolbox 搭建EasyML 集群
安装参考链接:http://blog.csdn.net/tina_ttl/article/details/51372604
- 从官网上下载 DockerToolBox.exe,根据链接中的安装说明进行toolbox.exe安装
- 需要选择一台CPU支持VT-X/AMD-v功能的电脑,并启用该功能。如何验证及启用:进入BIOS,查看是否有
Virtualization Technology
,设置其为Enable
启用该功能。 - 打开Oracle VM VirtualBox,在default的虚拟机上,调整内存大小为4g以上 ,保存该虚拟机(Docker默认安装在名字为default的虚拟机上)
- 建议系统内存大小至少8G及以上,硬盘容量至少10G及以上,否则会出现容器无法启动或电脑卡死的问题
注:关于版本(执行步骤一致,仅容器个数不一致)
a、简化版Docker安装(仅保留hadoop-master,目前该版本仅支持1.0.0):下载链接
b、分布式版Docker安装(1个hadoop-master,2个hadoop-slave,可下载最新版本):下载链接
- 点击Docker Quickstart Terminal.exe,从CMD Line中进入安装主文件夹(指网盘上下载的EML安装包解压之后的目录,/EML/Environment/)目录
a、在线安装
- 从docker hub 上拉取镜像
docker pull nkxujun/mysql_eml:version_number(默认为latest) docker images //查看是否下载成功
b、离线安装(百度网盘已提供该文件)
- 导入镜像文件:mysql_eml.tar
docker load --input mysql_eml.tar docker images //查看是否导入成功
- 点击Docker Quickstart Terminal.exe,进入安装主文件夹目录
a、在线安装
- 从docker hub 上拉取镜像
docker pull nkxujun/ubuntu_eml:version_number(默认为latest) docker images //查看是否下载成功
b、离线安装(百度网盘已提供该文件)
- 导入镜像文件:ubuntu_eml.tar
docker load --input ubuntu_eml.tar docker images //查看是否导入成功
该脚本用于下载及安装一些软件、配置目录,生成镜像。所有的安装软件安装在容器中的/usr/local/目录下。
- 在安装文件夹主目录,执行
sh build.sh
,建立集群镜像(执行过程中共有50多个步骤,需确保每个步骤都成功才算成功) - 执行完后可通过
docker images
查看到名字为cluster的image
可能出现的问题:
- 执行build.sh脚本时出现no space left on device.(默认virtualbox虚拟机disk不够大,需要对其进行调整)
修改virtualbox中default虚拟机的内存大小
Window docker在自动分配容器地址时会出现地址重叠问题,因此为了保险起见,配置静态ip,防止容器地址跳动。该网桥只能创建一次。
- 执行
build_network.sh
脚本,创建名称为 shadownet的网桥,静态IP域为172.18.0.0/16 docker 默认的网桥为docker0,域为172.17.0.1开始的ip,根据容器创建的先后顺序自动分配ip
sh build_network.sh //在安装文件目录执行该脚本
该脚本用于启动容器并进行端口映射。
-
在安装主目录中执行run_container.sh脚本,通过
docker ps
查看mysql
、hadoop-master
、hadoop-slave1
、hadoop-slave2
容器是否启动 -
进入
hadoop-master
容器docker exec -it hadoop-master /bin/bash
检查master、slave1、slave2容器是否启动了ssh server(具体方法参照下方可能出现的问题的步骤执行)。以hadoop-master容器为例:检查如下命令,是否成功跳转
ssh localhost exit //每次跳转都需要退出 ssh hadoop-slave1 exit ssh hadoop-slave2 exit
可能出现的问题:
- 若出现ssh connection refused.(ssh 连接失败,ssh server未启动)
//通过Docker Quickstart Terminal分别进入hadoop-master,hadoop-slave1,hadoop-slave2容器 docker exec -it container_name /bin/bash //进入某个容器命令 //执行如下命令启动ssh server /etc/init.d/ssh start //启动ssh
该脚本用于初始化数据库
-
在安装目录下执行
sh init_mysql.sh
. -
进入mysql容器,登入mysql,查看oozie数据库及studio数据库是否存在
docker exec -it mysql /bin/bash; //进入mysql容器 mysql -uroot -p111111 //登入mysql show databases; //查看mysql中的表
可能出现的问题:
- 若需要更新mysql数据库,可通过将mysql脚本包拷贝到mysql容器中
docker cp mysql mysql:/root/ //其中mysql:中的mysql为mysql容器名
执行mysql容器/root/mysql目录中的main.sql文件导入数据
mysql -uroot -p111111 //登入mysql source /root/mysql/main.sql //在mysql数据库中执行main.sql脚本
当然也可以通过navicate连接mysql数据库执行更新之后的脚本
该脚本用于启动hadoop集群和Spark集群
- 进入hadoop-master容器根目录, 执行start-hadoop.sh脚本
docker exec -it hadoop-master /bin/bash //进入hadoop-master容器根目录 sh start-hadoop.sh //执行start-hadoop脚本
-
在Windows系统下访问192.168.99.100:50070(Hadoop主页),该IP地址为windows docker安装的默认ip,端口号为hadoop namenode的端口。 进入网页之后选择Datanodes Tab,查看网页的Datanodes是否正常
-
在hadoop-master容器根目录下执行run-wordcount.sh进行hdfs文件上传测试,在hadoop主页上,进入Utility->Browers File System中能看到/user/root/input下有文件,则成功
可能出现的问题:
- 运行脚本start-hadoop.sh. 若hadoop集群中途出错,则需要先关闭所有的hadoop任务,即通过以下命令
$HADOOP_HOME/sbin/stop-dfs.sh $HADOOP_HOME/sbin/stop-yarn.sh
该脚本用于启动oozie和tomcat
-
进入hadoop-master容器根目录,执行start-oozie.sh脚本
-
执行上述脚本成功后,通过查看oozie status命令,看oozie是否成功
oozie admin -oozie http://hadoop-master:11000/oozie -status System mode:NORMAL //显示正常结果,oozie状态正常
-
在Windows系统浏览器中打开http://192.168.99.100:11000/oozie/ 进入Ooize Web Console
-
在Oozie Web Console的workflow jobs中查看是否有名字为shell-wf的任务,且该任务的状态为SUCCESS,若是则表示Oozie启动成功
-
在Windows系统浏览器中打开http://192.168.99.100:18080(Tomcat主页),若显示成功则表示tomcat启动成功
可能出现的问题:
- start-oozie.sh脚本执行过程中可能会出现WARN hdfs.DFSClient:Caught exception,java.lang.InterruptedException
若按照上述步骤验证oozie是否启动及job是否成功执行,若二者均没问题,则该错误可忽略 //可能是由于docker容器内存不足导致访问hdfs速度变慢原因造成
- oozie admin -oozie http://hadoop-master:11000/oozie -status 出现
Error: IO_ERROR : java.net.ConnectException: Connection refused
//重新启动Oozie $OOZIE_HOME/logs //清空该目录 $OOZIE_HOME/oozie-server/logs //清空该目录 $OOZIE_HOME/oozie-server/temp //清空该目录 $OOZIE_HOME/oozie-server/webapps //删除oozie和oozie.war sh start-oozie.sh //重新执行启动脚本
- 修改windows host. 具体目录为
C:\Windows\System32\drivers\etc
,添加如下内容
//其中IP地址为windows 给docker 虚拟机的默认IP 192.168.99.100 mysql 192.168.99.100 hadoop-master
- 在Windows系统中用Chrome浏览器(非Chrome浏览器打开页面可能会导致部分功能显示不正常)打开http://hadoop-master:18080/EMLStudio/ 看是否能访问Easy Machine Learning主页
- 默认登入账号:
[email protected]
;密码:bdaict
- 登入EML系统后,点击左侧侧边栏的
Job->examples
,点击上面的任务进行显示 - 点击绘图区下方的
Clone
按钮,再点击Submit
按钮提交job,若job运行成功(全部节点显示绿色)则表示系统搭建成功
可能出现的问题:
- 登入失败
通过docker ps
检查mysql容器是否被关闭,若机器内存不足,可能会存在部分容器被关闭的情况。
- 登入失败,后台Tomcat出现
java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
关于上述登录失败问题,是由于工程所依赖的xml-api.jar包的版本问题造成的。在maven依赖中,oozie client和dom4j都包含了xml-api的不同版本的包。上述错误是因为由于包冲突,默认采用了xml-apis1.0.b2 这个包,这个包版本太低会出现上述错误。
目前我们已经在pom中exclude dom4j的低版本的包,并进行重新打包,更新至网盘。您可以在 google drive disk or Baidu Cloud 的/cluster/config 目录下下载最新的EMLStudio.war包,并将该包通过以下命令拷贝到hadoop-master容器的tomcat目录下重新部署即可。
docker cp your_dir/EMLStudio.war hadoop-master:/usr/local/tomcat/webapps/ //Copy file from your own entity machine to docker continer
同时我们已更新pom.xml文件在github工程中,您可以pull一下我们的代码。
- 关闭及删除容器
sh stop_containers.sh//关闭mysql、master、slave1、slave2容器
- 启动已经停止的容器
docker start container_name //启动某个容器
- 删除cluster镜像
sh rm_images.sh //删除cluster镜像
- 部署工程到tomcat
docker cp 工程路径 hadoop-master:/usr/local/tomcat/webapps/
- 将容器创建一个新镜像
docker commit 容器名称 镜像名称
- 保存镜像
docker save 镜像名称 > 新镜像名称.tar
- 删除某镜像
docker rmi 镜像名称
- 打开Orcle VM VirtualBox,右键Default虚拟机,退出,保存状态,使得Default虚拟机休眠
- 重启电脑之后,只需打开Oracle VM VirtualBox,右键Default虚拟机启动,即可直接打开EML系统
-
docker ps
查看所有容器是否启动,若没启动,则启动hadoop、mysql容器
docker start hadoop-master docker start hadoop-slave1 docker start hadoop-slave2 docker start mysql
- 在安装文件根目录执行restart_service.sh,若ssh服务未启动成功,进入对应容器执行如下命令
/etc/init.d/ssh start
- 进入hadoop-master容器根目录执行restart.sh
- 重启Hadoop,进入hadoop-master容器
$HADOOP_HOME/sbin/start-dfs.sh $HADOOP_HOME/sbin/start-yarn.sh
- 重启Spark,进入hadoop-master容器下的spark安装目录启动spark
/usr/local/spark-2.0.1-bin-hadoop2.7/sbin/start-all.sh
- 重启Oozie,进入oozie安装目录启动oozie
cd /usr/local/oozie/oozie-server/temp rm -rf oozie.pid //删除已有的oozie.pid进程 $HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver(和oozie日志相关) $OOZIE_HOME/bin/oozie-start.sh
- 重启Tomcat,进入tomcat安装目录启动tomcat
cd /usr/local/tomcat/bin sh startup.sh
-
Installation And Introduction
-
Sample Description
-
Tips For Developers
-
Problem Summary