LoginSignup
8
8

More than 5 years have passed since last update.

【embulk】mysql・Dynamodb・bigquery間のデータ転送を簡単に

Last updated at Posted at 2015-12-24

embulkとは

  • オープンソースのバルクデータ転送ツール
  • Fluentdのバルクデータ版
  • プラグインの導入でどんなデータソースからも取得・追加できる

どんなとき使うの?

  • MySQLのデータ分析したいけど●千万件あってしんどいなー。BigQuery移せば楽そうだけど、移すのめんどいな。ダンプとかしないとだし。
  • Dynamodbのデータって、指定したインデックスでしか検索できないから分析に使えないなー。BigQueryに移せば・・(以下同上)
  • MySQLデータ、DynamoDBに移しておきたいなー。バックアップとして。

資料

よくわかるスライド
- Embulk 20150411

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

参考

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8