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を使う状態になれば良いと思っている。ローカルでやるにはMySQLかpostgresqlを用意すれば良いだろう。
考察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側からはいらないかも。
道のりは遠いな。。。