GIS Tools for Hadoop(2020最新版)

前言

    看了ESRI:《GIS Tools for Hadoop 使用介绍(ArcGIS 与 Hadoop 集成)》,想动手试试看,了解Hadoop是怎么与GIS结合的。

    随着ArcGIS 10.2版本的发布,一同推出的开源工具包GIS Tools for Hadoop,完美的诠释了海量空间数据与分布式运算的结合。GIS Tools for Hadoop 是一个开源的工具包,它定义和构建了一整套空间分析的环境,在GIS与hadoop之间搭建起了一个桥梁 [查看更多]。Esri能和Hadoop 进行结合这得益于 Esri提供的Geometry API,其原理是从hadoop的hdfs 文件系统中获取数据,然后使用这些 Geometry API 将数据转化为 Esri 的几何对象,或者要素等,当有了这些空间数据之后,那么就可以进行空间分析等。

 

软件与数据

  • 软件

           1. Hadoop [链接](不用管Spark的安装部分

           2. Hive [链接]

  • 数据

        Windows :到 GitHub:gis-tools-for-hadoop 把整个文件下载下来

        使用 XShell 连接虚拟机master,进入/data,输入rz上传文件

        解压,提取到桌面(/home/你的用户名/Desktop)

        当然也可以直接在虚拟机上用 wget 或 git [ 链接 ]

wget https://github.com/Esri/gis-tools-for-hadoop

        将数据导入到hdfs(注:/usr/hadoop/hdfs/input是之前我在hdfs下创建的一个文件夹)

[root@master ~]# hadoop fs -put /home/你的用户名/Desktop/gis-tools-for-hadoop-master/samples /usr/hadoop/hdfs/input


#删除HDFS文件夹
#[root@master ~]# hadoop fs -rm -r /usr/hadoop/hdfs/input

        列出HDFS文件

[root@master ~]# hadoop fs -ls /usr/hadoop/hdfs/input/samples

        也可以在 http://192.168.1.180:50070/explorer.html 看到 

        其他:HDFS上传文件后datanode元数据目录和和datanode数据目录的变化

        Master

            在namenode设置的存储元数据的目录中(dfs.name.dir ),可以看到 fsimage 镜像文件,以及编辑日志文件edits_*

        Slave

            可以在任意datanode节点机器看到很多碎文件

    上传数据到HDFS还有一个更简单的方法:使用ESRI 的 Hadoop Tools [链接]

 

正文 

    1. 添加jar包

hive > add jar 
     > /home/你的用户名/Desktop/gis-tools-for-hadoop-master/samples/lib/spatial-sdk-hive-2.0.0.jar;

hive > add jar 
     > /home/你的用户名/Desktop/gis-tools-for-hadoop-master/samples/lib/esri-geometry-api-2.0.0.jar;

hive > add jar 
     > /home/你的用户名/Desktop/gis-tools-for-hadoop-master/samples/lib/spatial-sdk-json-2.0.0.jar;

 

     2.  创建临时函数 

hive > create temporary function ST_Point as 'com.esri.hadoop.hive.ST_Point';
hive > create temporary function ST_Contains as 'com.esri.hadoop.hive.ST_Contains';

 

    3. 创建外部表 

hive > CREATE EXTERNAL TABLE IF NOT EXISTS earthquakes (earthquake_date STRING, latitude DOUBLE, longitude DOUBLE, depth DOUBLE, magnitude DOUBLE, magtype string, mbstations string, gap string, distance string, rms string, source string, eventid string)
     > ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
     > LOCATION '/usr/hadoop/hdfs/input/samples/data/earthquake-data';

hive > CREATE EXTERNAL TABLE IF NOT EXISTS counties (Area string, Perimeter string, State string, County string, Name string, BoundaryShape binary)                                         
     > ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.EsriJsonSerDe'              
     > STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedEsriJsonInputFormat'
     > OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
     > LOCATION '/usr/hadoop/hdfs/input/samples/data/counties-data';

    参照网上的教程,在创建counties表时会产生如下错误

    这是因为版本更新后,有些类名进行了修改(通过官方给的案例中也可以看到 [链接])

'com.esri.json.hadoop.EnclosedJsonInputFormat' 改为了 'com.esri.json.hadoop.EnclosedEsriJsonInputFormat'
'com.esri.hadoop.hive.serde.JsonSerde' 改为了 'com.esri.hadoop.hive.serde.EsriJsonSerDe'

 

    4. 运行包含统计

hive > SELECT counties1.name, count(*) cnt FROM counties1
     > JOIN earthquakes1
     > WHERE ST_Contains(counties1.boundaryshape, ST_Point(earthquakes1.longitude, earthquakes1.latitude))
     > GROUP BY counties1.name
     > ORDER BY cnt desc;

    会遇到错误

    按照提示进行设置 

    又遇到报错(参照该博主[链接]的输出结果

    找不到类?尝试着把 spatial-sdk-json-2.0.0.jar 放到了 hadoop/share/hadoop/mapreduce/lib下 [链接],结果这个错误真解决了,但又报了另一个错误

    按照网上的解决办法关闭本地 map join 优化 [链接]

hive > set hive.auto.convert.join = false;

    终于成功运行

    其他:以上操作实质上实现的是点与面数据进行空间连接并统计,得到每个county下发生的earthquake数目。

 

题外话

    看 GIS Tools for Hadoop 的 GitHub 更新时间,感觉这个项目好像没有跟进了,可能和Hadoop的MapReduce逐渐被性能更强的Spark取代有关,所以其实可以去学习GeoSpark、GeoMesa等。

 

参考

    [Hadoop学习]Esri/gis-tools-for-hadoop介绍

    hive在hadoop中的一个demo运行过程总结

    Hadoop与海量GIS数据的碰撞

 

问题

    解决hive报错FAILED: SemanticException Cartesian products are disabled for safety的问题

    Hive中运行任务报错:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTas

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
软件简介: MAPGIS6.5实用工具,集成若干MAPGIS6.5不具有的实用功能,简单易用。 普通版有以下特色功能: 1、精确制图功能(类似于AutoCAD)。画线、移动、复制图元时,都可以输入距离和角度,还可以捕捉端点(按SHIFT)、中点(按CTRL)、交点(按SPACE)、垂足(按ALT)等,F2为正交开关,CTRL+D为线段单选开关。 2、滚轮缩放功能。向前滚动图形放大,向后滚动图形缩小,按下滚轮图形平移。 3、格式刷功能。点、线、区都可以运用格式刷进行修改和编辑。 4、查询图元功能。自动查找文本、属性、子图、颜色等。 5、参数拾取功能。拾取点、线、区参数作为当前编辑参数。 6、等距排列功能。文本或图例都可以进行横向、纵向的等距离自动排列。 7、快速制表功能。利用画水平线、竖直线以及捕足功能,输入距离移动、复制、拉伸线条功能,可以快速绘制各种表格。 8、测量距离功能。测量直线段或多段折线的距离或长度,可以使用捕捉功能。 9、测量面积功能。测量面积不需要造区,按顺序点击拐点即可,也可选择一条闭合的线段,即可测量面积。可以直接测量线图元的方位角。 10、测量角度功能。选择直线段可以测量该线段的的方位角及象限角。 11、面积换算功能。直接将测量出来的图上面积转换为实际面积。 12、面积标注功能。点击某块区域,自动标注该区域的面积,可带引线标注。 13、坐标标注功能。在图上单击某个点,即可标出该点的图上坐标或实际坐标值,可带引线标注。 14、比例造线功能。确定比例尺后,输入以米为单位的数据时,可以自动转换为图上距离,不需要人工换算,同时可以输入距离和角度。 15、线段拉伸功能。能够将线段进行拉伸,所有选中的线节点将同时拉伸,同时可以输入距离和角度。 16、线段切除功能。互相相交的线段,选择其中一条,可以切除另外一条线段在该线段两侧的部分,也可以切除夹在两条线段中间的部分。 17、线段交会功能。选择两条不平行的线段,可以使其相交于某一点,已经相交的两条线段,可以切除交点任意一侧的部分。 18、线段炸开功能。将多段线在节点处分开,生成若干条线段。 19、线段旋转功能。输入一个角度值,并确定一个旋转基点,即可精确旋转一条线段。 20、改线长度功能。选项择一条线段,可以直接修改该线段的长度值。 21、属性编辑功能。采用电子表格的方式对图元属性进编辑,与excel、acsses能够直接互相复制、粘贴,并且能够实现图形联动、属性联动等操作。 22、属性提取功能。输入属性提取条件,能够将点、线、区中符合条件的图元提取到新的文件中。 23、属性标注功能。选择某个字段,可以将该字段的属性值标注在图元的相应位置上。 24、属性动态显示。选择某个点线区文件,可以将某个字段或所有字段的属性值,随着鼠标的移动,适时动态地显示出来。 25、ID关联功能。将点线区相应位置上的图元ID修改为同一属性值,排序后能够将点线区对应的属性值进行批量拷贝。 26、删除指定图元。可以根据图元ID能及图元属性有条件地对图元批量删除。 27、删除重叠图元。自动搜索互相重叠的图元,删除多余的重叠图元。 28、匹配图例参数。选择某个图例,可以将该图例的参数及属性值全部赋给相应的图元。 29、自动生成样槽。选择两条节点数相同的平行线段,能够自动生成黑白相间的样槽。 30、批量替换注释。输入若干条需要替换的注释,可以一次性进行替换,并自动保存替换数据,下次或打开另外一张图时仍可使用,不需要重新输入。 31、整图栽剪功能。不需要生成单独的栽剪框文件,只要选择工程文件中任一条封闭的线就会自动对工程中的所有可见文件进行栽剪,栽剪后的文件自动保存在新建的目录中,每次栽剪都会生成一个新的目录,栽剪后的文件名与原文件名一致。 32、CAD转MapGis。本功能可以将AutoCAD格式的图形文件转换成MapGis格式的图形文件,能将CAD中的充填图案直接转换成MapGis中的区图元,而且能将CAD中的内部块、多行文本直接转出,不需要在CAD中分解。完全按照CAD中的图层分层转出所有可见图元,颜色、线型自动转换,不需要对照表,所有操作全自动。并能够将CASS中生成的地物编码转为MapGis图元属性。 33、Excel转MapGis。本功能可以将 Microsoft Office Excel 电子表格文件中的各种表格直接转换成MapGis格式的点、线、面文件。 34、自动画柱状图。本功能可以将保存在 Microsoft Office Excel 电子表格文件中的钻孔数据绘制成钻孔柱
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值