温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢
1.文档编写目的
前面Fayson介绍了Cloudera的产品CDSW(Cloudera Data Science WorkBench)的安装及示例代码的运行,在《如何基于CDSW基础镜像定制Docker》中已经介绍了Docker镜像的定制,在这里我们基于CDSW1.2.2的基础镜像来再次描述下。
在使用的过程中,如果用户的环境与公网是通的则还好,对于多数企业来说搭建CDSW平台都是在业务网无法访问外网,在需要使用第三方Packages时比较麻烦需要将包从外网下载然后上传至Docker容器使用命令进行安装,对于有依赖的包安装时更加麻烦,本篇文章主要介绍如何深度定制CDSW的Docker镜像。在学习本章知识前,你可能需要了解以下知识:
《如何在Windows Server2008搭建DNS服务并配置泛域名解析》
《如何利用Dnsmasq构建小型集群的本地DNS服务器》
《如何在Windows Server2012搭建DNS服务并配置泛域名解析》
《如何在CDH5.13中安装CDSW1.2》
《如何在CDSW中使用R绘制直方图》
《如何使用CDSW在CDH集群通过sparklyr提交R的Spark作业》
1.配置Python和R的私有源地址
2.预装Python和R的依赖包
3.定制Docker镜像及自定义镜像在CDSW中使用
4.测试及总结
1.RedHat7.2
2.CDSW1.2.2
1.Python私有源已搭建
2.R私有源已搭建
2.查看镜像并使用镜像启动一个容器
1.使用管理员登录CDSW查看当前使用的Docker镜像
可以看到当前使用的镜像为docker.repository.cloudera.com/cdsw/engine:4
2.登录CDSW Master服务器上使用如下命令查看镜像
[root@cdsw1 ~]<20180123 15:04:00># docker images
(可左右滑动)
3.通过如下命令使用docker.repository.cloudera.com/cdsw/engine:4镜像启动一个容器
[root@cdsw1 ~]<20180123 15:06:30># docker run -it --network='host' docker.repository.cloudera.com/cdsw/engine:4 /bin/bash
(可左右滑动)
如上图所示我们已成功启动了一个Docker容器。
3.配置Python私有源
在前面章节我们已成功找到了CDSW使用的镜像并使用docker命令启动了该镜像的一个容器,那么我们在这个启动的容器里配置Python的私有源。
1.编辑/etc/pip.conf配置文件,文件内容如下
root@cdsw1:/home/cdsw# vim /etc/pip.conf
[install]
user = true
trusted-host=99.12.105.77
[global]
index-url=http://99.12.105.77:8081/artifactory/api/pypi/pypi/simple
(可左右滑动)
注意:user = true配置表示是否允许非root用户使用pip命令安装依赖包。
2.保存配置文件,测试私有源是否正常
root@cdsw1:/home/cdsw# pip install bit-array
(可左右滑动)
从上面安装bit-array包可以看到是从私有源地址进行下载的,到此我们的Python私有源地址就配置完成。
4.预装Python包
前面一章节我们配置好了Python的私有源地址,接下来就可以安装我们需要的Python包了,在基础镜像中安装需要的依赖包后,在新建的工程中就不需要重复的安装Python包。
1.在docker中的/root目录下创requirements.txt文件,内容如下:
root@cdsw1:~# vim requirements.txt
scikit-learn==0.19.1
tensorflow==1.5.0rc1
(可左右滑动)
requirements.txt文件列出所有需要安装的依赖包及具体的版本号,每个依赖包占一行。
2.在命令行使用pip命令批量安装依赖包
root@cdsw1:~# pip install -r requirements.txt
(可左右滑动)
等待安装完成即可。
5.配置R私有源
需要使用R的环境,在内网环境下也需要考虑配置R的私有源地址,这样可以方便的使用install.packages命令来安装我们需要的依赖包。
1.进入容器的/usr/local/lib/R/etc目录下
2.在该目录下创建Rprofile.site文件,内容如下:
root@cdsw1:/usr/local/lib/R/etc# vim Rprofile.site
# Site R configuration.
local({
r <- getOption("repos")
r["CRAN"] <- "http://99.12.105.77:8081/artifactory/CRAN/"
options(repos = r)
})
(可左右滑动)
将上面的地址修改为我们私有源的地址即可,
注意:这个地址有些特别不是具体到R的Packages路径,在安装依赖包时会在该地址后面拼上/src/contrib/路径。
3.测试R私有源配置是否正常
进入R命令行,执行install.packages(“bfa”)命令安装依赖包
由上图可以看到依赖包的下载地址指向了私有源地址,这里可以看到依赖包真实的下载地址是私有源地址拼接/src/contrib/coda_0.19-1.tar.gz
6.预装R依赖包
私有源地址配置好后,接下来就可以根据需要安装R的Package。
1.在命令运行R的命令,进入R的命令行
2.进入R的命令行后,在命令行执行install.packages(“xxxx”)进行安装xxx即为我们的包名
安装包会自动编译,等编译完成即可。
7.定制Docker镜像
前面很多章节都在讲通过docker.repository.cloudera.com/cdsw/engine:4镜像启动一个容器,然后再容器里面进行Python和R的私有源配置及Package的安装。我们在该容器做了这么多修改,那接下来到了关键部分就是将该容器另存为一个新的镜像,通过这种方式来实现Docker镜像的定制。
通过将正在运行的Container另存为一个新的镜像,所以这里需要特别注意我们上面操作完成后不能退出容器,因为退出后该容器就会被销毁,上面所做的修改都会丢失,所以需要在新的会话窗口进行如下操作。
1..使用如下命令找到我们启动docker.repository.cloudera.com/cdsw/engine:4镜像的容器ID
root@cdsw1 ~]<20180123 15:48:39># docker ps |grep /bin/bash
(可左右滑动)
CONTAINER ID字段即为该容器的ID,获取到容器的ID执行如下命令将该容器保存为新的镜像。
2.使用docker命令保存当前运行的容器为新的镜像
[root@cdsw1 ~]<20180125 16:37:19># docker commit d0c2bcff46b7 docker.repository.cloudera.com/cdsw/engine:6
sha256:d2d10fe605d761eeb0846f6ec472757daa3bc49745f42149582aed91cb6a5cf6
[root@cdsw1 ~]<20180125 16:37:59>#
(可左右滑动)
3.查看镜像是否保存成功
[root@cdsw1 ~]<20180125 16:38:19># docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.repository.cloudera.com/cdsw/engine 6 d2d10fe605d7 52 seconds ago 6.54 GB
(可左右滑动)
可以看到镜像已经保存成功,到此就完成了我们自定义镜像的制作。
8.自定义镜像使用
1.登录CDSW,进入admin菜单
2.在“Engine Images”栏添加我们自定义的镜像
将我们前面自定义的镜像docker.repository.cloudera.com/cdsw/engine:6添加到如下图配置
3.测试自定义镜像
4.进入“settings”界面,选择我们自定义的镜像
5.打开WorkBench
可以看到使用的Docker镜像为我们自定义的镜像
6.启动Session会话
7.验证python定制的包否以存在
输入!pip show tensorflow 命令查看是否为我们安装的版本
显示结果如下:
使用pip命令安装包,确认python源是否正常
8.启动一个R工程的Session,测试R的源和预装的Packages是否正常
通过终端使用install.packages命令安装packages正常
在CDSW界面使用library(sparklyr)加载安装好的packages
如上图显示加载packages未出现异常,则表示加载成功。
9.总结
注意:这里我们在使用自定义镜像时有一个小的问题,就是在启动会话时有时会出现如下显示:
这时我们直接Stop该会话,再重新启动即可。启动会话的时跟Kubernetes有关,查看相关日志发现启动正常的是启动失败的Events事件顺序不一样,具体什么原因目前Fayson也无法得到确切的解释。
提示:代码块部分可以左右滑动查看噢 为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操