这篇文章给大家介绍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是基于浏览器的编程“笔记本”,非常适合进行数据探索类的研究。
我用的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.sh sudo chmod +x docker-setup.sh ./docker-setup.sh
采用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
打开浏览器,输入:http://localhost:9000。
在里面打开一个终端窗口,运行升级程序,安装需要的软件:
sudo apt-get update sudo apt-get upgrade sudo apt-get install python3-dev
git clone https://git.oschina.net/GIScript/GIScript2016.git
进入SIP目录,首先进入3dParty,运行:
python3 configure.py make sudo make install
返回上级目录,运行:
python3 configure.py
进入Build目录,运行:
sudo make install
嗯,<sip.h>没找到?
进去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
,编译通过。
运行python3,输入:
from GIScript import GISCore
显示找不到啊,到/opt/conda/lib/python3.5/dist-packages下去看,文件全都在呢!
估计是权限呐、路径呐啥的没有找到。换个目录试试:
cp GIScript ../site-packages
再次运行,这次成功了,不过又提示libSuBase.so: cannot open shared object file: No such file or directory
。有一些基础动态库没有找到,下面还需要设置一下UGC基础库的路径。
这里需要修改start.sh这个文件,在启动Jupyter是设置,这个文件/usr/local/bin/目录下。 首先拷贝过来,修改,再拷贝回去。在前面添加内容:
# Add GIScript Library Path of UGC. export SUPERMAP_HOME=/home/jovyan/work/supermap/GIScript2016 export LD_LIBRARY_PATH=$SUPERMAP_HOME/Bin64_Linux_gcc4_9:$LD_LIBRARY_PATH
然后重新启动docker。
docker stop GISpark docker start GISpark
参考这里设置动态库的路径。除了上面的路径之外,因为Ubuntu14.04有点老了,还有一些系统库的版本需要更新。
cd /opt/conda/lib #运行环境的系统库目录,根据版本不同。 mv libstdc++.so libstdc++.so.x mv libstdc++.so.6 libstdc++.so.6.x mv libsqlite3.so.0 libsqlite3.so.0.x mv libsqlite3.so libsqlite3.so.x mv libgomp.so.1.0.0 libgomp.so.1.0.0.x mv libgomp.so.1 libgomp.so.1.x mv libgomp.so libgomp.so.x
from GIScript import GISCore print(GISCore)
将显示GISCore的帮助信息,系统配置成功。
from GIScript import GISCore from GIScript import Data from pyspark import SparkConf, SparkContext APP_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)
# coding: utf-8 import sys from 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部署是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。