Sqoop-インポート

この章では、MySQLデータベースからHadoopHDFSにデータをインポートする方法について説明します。「インポートツール」は、個々のテーブルをRDBMSからHDFSにインポートします。テーブルの各行は、HDFSではレコードとして扱われます。すべてのレコードは、テキストファイルにテキストデータとして、またはAvroファイルとシーケンスファイルにバイナリデータとして保存されます。

構文

次の構文は、HDFSにデータをインポートするために使用されます。

$ sqoop import (generic-args) (import-args) 
$ sqoop-import (generic-args) (import-args)

次の名前の3つのテーブルの例を見てみましょう。 empemp_add、および emp_contact、MySQLデータベースサーバーのuserdbというデータベースにあります。

3つの表とそのデータは次のとおりです。

emp:

id 名前 給料 部門
1201 ゴパル マネージャー 50,000 TP
1202 マニシャ 校正者 50,000 TP
1203 カリル php dev 30,000 交流
1204 プラシャーント php dev 30,000 交流
1204 クランティ 管理者 20,000 TP

emp_add:

id hno 通り
1201 288A vgiri ジュブリー
1202 108I aoc 秒-悪い
1203 144Z pgutta hyd
1204 78B 旧市街 秒-悪い
1205 720X ハイテック 秒-悪い

emp_contact:

id phno Eメール
1201 2356742 [email protected]
1202 1661663 [email protected]
1203 8887776 [email protected]
1204 9988774 [email protected]
1205 1231231 [email protected]

テーブルのインポート

Sqoopツールの「import」は、テーブルデータをテーブルからHadoopファイルシステムにテキストファイルまたはバイナリファイルとしてインポートするために使用されます。

次のコマンドを使用して、 emp MySQLデータベースサーバーからHDFSへのテーブル。

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp --m 1

正常に実行されると、次の出力が得られます。

14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
14/12/22 15:24:56 INFO tool.CodeGenTool: Beginning code generation
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
14/12/22 15:25:11 INFO orm.CompilationManager: Writing jar file: 
   /tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:25:40 INFO mapreduce.Job: The url to track the job: 
   http://localhost:8088/proxy/application_1419242001831_0001/
14/12/22 15:26:45 INFO mapreduce.Job: Job job_1419242001831_0001 running in uber mode : 
   false
14/12/22 15:26:45 INFO mapreduce.Job: map 0% reduce 0%
14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0%
14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds 
   (0.8165 bytes/sec)
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records.

インポートされたデータをHDFSで確認するには、次のコマンドを使用します。

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

それはあなたに emp テーブルのデータとフィールドはコンマ(、)で区切ります。

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP

ターゲットディレクトリへのインポート

Sqoopインポートツールを使用してテーブルデータをHDFSにインポートするときに、ターゲットディレクトリを指定できます。

以下は、Sqoopimportコマンドのオプションとしてターゲットディレクトリを指定するための構文です。

--target-dir <new or exist directory in HDFS>

次のコマンドを使用してインポートします emp_add '/ queryresult'ディレクトリへのテーブルデータ。

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--target-dir /queryresult

次のコマンドは、/ queryresultディレクトリフォームにインポートされたデータを確認するために使用されます emp_add テーブル。

$ $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*

emp_addテーブルデータがコンマ(、)で区切られたフィールドとともに表示されます。

1201, 288A, vgiri,   jublee
1202, 108I, aoc,     sec-bad
1203, 144Z, pgutta,  hyd
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

テーブルデータのサブセットをインポートする

Sqoopインポートツールの「where」句を使用して、テーブルのサブセットをインポートできます。対応するSQLクエリをそれぞれのデータベースサーバーで実行し、結果をHDFSのターゲットディレクトリに保存します。

where句の構文は次のとおりです。

--where <condition>

次のコマンドは、のサブセットをインポートするために使用されます emp_addテーブルデータ。サブセットクエリは、セカンドラバード市に住む従業員IDと住所を取得することです。

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--where “city =’sec-bad’” \
--target-dir /wherequery

次のコマンドを使用して、/ wherequeryディレクトリにインポートされたデータを確認します。 emp_add テーブル。

$ $HADOOP_HOME/bin/hadoop fs -cat /wherequery/part-m-*

それはあなたに表示されます emp_add カンマ(、)で区切られたフィールドを持つテーブルデータ。

1202, 108I, aoc,     sec-bad
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

インクリメンタルインポート

インクリメンタルインポートは、テーブルに新しく追加された行のみをインポートする手法です。インクリメンタルインポートを実行するには、「incremental」、「check-column」、および「last-value」オプションを追加する必要があります。

次の構文は、Sqoopインポートコマンドのインクリメンタルオプションに使用されます。

--incremental <mode>
--check-column <column name>
--last value <last check column value>

新しく追加されたデータをに仮定しましょう emp 表は以下の通りです−

1206, satish p, grp des, 20000, GR

次のコマンドを使用して、で増分インポートを実行します。 emp テーブル。

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp \
--m 1 \
--incremental append \
--check-column id \
-last value 1205

次のコマンドは、からインポートされたデータを確認するために使用されます emp テーブルをHDFSemp /ディレクトリに。

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

それはあなたに emp カンマ(、)で区切られたフィールドを持つテーブルデータ。

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP
1206, satish p, grp des, 20000, GR

次のコマンドを使用して、から変更または新しく追加された行を確認します。 emp テーブル。

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*1

新しく追加された行が表示されます emp カンマ(、)で区切られたフィールドを持つテーブル。

1206, satish p, grp des, 20000, GR