温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


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镜像


如何在CDSW中定制Docker镜像_依赖包


可以看到当前使用的镜像为docker.repository.cloudera.com/cdsw/engine:4


2.登录CDSW Master服务器上使用如下命令查看镜像


[root@cdsw1 ~]<20180123 15:04:00># docker images

(可左右滑动)


如何在CDSW中定制Docker镜像_python_02


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

(可左右滑动)


如何在CDSW中定制Docker镜像_依赖包_03


如上图所示我们已成功启动了一个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

(可左右滑动)


如何在CDSW中定制Docker镜像_docker_04


注意:user = true配置表示是否允许非root用户使用pip命令安装依赖包。


2.保存配置文件,测试私有源是否正常


root@cdsw1:/home/cdsw# pip install bit-array

(可左右滑动)


如何在CDSW中定制Docker镜像_docker_05



从上面安装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

(可左右滑动)


如何在CDSW中定制Docker镜像_python_06


requirements.txt文件列出所有需要安装的依赖包及具体的版本号,每个依赖包占一行。


2.在命令行使用pip命令批量安装依赖包


root@cdsw1:~# pip install -r requirements.txt

(可左右滑动)


如何在CDSW中定制Docker镜像_依赖包_07


等待安装完成即可。


5.配置R私有源




需要使用R的环境,在内网环境下也需要考虑配置R的私有源地址,这样可以方便的使用install.packages命令来安装我们需要的依赖包。


1.进入容器的/usr/local/lib/R/etc目录下


如何在CDSW中定制Docker镜像_docker_08


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)
})

(可左右滑动)


如何在CDSW中定制Docker镜像_docker_09


将上面的地址修改为我们私有源的地址即可,

注意:这个地址有些特别不是具体到RPackages路径,在安装依赖包时会在该地址后面拼上/src/contrib/路径。


3.测试R私有源配置是否正常


进入R命令行,执行install.packages(“bfa”)命令安装依赖包


如何在CDSW中定制Docker镜像_依赖包_10


由上图可以看到依赖包的下载地址指向了私有源地址,这里可以看到依赖包真实的下载地址是私有源地址拼接/src/contrib/coda_0.19-1.tar.gz


6.预装R依赖包




私有源地址配置好后,接下来就可以根据需要安装R的Package。


1.在命令运行R的命令,进入R的命令行


如何在CDSW中定制Docker镜像_python_11


2.进入R的命令行后,在命令行执行install.packages(“xxxx”)进行安装xxx即为我们的包名


如何在CDSW中定制Docker镜像_docker_12


安装包会自动编译,等编译完成即可。


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

(可左右滑动)


如何在CDSW中定制Docker镜像_依赖包_13


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>#

(可左右滑动)



如何在CDSW中定制Docker镜像_docker_14


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

(可左右滑动)


如何在CDSW中定制Docker镜像_docker_15


可以看到镜像已经保存成功,到此就完成了我们自定义镜像的制作。


8.自定义镜像使用




1.登录CDSW,进入admin菜单


如何在CDSW中定制Docker镜像_docker_16


2.在“Engine Images”栏添加我们自定义的镜像

将我们前面自定义的镜像docker.repository.cloudera.com/cdsw/engine:6添加到如下图配置


如何在CDSW中定制Docker镜像_python_17


3.测试自定义镜像


如何在CDSW中定制Docker镜像_docker_18


4.进入“settings”界面,选择我们自定义的镜像


如何在CDSW中定制Docker镜像_依赖包_19


5.打开WorkBench


如何在CDSW中定制Docker镜像_python_20


可以看到使用的Docker镜像为我们自定义的镜像


6.启动Session会话


如何在CDSW中定制Docker镜像_docker_21


7.验证python定制的包否以存在


输入!pip show tensorflow 命令查看是否为我们安装的版本


如何在CDSW中定制Docker镜像_python_22


显示结果如下:


如何在CDSW中定制Docker镜像_python_23


使用pip命令安装包,确认python源是否正常


如何在CDSW中定制Docker镜像_python_24

如何在CDSW中定制Docker镜像_依赖包_25


8.启动一个R工程的Session,测试R的源和预装的Packages是否正常

通过终端使用install.packages命令安装packages正常


如何在CDSW中定制Docker镜像_docker_26


在CDSW界面使用library(sparklyr)加载安装好的packages


如何在CDSW中定制Docker镜像_依赖包_27


如上图显示加载packages未出现异常,则表示加载成功。


9.总结




  • 在定制Docker镜像是启动的容器一定不能退出,否则对容器做出的修改都会丢失,无法保存新的镜像。
  • R的私有源通过Session会话的终端可以正常使用安装,直接使用会话窗口install.packages(“xxxx”),未能正常使用私有源地址。
  • 在做Docker镜像时可以在定制镜像的基础上修改,避免了做重复的工作。
  • 在新建Project的时候就可以选择该定制化Docker,已经预安装好了一些RPython依赖包,在开发具体的算法工程时,就不用再去连接公有/私有源下载。当然因为配置好了私有源,以防止有些包没有预安装,也可以临时安装。


注意:这里我们在使用自定义镜像时有一个小的问题,就是在启动会话时有时会出现如下显示:


如何在CDSW中定制Docker镜像_docker_28


这时我们直接Stop该会话,再重新启动即可。启动会话的时跟Kubernetes有关,查看相关日志发现启动正常的是启动失败的Events事件顺序不一样,具体什么原因目前Fayson也无法得到确切的解释。



提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。



推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

如何在CDSW中定制Docker镜像_python_29

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操