きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

Glueをローカルで動かすための考察

まだ未解決なのでアイデアを考え中。

実現できると分かってること

glueContext.create_dynamic_frame.from_optionsを使うケース
AWS Glueをローカル環境で実行してみた | Developers.IO
あと、こちらも。
AWS Glueの単体テスト環境の構築手順 | フューチャー技術ブログ

s3だけならば、localstack以外にもminioを使う選択肢はあるかもしれない。

やりたいが方法が見つかってないこと

glueContext.create_dynamic_frame.from_catalogを使うケース

なぜできてないか

localstackにはGlueのAPIはない。
Support AWS Glue · Issue #1446 · localstack/localstack · GitHub
型や場所に関する情報がデータカタログにあるが、それがないので何もしないと失敗するだろう。

考察1

sparkのenableHiveSupportを有効にする。
根拠はこれ。
Spark SQL ジョブの AWS Glue データカタログ サポート - AWS Glue
この根拠どおりなら、sparkがHiveを意識するように構成すれば良いことになる。

考察2

sparkがHiveを意識するとき、javax.jdo関連のプロパティを構成するようにする。spark-warehouseはまだ咀嚼できてない。
Hive Metastore · The Internals of Spark SQL
あとこれも。
Apache Hive メタストアを Amazon EMR に移行してデプロイする | Amazon Web Services ブログ
AWSの例の場合のうち、RDSを使う状態になれば良いと思っている。ローカルでやるにはMySQLpostgresqlを用意すれば良いだろう。

考察3

分けてもいいけど、Hadoop+Hive+MySQLを入れたコンテナを用意する。
S3用のlocalstackのコンテナを用意する。
Spark用のコンテナを用意する。
HiveもSparkもjdoの設定で、MySQLを見るように構成する。
Hiveのcreate databaseとcreate tableでMySQLに、Glueのカタログテーブルに相当するものを作成する。

考察4

HiveのテーブルとGlueのテーブル。
LanguageManual DDL - Apache Hive - Apache Software Foundation
CREATE TABLE - Amazon Athena
だいたいcreate tableの構文は同じはず。

考察5

やばそうなのは、カタログのアップデートをどうするかだな。enableUpdateCatalogは厳しい。単体試験なら困らないかな?いや、困るな。試験データのパーティションを作って消してを繰り返す必要がある。単体試験以降もローカルでやりたいときは、複数のSpark Jobを先行後続で動かしたときに、Hive Metastoreが更新されてないだろう。

考察6

リモートのmetastoreだから、thriftもいるかも。Hiveのhive.metastore.urisにthriftのホストとポートが必要そう。Spark側からはいらないかも。


道のりは遠いな。。。