2020/06/03
Apache Airflowでembulkを実行してみた
概要
Airflowをプロジェクトに導入する予定ができてきました。
何ができそうか・できなそうかの確認がてらAirflowに入門してみました。
(Airflowの入門プラスアルファレベルです。)
やったことは、ローカルマシンのdocker-compose上で、airflowを動かし、embulkを動かして、
mysqlのデータをbigqueryにエクスポートしました。
詳細
Dockerfileを作成
"puckel/docker-airflow:1.10.9"というdocker imageを活用しました。
ただ、こちらのimageにはembulkはインストールされていないので、インストールする必要がありました。
なので、以下のDockerfileを作って、対応しました。
# see https://github.com/puckel/docker-airflow/blob/master/Dockerfile for more detail
FROM puckel/docker-airflow:1.10.9
LABEL maintainer="Hiroki Tanaka"
# install java
# see https://github.com/embulk/embulk#linux--mac--bsd
# Embulk is a Java application. Please make sure that Java SE Runtime Environment (JRE) is installed.
# Embulk v0.8 series runs on Java 7, and Embulk v0.9 series runs on Java 8. Java 9 is not supported in any version for the time being.
# the actual step to install java is inspired by the following article
# https://stackoverflow.com/questions/57031649/how-to-install-openjdk-8-jdk-on-debian-10-buster
# https://qiita.com/witchcraze/items/47d44df81f1b152bab8c
USER root
RUN apt-get update && \
apt-get -y upgrade && \
apt-get install -y wget software-properties-common gnupg
RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add - && \
add-apt-repository -y https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ && \
apt-get -y update && \
mkdir -p /usr/share/man/man1/ && \
apt-get install -y adoptopenjdk-8-hotspot
USER airflow
# install embulk. see https://github.com/embulk/embulk
RUN curl --create-dirs -o ${AIRFLOW_HOME}/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar" && \
chmod +x ${AIRFLOW_HOME}/.embulk/bin/embulk
ENV PATH=${PATH}:${AIRFLOW_HOME}/.embulk/bin
# install embulk plugin.
RUN embulk gem install embulk-input-mysql embulk-output-bigquery
USER airflow
WORKDIR ${AIRFLOW_HOME}
ENTRYPOINT ["/entrypoint.sh"]
CMD ["webserver"]
ポイントとしては、以下です。
- embulkはJava 8が必要なので、インストールしました。(結構骨が折れました)
- embulkのpluginも必要なので、embulk-input-mysql embulk-output-bigqueryをそれぞれインストールしました
gcpのサービスアカウントの作成
- Big QueryのDataSetを作成しました
- サービスアカウントを作成して、適切な権限を振りました
- サービスアカウントのkeyファイルをダウンロードしておき、docker-composeでmountできるようにしておきました
docker-composeを作成
基本的には、こちらのファイルに
エクスポートしたい、mysqlのデータとコンテナを追加して起動しました。
dagを作成
あとは簡単で、bash operatorを使って、 "embulk run"を呼び出すだけです
embulk_operation = BashOperator(
task_id="embulk_users",
bash_command="embulk run /usr/local/airflow/embulk/users.yml.liquid",
dag=dag,
)
以上です。