embulkとは
- オープンソースのバルクデータ転送ツール
- Fluentdのバルクデータ版
- プラグインの導入でどんなデータソースからも取得・追加できる
どんなとき使うの?
- MySQLのデータ分析したいけど●千万件あってしんどいなー。BigQuery移せば楽そうだけど、移すのめんどいな。ダンプとかしないとだし。
- Dynamodbのデータって、指定したインデックスでしか検索できないから分析に使えないなー。BigQueryに移せば・・(以下同上)
- MySQLデータ、DynamoDBに移しておきたいなー。バックアップとして。
資料
よくわかるスライド
embulkのインストール方法
https://github.com/embulk/embulk#linux--mac--bsd に従う。
curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
chmod +x ~/.embulk/bin/embulk
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
JREのバージョンが古いというエラーの場合
下のようにjavaのバージョンが古いと怒られた場合:
[dev@util ~]$ embulk gem install embulk-input-mysql
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/embulk/cli/Main : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: org.embulk.cli.Main. Program will exit.
エラーメッセージからClassVersion=51が必要なので、JRE 1.7以上にバージョンを上げる必要がある。
yum search openjdk
sudo yum install java-1.8.0-openjdk
プラグインの導入
embulk gem install embulk-input-mysql embulk-input-dynamodb, embulk-output-bigquery
embulkの設定ファイルを書く
設定ファイルはどこに置いてもいい。
mysqlのデータをbigqueryに移動する例:
mysql_profile_to_bigquery.yml
in:
type: mysql
host: xxxxxxxxxx
user: xxxxxxxxxx
password: "xxxxxxxxxx"
database: xxxxxxxxxx
table: xxxxxxxxxx
out:
type: bigquery
service_account_email: xxxxxxxxxx@developer.gserviceaccount.com
p12_keyfile_path: /path/to/cert.p12
path_prefix: /tmp/embulk/mysql2bigquery/
source_format: CSV
file_ext: .csv
delete_from_local_when_job_end: 1
project: coupleslv
dataset: profile
auto_create_table: 1
schema_path: /path/to/schema.json
table: xxxxxxxxxx
formatter:
type: csv
header_line: false
timezone: Asia/Tokyo
-
service_account_email
,p12_keyfile_path
は、fluent-plugin-bigqueryのemail
,private_key_path
とそれぞれ同じ。 - 空のカラムがあってうまくいかない場合は、
ignore_unknown_values: 1
をつけてみる(ちゃんと入っているか確認) - mysql pluginは、SQLをそのまま書くこともできる
- 中間ファイルのディレクトリはこちらで作ってあげる必要がある
- スキーマのjsonファイルも必要
実行する
中間ファイルのディレクトリを作って、実行する。なにこれめちゃ楽。
embulk run mysql_profile_to_bigquery.yml