- 村瀬善則
- 約 2,100 文字
- 1,400 View
はじめに
こんにちは。TIG DXチームの村瀬です。
AWS Glue利用していますか? ETL処理をする上で大変便利ですよね。しかしながら開発に必要不可欠な開発エンドポイントが少々お高く、もう少し安価に利用できればなーと思っていたところ、さすがAWSさん素敵なリリースをしてくれました。
AWS Glueとは
過去のこちらの記事もご参考ください。
ローカルPCの環境を汚さない為に
作業を開始する前に確認したところ、Glueバージョン1.0を動かす場合にはSpark2.4.3が必要でそのSparkを動かす為にはJava 8が必要でまたPythonも3.6が必要とのこと。
依存関係が結構ありそうですね。
GlueをローカルPCで動かす為にJavaやPythonのバージョン変えるの嫌だなぁ。チームメンバーも嫌がるだろうし環境構築の為の手順用意するの面倒だしトラブった時に対応したくないなと思ったのでローカルPCの環境を汚さないように今回はDockerで用意してみることにしました。
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-libraries.html
を参考にPython,Java,Glueライブラリ,Maven,Glueアーティファクトを取得・インストールするよう記載したDockerfileを用意して実行してみると…
(※Dockerfileは後ほど出てきます)
ハマリポイント
./aws-glue-libs/bin/gluepyspark 実行時にエラー発生…
~中略~ |
すんなり行きませんでした。
エラーを確認するとio.netty.buffer.PooledByteBufAllocator.defaultNumHeapArena()なんて無いよと言われていますね。
無いと言われているものを探してみます。find / -name *netty*
/opt/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8/jars/netty-3.9.9.Final.jar |
???
いっぱい見つかりますね。
先人の知恵を借りましょう。
stackoverflow Spark 2.3 java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.metric
どうやらNettyのjarのバージョンが合ってないことが原因のようです。
改めて比較して確認してみるとspark側のjarのバージョンの方が新しいですね。
/netty-3.9.9.Final.jar |
/netty-3.6.2.Final.jar |
またまた先人の知恵を借りましょう。
GitHub gluepyspark errors on local development #25
どうやらaws-glue-libsを参照せずにsparkのjarファイルを参照すれば良いようです。ln -s ${SPARK_HOME}/jars /aws-glue-libs/jarsv1
これでdocker buildがエラーなく成功し、docker runした上でdocker execでコンテナに入り、この状態で以下のコマンドを実行すると./aws-glue-libs/bin/gluepyspark
~中略~ |
無事にSparkを起動できました。
Dockerfile
みんなお待ちかねのDockerファイルはこちら
FROM centos:7 |
まとめ
少々苦労しましたが先人の知恵を借りて問題解決できました。
これで複数いる開発メンバーにDockerイメージさえ渡せばローカル環境を汚すことなく簡単にかつお財布にやさしくローカルPCにGlueの開発環境が用意できますね。
Glueのローカル開発環境構築にチャレンジしたけどエラーが出て諦めてしまった人の手助けになれたら幸いです。
なお、この記事を作成する上で以下のページを参考にさせていただきました。
https://aws.amazon.com/jp/about-aws/whats-new/2019/08/aws-glue-releases-binaries-of-glue-etl-libraries-for-glue-jobs/
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-libraries.html
https://omohikane.com/centos7_docker_python36/
https://stackoverflow.com/questions/50388919/spark-2-3-java-lang-nosuchmethoderror-io-netty-buffer-pooledbytebufallocator-me
https://github.com/awslabs/aws-glue-libs/issues/25