千家信息网

GIScript2016-Docker上的Jupyter Notebook部署是怎样的

发表于:2024-10-24 作者:千家信息网编辑
千家信息网最后更新 2024年10月24日,这篇文章给大家介绍GIScript2016-Docker上的Jupyter Notebook部署是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。GIScript2016是支
千家信息网最后更新 2024年10月24日GIScript2016-Docker上的Jupyter Notebook部署是怎样的

这篇文章给大家介绍GIScript2016-Docker上的Jupyter Notebook部署是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

GIScript2016是支持Python3的地理空间数据处理和分析工具包。

GIScript2016支持Jupyter和Spark,可以运行在单机以及大规模集群之上。GIScript with Jupyter+Spark on Docker这一技术栈非常强大,通过conda包管理程序还可以安装大量的科学计算包,如NumPy、Scikit、Pandas以及OpenCV、NLTK、Tensorflow、Keras等机器学习软件包,实在是大数据处理、分析和深入研究的神器。

GIScript2016将C++系统库封装为Python的过程全部开源了出来,方便研究者使用C++编写自己的专业算法库,然后添加到这个框架中来,是编写高性能的Python扩展模块的极佳参考。

下面我们在Docker中进行部署GIScript2016的方法,然后使用Jupyter Notebook进行基于浏览器的访问。一旦环境设置完毕,就可以在很多环境下部署Docker容器,使用非常方便。Jupyter Notebook是基于浏览器的编程"笔记本",非常适合进行数据探索类的研究。

1.安装支持环境

1.1 安装Docker容器支持环境

我用的Mac OS X,现在的Docker已经原生支持了,不用像以前要安装VirtualBox,再使用Vagrant了。
到这里http://www.docker.io下载相应的版本,然后运行安装程序,就可以了。

如果使用Ubuntu,建议使用 http://get.docker.io下载的脚本进行安装,官方的安装方法貌似与Ubuntu内置的lxd有冲突,经常出问题。方法如下:

wget http://get.docker.io -O docker-setup.shsudo chmod +x docker-setup.sh./docker-setup.sh

1.2 安装Jupyter Notebook容器

采用Jupyter的官方Docker技术栈。

docker run -it --name GISpark     -p 9000:8888     --user root -e GRANT_SUDO=yes     -v /本地目录/GISpark:/home/jovyan/work/GISpark     jupyter/all-spark-notebook
  • 如果Docker下载太慢,尝试加入这个镜像库:https://pee6w651.mirror.aliyuncs.com

1.3 安装和更新容器内软件

打开浏览器,输入:http://localhost:9000。

在里面打开一个终端窗口,运行升级程序,安装需要的软件:

sudo apt-get updatesudo apt-get upgradesudo apt-get install python3-dev

2. 下载和编译GIScript2016

2.1 下载源代码

git clone https://git.oschina.net/GIScript/GIScript2016.git

2.2 安装SIP

进入SIP目录,首先进入3dParty,运行:

python3 configure.pymake sudo make install

2.3 编译GIScript代码

返回上级目录,运行:

python3 configure.py

进入Build目录,运行:

sudo make install

2.4 编译问题解决

  • 嗯,没找到?

进去SIP/Build目录,打开GNUmake.opt文件,按照下面修改:

# Set python.  If you don't#PY_LIB     = "/usr/lib/python3"#PY_INCLUDE = "/usr/include/python3.5m"PY_LIB     = "/opt/conda/lib/python3.5"PY_INCLUDE = "/opt/conda/include/python3.5m"

再次运行make,又出现fatal error: X11/Xlib.h: No such file or directory,估计是缺少x11的支持库了。
安装x11的开发库:

sudo apt-get install libx11-dev

再次运行make,编译通过。

3. 运行测试

运行python3,输入:

from GIScript import GISCore

显示找不到啊,到/opt/conda/lib/python3.5/dist-packages下去看,文件全都在呢!

3.1 安装Python的GIScript库

估计是权限呐、路径呐啥的没有找到。换个目录试试:

cp GIScript ../site-packages

再次运行,这次成功了,不过又提示libSuBase.so: cannot open shared object file: No such file or directory。有一些基础动态库没有找到,下面还需要设置一下UGC基础库的路径。

3.2 设置UGC动态库的访问路径

这里需要修改start.sh这个文件,在启动Jupyter是设置,这个文件/usr/local/bin/目录下。 首先拷贝过来,修改,再拷贝回去。在前面添加内容:

# Add GIScript Library Path of UGC.export SUPERMAP_HOME=/home/jovyan/work/supermap/GIScript2016export LD_LIBRARY_PATH=$SUPERMAP_HOME/Bin64_Linux_gcc4_9:$LD_LIBRARY_PATH

然后重新启动docker。

docker stop GISparkdocker start GISpark

参考这里设置动态库的路径。除了上面的路径之外,因为Ubuntu14.04有点老了,还有一些系统库的版本需要更新。

cd /opt/conda/lib    #运行环境的系统库目录,根据版本不同。mv libstdc++.so libstdc++.so.xmv libstdc++.so.6 libstdc++.so.6.xmv libsqlite3.so.0 libsqlite3.so.0.xmv libsqlite3.so libsqlite3.so.xmv libgomp.so.1.0.0 libgomp.so.1.0.0.xmv libgomp.so.1 libgomp.so.1.xmv libgomp.so libgomp.so.x

3.3 运行例程

3.3.1 Jupyter Notebook

from GIScript import GISCoreprint(GISCore)

将显示GISCore的帮助信息,系统配置成功。

3.3.2 Spark Shell

from GIScript import GISCorefrom GIScript import Datafrom pyspark import SparkConf, SparkContextAPP_NAME = "GeoTest For Spark" def main(sc):    pnt = GISCore.Point2D(12.0,32.0)    geo = Data.GeoPoint()    b = geo.Make(pnt)    br = sc.broadcast(geo)    c = sc.parallelize(range(0,1000),10).map(lambda x:br.value.GetPoint()).collect()    for i in c:        print(i)    sc.stop()if __name__ == "__main__":    # Configure Spark    conf = SparkConf().setMaster("spark://master:7077")    conf = conf.setAppName(APP_NAME)    sc   = SparkContext(conf=conf)    main(sc)

3.3.3 获取文件信息

# coding: utf-8import sysfrom GIScript import GISCore,Conversion'''! \brief 文件路径定义'''strTiffPath  = "Raster/astronaut(CMYK)_32.tif"if __name__ == '__main__':        try:        fileParser = Conversion.FileParser()        bOpen = fileParser.Open(strTiffPath, "fileTIF")        if bOpen:            rasterInfo  = fileParser.GetRasterInfo()            nWidth      = rasterInfo.GetWidth()            nHeight     = rasterInfo.GetHeight()            pixelFormat = rasterInfo.GetPixelFormat()            rc2Bounds   = rasterInfo.GetBounds()            nBandCount  = rasterInfo.GetBandCount()            nBlockSize  = rasterInfo.GetBlockSize()            strPrj      = rasterInfo.GetProjection()            dXRatio     = rc2Bounds.Width()/nWidth            dYRatio     = rc2Bounds.Height()/nHeight            colorset    = rasterInfo.GetColorset()            dMax        = rasterInfo.GetMax()            dMin        = rasterInfo.GetMin()            dNoValue    = rasterInfo.GetNoValue()            print("=========文件基本信息=========")            print(" 图片宽:" , nWidth)            print(" 图片高:" , nHeight)            print(" 像素格式:",pixelFormat)            print(" 波段数:", nBandCount)            print(" 块大小:",nBlockSize)            print(" 是否是块存储数据:",rasterInfo.GetIsTile())            print(" Bound范围(左上右下):(", rc2Bounds.left, ","\                    ,rc2Bounds.top,  ",", rc2Bounds.right, ",", rc2Bounds.bottom, ")")            print(" X、Y分辨率:", dXRatio, dYRatio)            print(" 颜色表大小:" , len(colorset))            print(" 极大值:" , dMax)            print(" 极小值:" , dMin)            print(" 无值:", dNoValue)                        if strPrj != "":                print(" 投影:", strPrj)            else:                print(" 投影:平面坐标系")            print("=============================")            fileParser.Close()    except SystemExit:        raise    except:        sys.stderr.write("""An internal error occured.""")        raise

关于GIScript2016-Docker上的Jupyter Notebook部署是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0