11.4. 空间RDD提供程序

11.4.1. Acumulo RDD提供程序

这个 AccumuloSpatialRDDProvider 是Acumulo数据存储的空间RDD提供程序。核心代码位于 geomesa-accumulo-spark 模块,并且带有阴影的JAR依赖项可在 geomesa-accumulo-spark-runtime-accumulo20geomesa-accumulo-spark-runtime-accumulo21 模块。

备注

GeoMesa Spark运行时JAR是每个数据存储所需的所有依赖项的便捷捆绑包。有两个Acumulo Spark运行时JAR,一个用于Acumulo 2.0.x (geomesa-accumulo-spark-runtime-accumulo20 )和一个用于Acumulo 2.1.x (geomesa-accumulo-spark-runtime-accumulo21 )。确保您使用的是与您的Acumulo版本对应的JAR。

此提供程序可以对GeoMesa进行读取和写入 AccumuloDataStore 。配置参数与传递给的参数相同 DataStoreFinder.getDataStore() 。看见 累积数据存储参数 了解更多细节。

要在GeoMesa中访问的要素类型将作为查询的类型名称传递给 rdd() 方法。例如,要加载一个 RDD 关于类型的特征 gdeltgeomesa 累积表:

import org.apache.hadoop.conf.Configuration
import org.geotools.data.Query
import org.locationtech.geomesa.spark.GeoMesaSpark

val params = Map(
  "accumulo.instance.name" -> "mycloud",
  "accumulo.user"          -> "user",
  "accumulo.password"      -> "password",
  "accumulo.zookeepers"    -> "zoo1,zoo2,zoo3",
  "accumulo.catalog"       -> "geomesa")
val query = new Query("gdelt")
val rdd = GeoMesaSpark(params).rdd(new Configuration(), sc, params, query)

11.4.2. HBase RDD提供程序

这个 HBaseSpatialRDDProvider 是一个用于HBase数据存储的空间RDD提供程序。核心代码位于 geomesa-hbase-spark 模块,并且带有阴影的JAR依赖项(它包含执行所需的所有依赖项)可在 geomesa-hbase-spark-runtime-hbase1geomesa-hbase-spark-runtime-hbase2 模块。

备注

GeoMesa Spark运行时JAR是每个数据存储所需的所有依赖项的便捷捆绑包。有两个HBase Spark运行时JAR,一个用于HBase 1.x (geomesa-hbase-spark-runtime-hbase1 )和一个用于HBase 2.x (geomesa-hbase-spark-runtime-hbase2 )。确保使用与您的HBase版本对应的JAR。

此提供程序可以对GeoMesa进行读取和写入 HBaseDataStore 。配置参数与传递给的参数相同 DataStoreFinder.getDataStore() 。看见 HBase数据存储参数 了解更多细节。

备注

连接到HBase通常需要 hbase-site.xml 文件在Spark类路径上可用。这可以通过使用指定来完成 --jars 。例如:

$ spark-shell --jars file:///opt/geomesa/dist/spark/geomesa-hbase-spark-runtime-hbase1_${VERSION}.jar,file:///usr/lib/hbase/conf/hbase-site.xml

或者,您可以在数据存储参数映射中指定动物园管理员。然而,这可能并不适用于每个HBase设置。

要在GeoMesa中访问的要素类型将作为查询的类型名称传递给 rdd() 方法。例如,要加载一个 RDD 关于类型的特征 gdeltgeomesa HBase表:

import org.apache.hadoop.conf.Configuration
import org.geotools.data.Query
import org.locationtech.geomesa.spark.GeoMesaSpark

val params = Map("hbase.zookeepers" -> "zoo1,zoo2,zoo3", "hbase.catalog" -> "geomesa")
val query = new Query("gdelt")
val rdd = GeoMesaSpark(params).rdd(new Configuration(), sc, params, query)

11.4.3. 文件系统RDD提供程序

这个 FileSystemRDDProvider 是GeoMesa文件系统数据存储的空间RDD提供程序。核心代码位于 geomesa-fs-spark 模块,并且带有阴影的JAR依赖项(它包含执行所需的所有依赖项)可在 geomesa-fs-spark-runtime 模块。

此提供程序可以对GeoMesa进行读取和写入 FileSystemDataStore 。配置参数与传递给的参数相同 DataStoreFinder.getDataStore() 。看见 文件系统数据存储参数 了解更多细节。

要在GeoMesa中访问的要素类型将作为查询的类型名称传递给 rdd() 方法。例如,要加载一个 RDD 关于类型的特征 gdelt 从S3存储桶中:

import org.apache.hadoop.conf.Configuration
import org.geotools.data.Query
import org.locationtech.geomesa.spark.GeoMesaSpark

val params = Map("fs.path" -> "s3a://mybucket/geomesa/datastore")
val query = new Query("gdelt")
val rdd = GeoMesaSpark(params).rdd(new Configuration(), sc, params, query)

看见 fsds_sparksql_example 查看将SparkSQL与文件系统数据存储一起使用的示例。

11.4.4. Converter RDD提供程序

这个 ConverterSpatialRDDProvider 是由 geomesa-spark-converter 模块。

ConverterSpatialRDDProvider 以可读格式从一个或多个数据文件中读取要素 GeoMesa转换器 库,包括分隔和固定宽度的文本、avro、JSON和XML文件。它采用以下配置参数:

  • geomesa.converter -将转换器定义为Typesafe配置字符串

  • geomesa.converter.inputs -输入文件路径,以逗号分隔

  • geomesa.sft -- SimpleFeatureType ,作为规范字符串、配置字符串或环境查找名称

  • geomesa.sft.name - (optional) the name of the SimpleFeatureType

中描述的示例数据。 用法示例 部分的 GeoMesa转换器 文件。如果该文件 example.csv 包含示例数据,并且 example.conf 包含转换器的Typesafe配置文件,可以使用以下Scala代码将此数据加载到 RDD

import com.typesafe.config.ConfigFactory
import org.apache.hadoop.conf.Configuration
import org.geotools.data.Query
import org.locationtech.geomesa.spark.GeoMesaSpark

val exampleConf = ConfigFactory.load("example.conf").root().render()
val params = Map(
  "geomesa.converter"        -> exampleConf,
  "geomesa.converter.inputs" -> "example.csv",
  "geomesa.sft"              -> "phrase:String,dtg:Date,geom:Point:srid=4326",
  "geomesa.sft.name"         -> "example")
val query = new Query("example")
val rdd = GeoMesaSpark(params).rdd(new Configuration(), sc, params, query)

还可以加载用于公共数据源(GDELT、GeoName等)的预打包转换器。通过Maven或SBT。看见 预打包的转换器定义 了解更多详细信息。

警告

ConvertSpatialRDDProvider 是只读的,不支持将功能写入数据文件。

11.4.5. GeoTools RDD提供程序

GeoToolsSpatialRDDProvider 是由 geomesa-gt-spark 模块。

GeoToolsSpatialRDDProvider 生成并保存 RDD 存储在通用GeoTool中的要素的S DataStore 。传递的配置参数与传递给 DataStoreFinder.getDataStore() 创建感兴趣的数据存储,外加一个名为“GeoTools”的必需布尔参数,以指示SPI加载 GeoToolsSpatialRDDProvider 。例如,要使用 Postgis DataStore 使用GeoMesa Spark,执行以下操作:

import org.apache.hadoop.conf.Configuration
import org.geotools.data.Query
import org.locationtech.geomesa.spark.GeoMesaSpark

val params = Map(
  "geotools" -> "true",
  "dbtype"   -> "postgis",
  "host"     -> "localhost",
  "user"     -> "postgres",
  "passwd"   -> "postgres",
  "port"     -> "5432",
  "database" -> "example")
val query = new Query("locations")
val rdd = GeoMesaSpark(params).rdd(new Configuration(), sc, params, query)

要在数据存储中访问的要素类型的名称将作为传递给 rdd() 方法。在上面的示例中,这是“Locations”。

警告

不要将GeoTools RDD提供程序与具有提供程序实现的GeoMesa数据存储一起使用。上述提供程序提供了额外的优化以提高读写性能。