hdfsにsqoopとembulkでmysqlからロードする手順
このエントリでは、Mac上でhdfsにmysqlからデータをロードする手順を記載します。
sqoopを利用する手順とembulkを利用する手順を示します。
Apache Sqoop:
http://sqoop.apache.org/
embulk:
https://github.com/embulk/embulk
この手順の前提として、
homebrew及びjdk, hadoop, hdfsのセットアップは完了し、hdfsのnamendeは起動しているものとします。
hadoopとhdfsのセットアップについては、
以下エントリの「Hadoopとhdfsのセットアップ」を参考にしてください。
Mac上でのhiveセットアップ手順(mysql上にmetastoreを作成):
http://takemikami.com/2016/04/20/Machivemysqlmetastore.html
sqoop/embulk共通の準備
mysqlにデータを用意する
はじめに、mysql上にロードするデータを作成しておきます。
以下のコマンドで、mysqlを起動します。
$ mysql.server start
以下のように、ロードするサンプルデータを作成します。
$ mysql -u root
> create database hdfs_load_test;
> use hdfs_load_test;
> create table sample (id int primary key, value varchar(32));
> insert into sample(id,value) values (1,'hoge');
> insert into sample(id,value) values (2,'fuga');
sqoopでmysql→hdfsにデータをロード
この節では、sqoopでデータをロードする手順を示します。
sqoopのインストール
以下のコマンドで、sqoopをインストールします。
$ brew install sqoop
sqoop help
でusageが表示されればインストール成功です。
jdbcドライバの入手と設置
次にmysqlのjdbcドライバを入手、設置します。
以下のURLからmysqlのjdbcドライバをダウンロードします。
Download Connector/J | MySQL:
https://dev.mysql.com/downloads/connector/j/
ファイル名: mysql-connector-java-5.1.38.tar.gz
ダウンロードしたファイルを展開して得られたjarファイルを、
以下のパスにコピーします。
※ファイル名やコピー先はバージョンによって異なります。
対象ファイル: mysql-connector-java-5.1.38-bin.jar
コピー先: /usr/local/Cellar/sqoop/1.4.6/libexec/lib/
sqoopコマンドによるデータロードの実施
以下のコマンドで、mysqlに作成したサンプルデータをロードします。
$ sqoop import \
--verbose \
--connect jdbc:mysql://localhost/hdfs_load_test \
--username root \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
--table sample \
--target-dir /tmp/sqoop_sample
以下のコマンドで、hdfsにデータがロードされたことを確認出来ます。
$ hadoop fs -ls /tmp/sqoop_sample
Found 3 items
-rw-r--r-- 1 takemikami supergroup 0 2016-05-08 03:30 /tmp/sqoop_sample/_SUCCESS
-rw-r--r-- 1 takemikami supergroup 7 2016-05-08 03:30 /tmp/sqoop_sample/part-m-00000
-rw-r--r-- 1 takemikami supergroup 7 2016-05-08 03:30 /tmp/sqoop_sample/part-m-00001
$ hadoop fs -cat /tmp/sqoop_sample/*
1 hoge
2 fuga
その他のsqoopの使い方はsqoopのマニュアルを参照してください。
http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html
embulkでmysql→hdfsにデータをロード
この節では、embulkでデータをロードする手順を示します。
embulkのインストール
以下のように入力して、embulkをインストールします。
$ 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"' >> ~/.bash_profile
$ source ~/.bash_profile
embulk --help
でusageが表示されればインストール成功です。
input-mysql, output-hdfsプラグインのインストール
mysqlからデータを取得するためにembulk-input-mysql、
hdfsにデータをロードするためにembulk-output-hdfs、
の各embulkプラグインをインストールします。
以下のコマンドで、2つのプラグインをインストールします。
$ embulk gem install embulk-input-mysql
$ embulk gem install embulk-output-hdfs
参考: Embulk plugins
http://www.embulk.org/plugins/
embulkコマンドによるデータロードの実施
以下のように、適当な作業ディレクトリを作成し、そのディレクトリに移動します。
$ mkdir ~/embulk_work && cd $_
以下の内容で、embulk用のconfig.yml.liquid
を作成します。
config.yml.liquid
in:
type: mysql
host: localhost
user: root
password: ""
database: hdfs_load_test
table: sample
out:
type: hdfs
file_ext: 'tsv'
path_prefix: '/tmp/embulk_sample/'
config_files:
- "{{ env.HADOOP_CONF_DIR }}/core-site.xml"
config:
fs.hdfs.impl: 'org.apache.hadoop.hdfs.DistributedFileSystem'
formatter:
type: csv
encoding: utf-8
header_line: false
delimiter: "\t"
設定ファイルを読み込んで、ロード対象データをプレビューします。
HADOO_CONF_DIRはhadoopの環境にあわせて変更してください。
$ export HADOOP_CONF_DIR="/usr/local/Cellar/hadoop/2.7.2/libexec/etc/hadoop"
$ embulk preview config.yml.liquid
+---------+--------------+
| id:long | value:string |
+---------+--------------+
| 1 | hoge |
| 2 | fuga |
+---------+--------------+
正しくプレビュー出来ることを確認したら、 以下のコマンドで、ロードを実行します。
$ embulk run config.yml.liquid
以下のコマンドで、hdfsにデータがロードされたことを確認出来ます。
$ hadoop fs -ls /tmp/embulk_sample
Found 1 items
-rw-r--r-- 3 takemikami supergroup 16 2016-05-08 03:49 /tmp/embulk_sample/000.00.tsv
$ hadoop fs -cat /tmp/embulk_sample/*
1 hoge
2 fuga