Amazon Elastic Map Reduce 4.7.1、Hadoop 2.7.2、Hive 1.0.0、および Spark 1.6.1 を使用しています。
ユースケース: データの処理に使用する Spark クラスターがあります。そのデータは S3 に Parquet ファイルとして保存されます。ツールが、Hive メタストアに登録されている名前を使用してデータをクエリできるようにしたい (たとえば、作業スタイルでfoo
はなく、テーブルを検索parquet.`s3://bucket/key/prefix/foo/parquet`
する)。また、EMR クラスターを破棄して、同じメタストアに接続された新しいクラスターをスピンアップしても、Hive メタストア (別の RDS インスタンス) の存続期間中、このデータを保持したいと考えています。
問題: そのようなsqlContext.saveAsTable("foo")
ことをすると、デフォルトで、Hive メタストアにマネージド テーブルが作成されます ( https://spark.apache.org/docs/latest/sql-programming-guide.htmlを参照)。これらのマネージド テーブルは、データを S3 から EMR クラスターの HDFS にコピーします。つまり、EMR クラスターを破棄した後、メタデータは役に立たなくなります。