Spark on EMRで環境変数を渡す方法とちょっと注意点
公式docには書いてない?かも
spark-env—spark-env.sh ファイルで値を設定します。詳細については、Spark ドキュメントの「Environment Variables」を参照してください。
公式docには、saprk-env.shで設定してくださいぐらいしか書いてなくてパッと分からなかった。リンク先のSparkドキュメント見ても、configurationで設定する方法なども見つけられなかった。
結局、別のAWSのブログ記事に書いてあるやつで、見つけられた。
spark-env.shじゃなくてconfigurationで設定する
こういうconfigを書けばOK
[ { "Classification": "spark-env", "Configurations": [ { "Classification": "export", "Properties": { "JDBC_URL": "'jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8'" } } ] } ]
ここで設定した環境変数は、/etc/spark/conf/spark-env.sh
と/usr/lib/spark/conf/spark-env.sh
に書き込まれるんだけど、単にexport key=value
と追加されるだけなので、valueに=
なんかが入っているとバグってしまう。なので、上記のようにシングルクオテーション等でくくっておく必要がある。