上一期我们学会了如何制作镜像,本期将介绍如何构建一个空间大数据开发的Docker镜像,将Jupyter Notebook、Spark和SuperMap iObjects Java for Spark集成在一起,并基于该镜像演示在Jupyter Notebook上开发空间大数据分析程序的过程。

构建用于空间大数据开发的Jupyter镜像

  基于Jupyter在线创建空间大数据分析代码,需要调用空间大数据开发平台SuperMap iObjects Java for Spark,并部署所需的环境变量。为了便于开发环境的部署与分发,这里首先构建空间大数据开发的Jupyter镜像。

第一步:编写镜像文件

  文本直接使用基于Dockfile的方式制作镜像。这里选择jupyter/all-spark-notebook官方镜像作为基础镜像,该镜像自带Spark 2.1。另外,由于基础镜像使用的是latest版本,所以建议大家使用时确认该版本是否与同时期的SuperMap iObjects Java for Spark兼容。Dockfile内容如下:

as sdk platform镜像 镜像开发_gis

第二步:部署镜像环境,构建镜像
  保存Dockerfile文件,并在同级目录中拷贝SuperMap iObjects Java提供的Bin目录。为了部署简单,将SuperMap iObjects Java for Spark的两个库文件com.supermap.bsp.core-9.0.0.jar、com.supermap.bsp.examples-9.0.0.jar也放置在Bin目录下。
  文件目录准备完毕之后就可以执行以下命令来构建镜像了。
  docker build -t jupyter/iobjects-for-spark:v1

第三步:启动镜像
  启动镜像需要设置一些基础镜像所要求的参数。它们的具体含义可以直接参考官方文档https://hub.docker.com/r/jupyter/all-spark-notebook/上相关说明,这里不一一解释了。
docker run -d --rm --net=host --pid=host -p 8888:8888 -e TINI_SUBREAPER=true jupyter/ iobjects-for-spark:v1 start-notebook.sh --NotebookApp.token=’'

开发空间大数据分析程序

  经过以上的步骤,镜像已经启动并且可以开始使用Jupyter Notebook了。访问地址[ip]:8888打开Jupyter Notebook的默认界面。

第一步:创建Notebook

  在初始页面上右边New菜单中点击“Apache Toree-Scala”创建一个scala notebook。文件名设置为Summary Mesh。

as sdk platform镜像 镜像开发_gis_02

第二步:编写代码

  这里我们实现一个出租车数据分析的小示例。程序实现的逻辑是将hdfs上的taxi.json数据文件读取之后,进行网格对象的记录数统计,并将最后统计的结果保存在SummaryMesh.json文件中。

as sdk platform镜像 镜像开发_gis_03

第三步:运行程序查看结果

  顺序执行Notebook中的每个Cell中的程序。如果程序正常执行且没有异常信息,就可以在Summary Mesh.ipynb文件的同级目录出现分析的结果数据文件。同时可以证明,部署在Docker镜像中的Jupyter Notebook已经可以正常引用到SuperMap iObjects Java for Spark的接口了。

as sdk platform镜像 镜像开发_spark_04

  那么到此为止,本次介绍的内容已经全部实现。今后大家就可以基于这个镜像方便的进行部署和分发。同时可以使用SuperMap iObjects Java for Spark所提供的丰富的接口,开发出灵活多样的空间大数据分析处理程序。

小结

  在未来的空间大数据分析的应用开发过程中,大家既可以通过SuperMap iDesktop Cross直接调用SuperMap iServer提供的空间处理服务来使用定义好的多种分析功能。也可以根据业务的需要自己开发空间大数据分析挖掘的程序,实现更加个性化的业务逻辑。如果希望将开发的程序与大家分享,那么Jupyter Notebook是一个不错的选择。当然,Docker技术的应用会让整体环境的部署和分发更加方便。