作者: Neshoir
SuperMap iObjects for Spark是超图空间大数据GIS组件包,是基于Spark大数据技术基础之上,将GIS技术及其能力与大数据技术进行深度融合,作为连接大数据与GIS行业应用的中间桥梁。该GIS组件面向开发者和运维人员,对于开发者而言提供了丰富的GIS功能SDK以及示例程序,对于运维人员而言提供了丰富的main函数,这些函数可以降低大数据GIS组件的使用门槛,main函数的使用命令与其他命令行工具(Linux)一样简单。这些main函数基本上覆盖了所有核心的空间GIS分布式分析功能。本文重点介绍其如何使用,以及关键参数的设置。
一、软件准备
Spark大数据基础环境相关的组件已部署正确,以及超图相关GIS组件已正确部署,确保环境可以直接使用,列了如下组件。
- CentOS 7.5 【三台,master、node1、node2】
- JDK 1.8 【已部署】
- Hadoop 2.7.3 【已部署】
- Spark 2.1.1 【已部署】
- SuperMap iObjects for Java 9.1.1 【已部署】
- SuperMap iObjects for Spark 9.1.1 【已部署】
二、main函数简介
-
Linux平台支持,Linux适合生产环境下,适合大数据量,本文以Linux使用为例说明。
-
Windows平台支持,windows适合试验测试,单机多线程适合小数据量,需要特别注意转义符。
-
所有的main函数都在com.supermap.bdt.main这个package包里,包含了创建索引文件,缓冲区分析,叠加分析,密度分析,OD线构建,轨迹构造,拓扑检查,统计等分布式分析功能点。如下图:
三、main函数参数查看
-
每个main函数命令都对应了不同的参数设置,可以用–help查看。
# 以创建缓冲区分析main函数为例,查看该功能所需的参数 bin/spark-submit --class com.supermap.bdt.main.CreateBuffersMain ../iObjectsForSpark/com.supermap.bdt.core-9.1.1-16827.jar --help
-
针对input参数,输入数据来源支持数据引擎类型及使用作简要说明
1.csv 数据源 1.1 本地目录,单文件 eg:{"type":"csv","info":[{"server":"/csvFilePath/csvName.csv"}]} 1.2 支持HDFS目录,文件目录 eg:{"type":"csv","info":[{"server":"hdfs://master:9000/csvFilePath"}]} 1.3 支持设置专用字段,包括转换为FeatureRDD时使用的FeatureID字段和要素时间字段。只 有ID字段时,后两个字段可设置为空,即["featureID","",""] eg:{"type":"csv","info":[{"server":"hdfs://master:9000/csvFilePath"}], "specFields":["featureID","startTime","endTime"]} 2.json 数据源,支持HDFS目录、文件目录、专用字段 2.1 本地目录,单文件 eg:{"type":"json","info":[{"server":"/jsonFilePath/jsonName.json"}]} 3.udb 数据源,支持数据源目录,专用字段 3.1 单数据集 eg:{"type":"udb","info":[{"server":"/udbFilePath/datasourceName.udb", "datasetNames":["name"]}]} 3.2 多数据集 eg:{"type":"udb","info":[{"server":"/udbFilePath/datasourceName.udb", "datasetNames":["name1","name2"]}]} 3.3 多数据源 eg:{"type":"udb","info":[{"server":"/udbFilePath/datasourceName1.udb", "datasetNames":["name"]},{"server":"/udbFilePath/datasourceName2.udb","da tasetNames":["name"]}]} 3.4 数据源目录,即将目录下所有数据源中名为name的数据集合并为一个要素数据集 eg:{"type":"udb","info":[{"server":"/udbFilePath","datasetNames":["nam e"]}]} 3.5 支持设置多节点读取数据时的分片数目,默认值为36(假定三节点集群,单节点为四核心CP U)推荐设置为集群核数的2-5倍 eg:{"type":"udb","info":[{"server":"/udbFilePath","datasetNames":["nam e"]}],"sliceNum":36} 3.6 支持设置属性过滤查询过滤条件,SDX引擎支持 eg:{"type":"udb","info":[{"server":"/udbFilePath","datasetNames":["nam e"]}],"attributeFilter":"SmID=1"} 3.7 支持读取部分字段 eg:{"type":"udb","info":[{"server":"/udbFilePath","datasetNames":["nam e"]}],"fields":["name1","name2"]} 4.SDX+ 数据库型数据源,支持设置专用字段、多数据集、多数据源、分片数目、属性过滤条件、读取部分字段 eg:{"type":"postgresql","info":[{"server":"serverIP","database":"datab aseName","user":"xxx","password":"123","datasetNames":["name"]}]} 支持的数据库类型:postgresql、pggis、oracleplus、oraclespatial 5.Elasticsearch 数据源,支持设置专用字段,支持ES查询语句,支持ES设置参数 eg:{"type":"elasticsearch","info":{"esIndex":"esIndexName","esType":"t ypeName","esNodes":"localhost","esPort":"9200","esQuery":"/queriesFilePat h/fileName.txt","esSetting":[{"settingName1":"setting1"},{"settingName2": "setting2"}]}}
-
针对output参数,输出数据来源支持数据引擎类型及使用作简要说明
1.json 数据源 1.1 本地目录,单文件 eg:{"type":"json","server":"/jsonFilePath/jsonName.json"} 1.2 支持HDFS目录,文件目录 eg:{"type":"json","server":"hdfs://master:9000/jsonFilePath"} 1.3 支持指定字段,即将要素数据集输出时,其FeatureID字段和时间字段保存在哪里。只有ID 字段时,后两个字段可设置为空,即["featureID","",""] eg:{"type":"json","server":"hdfs://master:9000/jsonFilePath","specFiel ds":["featureID","startTime","endTime"]} 2.udb 数据源,支持指定字段 eg:{"type":"udb","server":"/udbFilePath/datasourceName.udb","datasetNa me":"name","blockingWrite":"true"} 3.SDX+ 数据库型数据源,支持指定字段,支持的数据库类型:postgresql、pggis、oracleplus、oraclespatial eg:{"type":"postgresql","server":"serverIP","database":"databaseName", "user":"xxx","password":"123","datasetName":"name","blockingWrite":"true" } 4.Elasticsearch 数据源,支持设置专用字段 eg:{"type":"elasticsearch","esIndex":"esIndexName","esType":"typeName" ,"esNodes":"localhost","esPort":"9200","esSetting":[{"settingName1":"sett ing1"},{"settingName2":"setting2"}]} 5.csv 数据源 5.1 本地和hdfs 目录,单文件 eg:{"type":"csv","server":"file:///csvFilePath/csvFilename.csv"} eg:{"type":"csv","server":"hdfs://master:9000/csvFilePath"} 5.2 支持指定字段,即将要素数据集输出时,其FeatureID字段和时间字段保存在哪里。只有 ID字段时,后两个字段可设置为空,即["featureID","",""] eg:{"type":"csv","server":"hdfs://master:9000/csvFilePath","specFields":["fe atureID","startTime","endTime"]} 5.3 csv 写出支持是否写出列名,以及指定分隔符。默认不写出列名。默认分隔符为"," eg:{"type":"csv","server":"hdfs://master:9000/csvFilePath","csvHeader":"tru e","csvSep":","}
-
对于其他参数都有说明,其参数值也相对比较简单,在此不做过多说明。需要特别注意的:如果用两个索引文件进行空间分析,那么需要保持两份数据的索引一致,也就是第二个数据在构建为索引文件时需要用第一个数据的索引文件来指定,参数如下:
--indexFile 索引文件所在路径。 当使用索引参数(如行数目、列数目)进行构建时,无需设置该参数,当使用已经构建好的索 引文件进行构建时,则需要设置索引文件路径。 eg:hdfs://master:9000/indexFilePath
四、main函数使用示例(缓冲区分析)
-
Linux平台上分析,命令及结果如下
bin/spark-submit --master local[*] --class com.supermap.bdt.main.CreateBuffersMain /home/supermap/iserver9.1.1a/support/iObjectsForSpark/com.supermap.bdt.core-9.1.1-16827.jar --input '{"type":"udb","info":[{"server":"/home/supermap/iserver9.1.1a/support/testdata/chinaCenter.udb","datasetNames":["chinaP"]}]}' --distance 200 --output '{"type":"udb","server":"/home/supermap/iserver9.1.1a/support/testdata/chinaBuffer.udb","datasetName":"chinaPBuffer"}'
-
Windows平台上分析,命令及结果如下
spark-submit.cmd --master local[*] --class com.supermap.bdt.main.CreateBuffersMain E:\ProgramFiles\supermap9d\912release\supermap-spark-912-20190425\lib\com.supermap.bdt.core-9.1.2.jar --input {\"type\":\"udb\",\"info\":[{\"server\":\"E:/tmp/chinaCenter.udb\",\"datasetNames\":[\"chinaP\"]}]} --distance 200 --output {\"type\":\"udb\",\"server\":\"E:/tmp/chinaBuffer.udb\",\"datasetName\":\"chinaPBuffer\"}
关于更多的main函数用法,可以参考spark组件的readm文档。