Apache Sqoop は、Apache Hadoop とリレーショナルデータベースなどの構造化データセットとの間でバルクデータを転送します。これを使用して、EMR クラスター上の MySQL、Hadoop 分散ファイルシステム (HDFS)、Hive、Object Storage Service (OSS) の間でデータを移動します。
すべてのコマンドは、ご利用のクラスターのマスターノードで実行してください。
サポートされるシナリオ
MySQL から HDFS へのデータインポート
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> --target-dir <hdfs-dir> \
--split-by <split-column> \
--check-column <col> --incremental <mode> --last-value <value>| パラメーター | 必須 | 説明 |
|---|---|---|
dburi | 必須 | データベースアクセス URL。例: jdbc:mysql://192.168..:3306/ |
dbname | 必須 | データベース名。 |
username | 必須 | データベースにログインするためのユーザー名。 |
password | 必須 | データベースにログインするためのパスワード。 |
tablename | 必須 | MySQL テーブル名。 |
hdfs-dir | 必須 | データを書き込む HDFS ディレクトリ。例: /user/hive/result |
split-column | 任意 | 並列タスクを分割するために使用される列。デフォルトはプライマリキー列です。 |
col | 任意 | 増分インポートの対象行を識別するために使用される列。 |
mode | 任意 | 増分インポートモード。有効な値: append と lastmodified |
value | 任意 | 前回の増分インポートからの最大列値。 |
すべてのパラメーターリファレンスについては、Sqoop ユーザーガイドの「構文」をご参照ください。
HDFS から MySQL へのデータインポート
このコマンドを実行する前に、HDFS のデータ構造と一致するスキーマを持つ MySQL テーブルを作成してください。
sqoop export --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> --export-dir <hdfs-dir>| パラメーター | 必須 | 説明 |
|---|---|---|
dburi | 必須 | データベースアクセス URL。例: jdbc:mysql://192.168..:3306/ |
dbname | 必須 | データベース名。 |
username | 必須 | データベースにログインするためのユーザー名。 |
password | 必須 | データベースにログインするためのパスワード。 |
tablename | 必須 | MySQL テーブル名。 |
hdfs-dir | 必須 | HDFS ソースディレクトリ。例: /user/hive/result |
すべてのパラメーターリファレンスについては、Sqoop ユーザーガイドの「構文」をご参照ください。
Hive から MySQL へのデータインポート
Hive テーブルは HDFS にファイルとして保存されます。Hive テーブルを MySQL にエクスポートするには、「HDFS から MySQL へのデータインポート」と同じ sqoop export コマンドを使用し、Hive テーブルの HDFS ディレクトリを --export-dir として指定します。
MySQL から Hive へのデータインポート
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> \
--check-column <col> --incremental <mode> --last-value <value> \
--fields-terminated-by "\t" --lines-terminated-by "\n" \
--hive-import --target-dir <hdfs-dir> --hive-table <hive-tablename>| パラメーター | 必須 | 説明 |
|---|---|---|
dburi | 必須 | データベースアクセス URL。例: jdbc:mysql://192.168..:3306/ |
dbname | 必須 | データベース名。 |
username | 必須 | データベースにログインするためのユーザー名。 |
password | 必須 | データベースにログインするためのパスワード。 |
tablename | 必須 | MySQL テーブル名。 |
hdfs-dir | 必須 | 中間 HDFS ステージングディレクトリ。例: /user/hive/result |
hive-tablename | 必須 | ターゲット Hive テーブル名。 |
col | 任意 | 増分インポートの対象行を識別するために使用される列。 |
mode | 任意 | 増分インポートモード。有効な値: append と lastmodified |
value | 任意 | 前回の増分インポートからの最大列値。 |
すべてのパラメーターリファレンスについては、Sqoop ユーザーガイドの「構文」をご参照ください。
MySQL から OSS へのデータインポート
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> --target-dir <oss-dir> --temporary-rootdir <oss-tmpdir> \
--check-column <col> --incremental <mode> --last-value <value>| パラメーター | 必須 | 説明 |
|---|---|---|
dburi | 必須 | データベースアクセス URL。例:jdbc:mysql://192.168..:3306/ |
dbname | 必須 | データベース名 |
username | 必須 | データベースにログインするためのユーザー名 |
password | 必須 | データベースにログインするためのパスワード |
tablename | 必須 | MySQL テーブル名 |
oss-dir | 必須 | OSS の宛先ディレクトリ。例:oss://<AccessKeyId>:<AccessKeySecret>@<BucketName>.oss-cn-hangzhou-internal.aliyuncs.com/result |
oss-tmpdir | mode=append | OSS の一時ディレクトリ。mode が append の場合、Sqoop はまずこのディレクトリにデータを書き込み、その後、ファイルを宛先にリネームします。宛先ディレクトリが HDFS にすでに存在する場合、Sqoop はデータをインポートも上書きもしません。 |
col | オプション | 増分インポートで行を識別するために使用される列 |
mode | オプション | 増分インポートモード。有効な値:append と lastmodified |
value | オプション | 前回の増分インポートからの列の最大値 |
すべてのパラメーターリファレンスについては、Sqoop ユーザーガイドの「構文」をご参照ください。
OSS から MySQL へのデータインポート
このコマンドを実行する前に、OSS のデータ構造と一致するスキーマを持つ MySQL テーブルを作成してください。
sqoop export --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> --export-dir <oss-dir>| パラメーター | 必須 | 説明 |
|---|---|---|
dburi | 必須 | データベースアクセス URL。例: jdbc:mysql://192.168..:3306/ |
dbname | 必須 | データベース名。 |
username | 必須 | データベースにログインするためのユーザー名。 |
password | 必須 | データベースにログインするためのパスワード。 |
tablename | 必須 | MySQL テーブル名。 |
oss-dir | 必須 | OSS ソースディレクトリ。例: oss://<AccessKeyId>:<AccessKeySecret>@<BucketName>.oss-cn-hangzhou-internal.aliyuncs.com/result |
すべてのパラメーターリファレンスについては、Sqoop ユーザーガイドの「構文」をご参照ください。
SQL ステートメントを使用したデータインポート
--query を使用して、テーブル全体をインポートする代わりに、カスタム SQL ステートメントで行をフィルターします。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> \
--query <query-sql> --split-by <sp-column> \
--hive-import --hive-table <hive-tablename> --target-dir <hdfs-dir>| パラメーター | 必須 | 説明 |
|---|---|---|
dburi | 必須 | データベースアクセス URL。例: jdbc:mysql://192.168..:3306/ |
dbname | 必須 | データベース名。 |
username | 必須 | データベースにログインするためのユーザー名。 |
password | 必須 | データベースにログインするためのパスワード。 |
query-sql | 必須 | インポートするデータを選択するための SQL ステートメント。$CONDITIONS を含める必要があります。例: SELECT * FROM profile WHERE id>1 AND \$CONDITIONS |
sp-column | 必須 | 並列タスクを分割するために使用される列。通常は MySQL テーブルのプライマリキーです。 |
hdfs-dir | 必須 | 中間 HDFS ステージングディレクトリ。例: /user/hive/result |
hive-tablename | 必須 | ターゲット Hive テーブル名。 |
すべてのパラメーターリファレンスについては、Sqoop ユーザーガイドの「構文」をご参照ください。