データ収集基盤を設計する際に、過去の大量のファイルもデータ収集基盤に取り込みたいという要望があり、大量のファイルをまとめて処理できるツールがないかと調べていたところ、Embulkという製品を見つけましたので、調べてまとめてみました。
Embulkとは
EmbulkはTreasure Data 社が開発したOSS製品で、リアルタイムにログを収集するlogstashやfluentdのようにファイルやデータベースからデータを吸い出して、別のストレージやデータベースに渡してくれる作業をバッチ処理で行ってくれるツールです。ストリームしてデータを流し込むlogstashやfluentdと違い、バルクで処理を行うので、大量のデータを処理するのに向いています。
今回はEmbulkをDockerで構築して触ってみたいと思います。本記事ではEmbulk用のDockerコンテナを作成し、動かすところまでを実施思います。
Dockerfileの作成
EmbulkのDockerコンテナを作成するため、Dockerfileを書きます。
FROM openjdk:8-jre-alpine # Embulk 本体をインストールする RUN wget -q https://dl.embulk.org/embulk-latest.jar -O /bin/embulk \ && chmod +x /bin/embulk # 使いたいプラグインを入れる RUN apk add --no-cache libc6-compat \ && embulk gem install embulk-output-td WORKDIR /work ENTRYPOINT ["java", "-jar", "/bin/embulk"]
イメージのビルド
前述で作成したDockerfileをdocker build
コマンドでビルドします。
$ docker build -t embulk .
ビルドされたかどうか、docker images
で確認してみます。
$ docker images ---- REPOSITORY TAG IMAGE ID CREATED SIZE embulk latest e37ebe9559e7 11 minutes ago 140MB
これでdockerでEmbulkを起動する準備が整いました。
コンテナを起動してEmbulkを動かす
コンテナを起動してEmbulkを動かしてみたいと思います。
起動する場合はdocker run --rm -it -v $(pwd):/work embulk
+Commandで実行が行なえます。例えばversionを確認したい場合は
$ docker run --rm -it -v $(pwd):/work embulk --version Embulk v0.9.23
という感じで実行することができます。
Embulkはfluentdと同様にいろんなプラグインを導入して動かすことで、様々な処理を行うことができます。今回はDockerfileにoutputログインのみを導入しているが、使用する環境に応じてDockerfileを編集して使っていくと良さそうだ。