このエントリでは、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