Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away