JupyterHub是一个广泛使用的大数据分析的WebUI界面,在JupyterHub for K8s中集成SuperMap iObjects Python,即可在JupyterLab的Notebook环境下中使用各种地理空间数据的处理功能,实现一体化的空间数据分析,如果整合SuperMap iClient Python,还可以进一步实现GIS服务的在线访问和Web浏览器上的可视化。
需要步骤:
- 创建一个JupyterHub可用的Docker Image;
- 将SuperMap iObjects Python安装到该镜像中;
- 设置JupyterHub for K8s的配置参数;
- 重新启动JupyterHub for K8s的服务镜像
- 登录到Notebook Server,即可访问相应的组件库了。
- Notebook使用参考:在JupyterHub for K8s的SuperMap iObjects Python简单教程
具体操作如下。
1、下载组件
下载iObjects Java组件,iObjects Python需要该组件来执行空间计算操作。
wget -c http://download.supermap.com.cn/2019/SuperMap9D/9.1.1/iObjects_911_release_20190129/supermap-iobjectsjava-9.1.1-16827-70590-linux64-all-Bin.tar.gz
- 解压后复制所有文件到JupyterHub安装的根目录下的目录resources/Bin,这是我这里的默认目录。如果想要放到其它目录,需要同时修改下面的脚本文件。
- 同时需要相应的license文件(可以在线申请获得),如resources/supermap_any_2019.lic9d,并在Build过程放入 ./SuperMap/supermap_any_2019.lic9d,然后再复制到Docker image的/opt/SuperMap目录下。
下载libpng支持库,用于Ubuntu 18.04
iObjects Java需要用到libpng12-0_1.2.54-1ubuntu1.1_amd64.deb,但是我这个Docker镜像用的Ubuntu 18.04里没有默认安装,需要先下载下来,在Docker Build过程中安装进去。
- 下载libpng支持库的相关链接如下:
- http://libpng.org/pub/png/libpng.html
- https://packages.ubuntu.com/xenial/amd64/libpng12-0/download
- security.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb
- 将下载的libpng12-0_1.2.54-1ubuntu1.1_amd64.deb复制到目录 resources/Bin。
准备构建脚本
完成iObjects Java组件的复制到./SuperMap、安装,调用Docker Build,完成后清除目录中的内容。参考内容如下:
#docker build --build-arg "HTTP_PROXY=10.1.1.174:9999" --build-arg "HTTPS_PROXY=10.1.1.174:9999" -t openthings/databook .
echo ""
echo "========================================================"
echo "Prepare SuperMap iObjects Java packages ..."
mkdir -p ./SuperMap/iobjectsjava911/Bin
cp -r ../../../resources/Bin ./SuperMap/iobjectsjava911/
cp -r ../../../resources/supermap_any_2019.lic9d ./SuperMap/supermap_any_2019.lic9d
echo ""
echo "========================================================"
echo "Build docker openthings/databook ..."
docker build --build-arg "HTTP_PROXY=10.1.1.174:9999" -f Dockerfilez -t openthings/databook .
echo ""
echo "========================================================"
echo "Remove SuperMap iObjects Java packages ..."
rm -r ./SuperMap
echo ""
echo "Build openthings/databook Finished, view: docker images."
echo "========================================================"
echo ""
2、编辑Dockerfile
- 创建一个Dockerfile,构建自定义的Notebook Server实例镜像。
- 从JupyterHub的官方镜像衍生而来,已经内置Spark/R语言等支持能力。
- 参考下面的内容(https://github.com/databooks/databook/)
# --------------------------------------------------------------------
# 添加 iObjects-python 软件包。
RUN pip install iobjectspy==9.1.1
# --------------------------------------------------------------------
# 获取 iObjects Java组件软件。
# wget: http://download.supermap.com.cn/2019/SuperMap9D/9.1.1/iObjects_911_release_20190129/supermap-iobjectsjava-9.1.1-16827-70590-linux64-all-Bin.tar.gz
# into SuperMap/iobjectsjava911/Bin
# 安装iObjects Java 的License文件,可以网络在线申请。
RUN mkdir -p /opt/SuperMap/License/
COPY ./SuperMap/supermap_any_2019.lic9d /opt/SuperMap/License/
# 复制iObjects Java到Docker中。
RUN mkdir -p /opt/SuperMap/iobjects/911/Bin
COPY ./SuperMap/iobjectsjava911/Bin /opt/SuperMap/iobjects/911/Bin
# 安装libpng支持库。
RUN chmod +x /opt/SuperMap/iobjects/911/Bin/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb && \
dpkg -i /opt/SuperMap/iobjects/911/Bin/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb
-
为什么要先复制到./SuperMap目录下?
-
因为Docker不能ADD/COPY非Dockerfile当前目录下的文件。
-
我也不想将iObjects Java存放在Dockerfile目录下。
-
先复制到./SuperMap目录下,再ADD到Docker内部,然后构建完予以删除。
-
3、build Docker images
将上面的脚本保存为buildz.sh,改变属性为可执行 sudo chmod +x buildz.sh,然后运行之。
修改Tag(因为每次build会覆盖),使用:
Docker tag openthings/databook openthings/databook:20190708
如果需要在多个节点上使用,可以使用Harbor来存储和推送。
节点少的话,在所有的节点上手工Docker save保存、然后传送过去、再Docker Load即可。
4、修改hub-config
因为JupyterHub的运行Notebook Server实例镜像Tag改变,需要进去配置。
可以通过Kubectl工具直接修改配置参数,不需要重新安装JupyterHub服务。
运行:
kubectl edit configmap/hub-config -n jupyter
-
有时候出现乱码,安装vim即可。
-
按i进入编辑状态,按esc+wq即保存退出。
5、使用Notebook Server
- 必须删除jupyterHub的docker实例,才会重新启用上面的新参数。
同时删除jupyterhub和supermap-jupyter(之前的实例),等待系统重新创建实例。
重新登录进JupyterHub的页面,每一个用户名会创建相应的Notebook Server实例。
更多参考:
- JupyterHub on Kubernetes--部署指南
- JupyterHub on Kubernetes--项目简介
- JupyterHub on Kubernetes-Helm安装
- JupyterHub on Kubernetes-- Helm Chart简介
- JupyterHub on Kubernetes-容器存储
- JupyterHub容器镜像自定义方法与步骤
- 为JupyterHub自定义Notebook Images
- Ubuntu上使用Repo2Docker
- JupyterHub on Kubernetes绘图支持软件
- Databook-数据之书
- BinderHub 安装指南