我正在使用 Amazon Elastic Map Reduce 4.7.1、Hadoop 2.7.2、Hive 1.0.0 和 Spark 1.6.1。
用例:我有一个用于处理数据的 Spark 集群。该数据作为 Parquet 文件存储在 S3 中。我希望工具能够使用在 Hive Metastore 中注册的名称来查询数据(例如,查找foo
表而不是parquet.`s3://bucket/key/prefix/foo/parquet`
做事的风格)。我还希望这些数据在 Hive Metastore(一个单独的 RDS 实例)的生命周期内保持不变,即使我拆除了 EMR 集群并启动了一个连接到同一个 Metastore 的新集群。
问题:如果我这样做sqlContext.saveAsTable("foo")
,默认情况下会在 Hive Metastore 中创建一个托管表(请参阅https://spark.apache.org/docs/latest/sql-programming-guide.html)。这些托管表将数据从 S3 复制到 EMR 集群上的 HDFS,这意味着在拆除 EMR 集群后元数据将毫无用处。