【AWS】AWS Glue ~ ローカル環境を作成する ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/12/14/010524
https://dk521123.hatenablog.com/entry/2019/12/16/231149

の続き。

今回は、ローカル上にAWS Glue環境を作る。

以下の公式サイトを参考になる。

公式サイト
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-libraries.html

目次

【0】設定環境例
 必要なライブラリ
【1】git の設定
 1)git の インストール
【2】Pythonの設定
 1)Pythonのインストール
 2)シンボリックリンクを設定
【3】Java8の設定
 1)Java8のインストール
【4】Apache Mavenの設定
 1)Apache Mavenのインストール
【5】Sparkのインストール
【6】aws-glue-libのインストール
【7】PySpark / boto3 / pytest のインストール
【8】環境変数設定
【9】動作確認
 1)Spark 起動確認
 2)Glue PySpark 起動確認
 補足:Glue ローカル環境に関するコマンド

【0】設定環境例

* OS : Windows10(WSL2)
* 仮想OS: Ubuntu 20.04.2 LTS

=> Windows の仮想環境設定については、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2020/12/08/165505
https://dk521123.hatenablog.com/entry/2020/12/10/094125

必要なライブラリ

1) Python3.6 / Python3.7
 => Glue1.0 は、3.6ベースで動いているため
 => Glue2.0 は、3.7ベースで動いているため
 => 詳細は、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2019/10/01/221926

2) AWS Glue Python ライブラリ

https://github.com/awslabs/aws-glue-libs

[AWS Glue Python ライブラリで使用している依存ライブラリ]
 2-a)Java
 2-b)Apache Maven
 2-c)Apache Spark

※ 「AWS Glue Python ライブラリ」については、以下の公式サイトを参照のこと。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-libraries.html

【1】git の設定

1)git の インストール

# とりあえず、念のため、バージョンを確認
git --version

sudo apt install git

【2】Pythonの設定

1)Pythonのインストール

# とりあえず、念のため、Pythonのバージョンを確認
python -V

sudo apt install python3.7 python3.7-dev python3-distutils

2)シンボリックリンクを設定

# バージョンを切り替えるためにシンボリックリンクを設定
# sudo update-alternatives --install <作成するシンボリックのパス> <グループ名> <実体へのパス> <優先度>
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2

# sudo update-alternatives --install <グループ名>
sudo update-alternatives --config python3
2 << を選択 (python3.7)

# Pythonのバージョンを確認 (python3.7 になっているはず)
python -V

【3】Java8の設定

1)Java8のインストール

# バージョンを確認
java -version

# もし、Java1.8じゃなかった場合、インストールする
sudo apt install openjdk-8-jdk

# 再度、バージョンを確認 (Java1.8系がインストールされているはず)
java -version

【4】Apache Mavenの設定

1)Apache Mavenのインストール

curl -OL https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz
sudo tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /opt/

# リンクを張る
sudo ln -s /opt/apache-maven-3.6.0 /opt/apache-maven

# 確認
mvn --version

【5】Sparkのインストール

curl -OL https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-1.0/spark-2.4.3-bin-hadoop2.8.tgz

tar -xzvf spark-2.4.3-bin-hadoop2.8.tgz

# リネーム / リンクを張る
sudo mv spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8 /opt/
sudo ln -s /opt/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8 /opt/spark

【6】aws-glue-libのインストール

git clone https://github.com/awslabs/aws-glue-libs.git -b glue-1.0 --depth 1

sudo mv aws-glue-libs /opt/
sudo chmod -R ao+wr /opt/aws-glue-libs

【7】PySpark / boto3 / pytest のインストール

sudo python3.6 -m pip install pyspark
sudo python3.7 -m pip install pyspark

pip3 install boto3 pytest

【8】環境変数設定

vi ~/.bash_profile
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
export SPARK_HOME=/opt/spark
export PYSPARK_PYTHON=/usr/bin/python3
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export AWS_REGION=ap-northeast-1
export AWS_DEFAULT_REGION=ap-northeast-1
export PATH=$PATH:$SPARK_HOME/bin:$PYSPARK_PYTHON:/sbin:/opt/apache-maven/bin:/opt/aws-glue-libs/bin
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# 適用
source ~/.bash_profile

# 確認
echo ${SPARK_HOME}
 => /opt/spark

【9】動作確認

1)Spark 起動確認

spark-shell

:quit << 起動確認できたら、辞める

2)Glue PySpark 起動確認

gluepyspark

exit() << 起動確認できたら、辞める

補足:Glue ローカル環境に関するコマンド

/opt/aws-glue-libs/bin 内を参照すると、以下の3つのコマンドが存在する。

a) gluepyspark ... 対話モードでgluepysparkを起動する場合に使用
b) gluesparksubmit ... Jobを実行したい場合に使用
c) gluepytest ... 単体試験を実行したい場合に使用

参考文献

https://future-architect.github.io/articles/20210521a/
https://dev.classmethod.jp/articles/aws-glue-local/
https://future-architect.github.io/articles/20191206/
https://future-architect.github.io/articles/20191101/
https://qiita.com/kusanoiskuzuno/items/4175e62763526789b34e
https://takap.net/local_glue_docker/

関連記事

AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
Apache Spark ~ 環境設定 / Linux編 ~
https://dk521123.hatenablog.com/entry/2019/11/01/000000
LocalStack ~ ローカルで疑似AWSを作成する ~
https://dk521123.hatenablog.com/entry/2019/12/14/010524
LocalStack ~ ローカルで疑似Lambda/S3/DynamoDBを作成する ~
https://dk521123.hatenablog.com/entry/2019/12/16/231149
LocalStack ~ awscli-local ~
https://dk521123.hatenablog.com/entry/2020/12/16/211127
Docker Desktop / WSL2 ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/12/08/165505
Windows Terminalを使ってWindows上にあるUbuntuでDockerを使えるようにする
https://dk521123.hatenablog.com/entry/2020/12/10/094125
単体試験 / pytest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/13/224810