温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
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服务器上使用如下命令查看镜像
(可左右滑动)
3.通过如下命令使用docker.repository.cloudera.com/cdsw/engine:4镜像启动一个容器
(可左右滑动)
如上图所示我们已成功启动了一个Docker容器。
3.配置Python私有源
在前面章节我们已成功找到了CDSW使用的镜像并使用docker命令启动了该镜像的一个容器,那么我们在这个启动的容器里配置Python的私有源。
1.编辑/etc/pip.conf配置文件,文件内容如下
(可左右滑动)
注意:user = true配置表示是否允许非root用户使用pip命令安装依赖包。
2.保存配置文件,测试私有源是否正常
(可左右滑动)
从上面安装bit-array包可以看到是从私有源地址进行下载的,到此我们的Python私有源地址就配置完成。
4.预装Python包
前面一章节我们配置好了Python的私有源地址,接下来就可以安装我们需要的Python包了,在基础镜像中安装需要的依赖包后,在新建的工程中就不需要重复的安装Python包。
1.在docker中的/root目录下创requirements.txt文件,内容如下:
(可左右滑动)
requirements.txt文件列出所有需要安装的依赖包及具体的版本号,每个依赖包占一行。
2.在命令行使用pip命令批量安装依赖包
(可左右滑动)
等待安装完成即可。
5.配置R私有源
需要使用R的环境,在内网环境下也需要考虑配置R的私有源地址,这样可以方便的使用install.packages命令来安装我们需要的依赖包。
1.进入容器的/usr/local/lib/R/etc目录下
2.在该目录下创建Rprofile.site文件,内容如下:
(可左右滑动)
将上面的地址修改为我们私有源的地址即可,
注意:这个地址有些特别不是具体到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
(可左右滑动)
CONTAINER ID字段即为该容器的ID,获取到容器的ID执行如下命令将该容器保存为新的镜像。
2.使用docker命令保存当前运行的容器为新的镜像
(可左右滑动)
3.查看镜像是否保存成功
(可左右滑动)
可以看到镜像已经保存成功,到此就完成了我们自定义镜像的制作。
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.总结
在定制Docker镜像是启动的容器一定不能退出,否则对容器做出的修改都会丢失,无法保存新的镜像。
R的私有源通过Session会话的终端可以正常使用安装,直接使用会话窗口install.packages(“xxxx”),未能正常使用私有源地址。
在做Docker镜像时可以在定制镜像的基础上修改,避免了做重复的工作。
在新建Project的时候就可以选择该定制化Docker,已经预安装好了一些R和Python依赖包,在开发具体的算法工程时,就不用再去连接公有/私有源下载。当然因为配置好了私有源,以防止有些包没有预安装,也可以临时安装。
注意:这里我们在使用自定义镜像时有一个小的问题,就是在启动会话时有时会出现如下显示:
这时我们直接Stop该会话,再重新启动即可。启动会话的时跟Kubernetes有关,查看相关日志发现启动正常的是启动失败的Events事件顺序不一样,具体什么原因目前Fayson也无法得到确切的解释。
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
领取专属 10元无门槛券
私享最新 技术干货