Sqoop-クイックガイド
従来のアプリケーション管理システム、つまり、RDBMSを使用したリレーショナルデータベースとのアプリケーションの相互作用は、ビッグデータを生成するソースの1つです。RDBMSによって生成されたこのようなビッグデータは、リレーショナルに保存されますDatabase Servers リレーショナルデータベース構造で。
HadoopエコシステムのMapReduce、Hive、HBase、Cassandra、Pigなどのビッグデータストレージとアナライザーが登場したとき、それらに存在するビッグデータをインポートおよびエクスポートするためにリレーショナルデータベースサーバーと対話するツールが必要でした。ここで、SqoopはHadoopエコシステム内の場所を占め、リレーショナルデータベースサーバーとHadoopのHDFS間の実行可能な相互作用を提供します。
Sqoop −「SQLからHadoopおよびHadoopからSQL」
Sqoopは、Hadoopとリレーショナルデータベースサーバー間でデータを転送するために設計されたツールです。これは、MySQL、OracleなどのリレーショナルデータベースからHadoop HDFSにデータをインポートし、Hadoopファイルシステムからリレーショナルデータベースにエクスポートするために使用されます。これは、Apache SoftwareFoundationによって提供されています。
Sqoopはどのように機能しますか?
次の画像は、Sqoopのワークフローを示しています。
Sqoopインポート
インポートツールは、個々のテーブルをRDBMSからHDFSにインポートします。テーブルの各行は、HDFSではレコードとして扱われます。すべてのレコードは、テキストファイルにテキストデータとして、またはAvroファイルとシーケンスファイルにバイナリデータとして保存されます。
Sqoopエクスポート
エクスポートツールは、ファイルのセットをHDFSからRDBMSにエクスポートします。Sqoopへの入力として指定されたファイルには、テーブルの行と呼ばれるレコードが含まれています。それらは読み取られて一連のレコードに解析され、ユーザー指定の区切り文字で区切られます。
SqoopはHadoopのサブプロジェクトであるため、Linuxオペレーティングシステムでのみ機能します。以下の手順に従って、システムにSqoopをインストールします。
ステップ1:JAVAインストールの確認
Sqoopをインストールする前に、システムにJavaをインストールする必要があります。次のコマンドを使用してJavaのインストールを確認しましょう-
$ java –version
Javaがすでにシステムにインストールされている場合は、次の応答が表示されます-
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
システムにJavaがインストールされていない場合は、以下の手順に従ってください。
Javaのインストール
以下の簡単な手順に従って、システムにJavaをインストールします。
ステップ1
次のリンクにアクセスして、Java(JDK <最新バージョン> -X64.tar.gz)をダウンロードします。
次に、jdk-7u71-linux-x64.tar.gzがシステムにダウンロードされます。
ステップ2
通常、ダウンロードしたJavaファイルはDownloadsフォルダーにあります。それを確認し、次のコマンドを使用してjdk-7u71-linux-x64.gzファイルを抽出します。
$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz
$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz
ステップ3
すべてのユーザーがJavaを使用できるようにするには、Javaを「/ usr / local /」の場所に移動する必要があります。rootを開き、次のコマンドを入力します。
$ su
password:
# mv jdk1.7.0_71 /usr/local/java
# exitStep IV:
ステップ4
PATH変数とJAVA_HOME変数を設定するには、次のコマンドを〜/ .bashrcファイルに追加します。
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
次に、すべての変更を現在実行中のシステムに適用します。
$ source ~/.bashrc
ステップ5
次のコマンドを使用して、Javaの代替を構成します-
# alternatives --install /usr/bin/java java usr/local/java/bin/java 2
# alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2
# alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2
# alternatives --set java usr/local/java/bin/java
# alternatives --set javac usr/local/java/bin/javac
# alternatives --set jar usr/local/java/bin/jar
コマンドを使用してインストールを確認します java -version 上で説明したように端末から。
ステップ2:Hadoopのインストールを確認する
Sqoopをインストールする前に、Hadoopをシステムにインストールする必要があります。次のコマンドを使用して、Hadoopのインストールを確認しましょう-
$ hadoop version
Hadoopがすでにシステムにインストールされている場合は、次の応答が返されます-
Hadoop 2.4.1
--
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768
Compiled by hortonmu on 2013-10-07T06:28Z
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4
Hadoopがシステムにインストールされていない場合は、次の手順に進みます-
Hadoopのダウンロード
次のコマンドを使用して、Apache SoftwareFoundationからHadoop2.4.1をダウンロードして抽出します。
$ su
password:
# cd /usr/local
# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/
hadoop-2.4.1.tar.gz
# tar xzf hadoop-2.4.1.tar.gz
# mv hadoop-2.4.1/* to hadoop/
# exit
疑似分散モードでのHadoopのインストール
以下の手順に従って、Hadoop2.4.1を疑似分散モードでインストールします。
ステップ1:Hadoopを設定する
以下のコマンドを〜/ .bashrcファイルに追加することで、Hadoop環境変数を設定できます。
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
次に、すべての変更を現在実行中のシステムに適用します。
$ source ~/.bashrc
ステップ2:Hadoop構成
すべてのHadoop構成ファイルは、「$ HADOOP_HOME / etc / hadoop」の場所にあります。Hadoopインフラストラクチャに応じて、これらの構成ファイルに適切な変更を加える必要があります。
$ cd $HADOOP_HOME/etc/hadoop
Javaを使用してHadoopプログラムを開発するには、Java環境変数をリセットする必要があります。 hadoop-env.sh JAVA_HOME値をシステム内のjavaの場所に置き換えてファイルを作成します。
export JAVA_HOME=/usr/local/java
以下に、Hadoopを構成するために編集する必要のあるファイルのリストを示します。
core-site.xml
core-site.xmlファイルには、Hadoopインスタンスに使用されるポート番号、ファイルシステムに割り当てられたメモリ、データを格納するためのメモリ制限、読み取り/書き込みバッファーのサイズなどの情報が含まれています。
core-site.xmlを開き、<configuration>タグと</ configuration>タグの間に次のプロパティを追加します。
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000 </value>
</property>
</configuration>
hdfs-site.xml
hdfs-site.xmlファイルには、ローカルファイルシステムのレプリケーションデータの値、namenodeパス、datanodeパスなどの情報が含まれています。これは、Hadoopインフラストラクチャを保存する場所を意味します。
以下のデータを想定します。
dfs.replication (data replication value) = 1
(In the following path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode
このファイルを開き、このファイルの<configuration>、</ configuration>タグの間に次のプロパティを追加します。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value>
</property>
</configuration>
Note −上記のファイルでは、すべてのプロパティ値がユーザー定義であり、Hadoopインフラストラクチャに応じて変更を加えることができます。
yarn-site.xml
このファイルは、Hadoopにyarnを構成するために使用されます。ヤーンサイト.xmlファイルを開き、このファイルの<configuration>、</ configuration>タグの間に次のプロパティを追加します。
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml
このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。まず、次のコマンドを使用して、ファイルをmapred-site.xml.templateからmapred-site.xmlファイルにコピーする必要があります。
$ cp mapred-site.xml.template mapred-site.xml
mapred-site.xmlファイルを開き、このファイルの<configuration>、</ configuration>タグの間に次のプロパティを追加します。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Hadoopのインストールの確認
次の手順は、Hadoopのインストールを確認するために使用されます。
ステップ1:ノードのセットアップに名前を付ける
次のようにコマンド「hdfsnamenode-format」を使用してnamenodeを設定します。
$ cd ~
$ hdfs namenode -format
期待される結果は以下のとおりです。
10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to
retain 1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/
ステップ2:Hadoopdfsを確認する
次のコマンドは、dfsを開始するために使用されます。このコマンドを実行すると、Hadoopファイルシステムが起動します。
$ start-dfs.sh
期待される出力は次のとおりです-
10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]
ステップ3:糸スクリプトを確認する
次のコマンドを使用して、yarnスクリプトを開始します。このコマンドを実行すると、yarnデーモンが起動します。
$ start-yarn.sh
期待される出力は次のとおりです-
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out
localhost: starting node manager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out
ステップ4:ブラウザーでHadoopにアクセスする
Hadoopにアクセスするためのデフォルトのポート番号は50070です。ブラウザーでHadoopサービスを取得するには、次のURLを使用します。
http://localhost:50070/
次の画像は、Hadoopブラウザーを示しています。
手順5:クラスターのすべてのアプリケーションを確認する
クラスタのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。このサービスにアクセスするには、次のURLを使用してください。
http://localhost:8088/
次の画像は、Hadoopクラスターブラウザーを示しています。
ステップ3:Sqoopをダウンロードする
次のリンクからSqoopの最新バージョンをダウンロードできます。このチュートリアルでは、バージョン1.4.5を使用しています。sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar.gz。
ステップ4:Sqoopをインストールする
次のコマンドを使用して、Sqoop tarボールを抽出し、「/ usr / lib / sqoop」ディレクトリに移動します。
$tar -xvf sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz
$ su
password:
# mv sqoop-1.4.4.bin__hadoop-2.0.4-alpha /usr/lib/sqoop
#exit
ステップ5:bashrcを構成する
〜/に次の行を追加して、Sqoop環境をセットアップする必要があります。.bashrc ファイル-
#Sqoop
export SQOOP_HOME=/usr/lib/sqoop export PATH=$PATH:$SQOOP_HOME/bin
次のコマンドを使用して〜/を実行します.bashrc ファイル。
$ source ~/.bashrc
ステップ6:Sqoopを構成する
HadoopでSqoopを構成するには、 sqoop-env.sh ファイルは、に配置されます $SQOOP_HOME/confディレクトリ。まず、Sqoop構成ディレクトリにリダイレクトし、次のコマンドを使用してテンプレートファイルをコピーします-
$ cd $SQOOP_HOME/conf
$ mv sqoop-env-template.sh sqoop-env.sh
開いた sqoop-env.sh 次の行を編集します-
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
ステップ7:mysql-connector-javaをダウンロードして構成する
ダウンロードできます mysql-connector-java-5.1.30.tar.gz次のリンクからファイル。
次のコマンドは、mysql-connector-javatarballを抽出して移動するために使用されます mysql-connector-java-5.1.30-bin.jar / usr / lib / sqoop / libディレクトリに移動します。
$ tar -zxf mysql-connector-java-5.1.30.tar.gz
$ su
password:
# cd mysql-connector-java-5.1.30
# mv mysql-connector-java-5.1.30-bin.jar /usr/lib/sqoop/lib
ステップ8:Sqoopを確認する
次のコマンドは、Sqoopのバージョンを確認するために使用されます。
$ cd $SQOOP_HOME/bin
$ sqoop-version
期待される出力-
14/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
Sqoop 1.4.5 git commit id 5b34accaca7de251fc91161733f906af2eddbe83
Compiled by abe on Fri Aug 1 11:19:26 PDT 2014
Sqoopのインストールが完了しました。
この章では、MySQLデータベースからHadoopHDFSにデータをインポートする方法について説明します。「インポートツール」は、個々のテーブルをRDBMSからHDFSにインポートします。テーブルの各行は、HDFSではレコードとして扱われます。すべてのレコードは、テキストファイルにテキストデータとして、またはAvroファイルとシーケンスファイルにバイナリデータとして保存されます。
構文
次の構文は、HDFSにデータをインポートするために使用されます。
$ sqoop import (generic-args) (import-args)
$ sqoop-import (generic-args) (import-args)
例
次の名前の3つのテーブルの例を見てみましょう。 emp、 emp_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
この章では、すべてのテーブルをRDBMSデータベースサーバーからHDFSにインポートする方法について説明します。各テーブルデータは個別のディレクトリに保存され、ディレクトリ名はテーブル名と同じです。
構文
次の構文は、すべてのテーブルをインポートするために使用されます。
$ sqoop import-all-tables (generic-args) (import-args)
$ sqoop-import-all-tables (generic-args) (import-args)
例
からすべてのテーブルをインポートする例を見てみましょう。 userdbデータベース。データベースが使用するテーブルのリストuserdb 含まれているのは次のとおりです。
+--------------------+
| Tables |
+--------------------+
| emp |
| emp_add |
| emp_contact |
+--------------------+
次のコマンドを使用して、からすべてのテーブルをインポートします。 userdb データベース。
$ sqoop import-all-tables \
--connect jdbc:mysql://localhost/userdb \
--username root
Note − import-all-tablesを使用している場合、そのデータベース内のすべてのテーブルに主キーフィールドが必要です。
次のコマンドは、HDFSのuserdbデータベースに対するすべてのテーブルデータを確認するために使用されます。
$ $HADOOP_HOME/bin/hadoop fs -ls
userdbデータベース内のテーブル名のリストがディレクトリとして表示されます。
出力
drwxr-xr-x - hadoop supergroup 0 2014-12-22 22:50 _sqoop
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:46 emp
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:50 emp_add
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:52 emp_contact
この章では、HDFSからRDBMSデータベースにデータをエクスポートして戻す方法について説明します。ターゲットテーブルは、ターゲットデータベースに存在する必要があります。Sqoopへの入力として提供されるファイルには、テーブルの行と呼ばれるレコードが含まれています。それらは読み取られて一連のレコードに解析され、ユーザー指定の区切り文字で区切られます。
デフォルトの操作では、INSERTステートメントを使用して、入力ファイルからデータベーステーブルにすべてのレコードを挿入します。更新モードでは、Sqoopは既存のレコードをデータベースに置き換えるUPDATEステートメントを生成します。
構文
以下は、exportコマンドの構文です。
$ sqoop export (generic-args) (export-args)
$ sqoop-export (generic-args) (export-args)
例
HDFSのファイル内の従業員データの例を見てみましょう。従業員データはで利用可能ですemp_dataHDFSの「emp /」ディレクトリにあるファイル。ザ・emp_data 以下のとおりであります。
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
エクスポートするテーブルは手動で作成し、エクスポート元のデータベースに存在する必要があります。
次のクエリは、mysqlコマンドラインでテーブル「employee」を作成するために使用されます。
$ mysql
mysql> USE db;
mysql> CREATE TABLE employee (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20),
deg VARCHAR(20),
salary INT,
dept VARCHAR(10));
次のコマンドを使用して、テーブルデータをエクスポートします( emp_data MysqlデータベースサーバーのdbデータベースのemployeeテーブルにHDFS上のファイル)。
$ sqoop export \
--connect jdbc:mysql://localhost/db \
--username root \
--table employee \
--export-dir /emp/emp_data
次のコマンドは、mysqlコマンドラインでテーブルを確認するために使用されます。
mysql>select * from employee;
指定されたデータが正常に保存された場合、指定された従業員データの次の表を見つけることができます。
+------+--------------+-------------+-------------------+--------+
| Id | Name | Designation | Salary | Dept |
+------+--------------+-------------+-------------------+--------+
| 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 |
+------+--------------+-------------+-------------------+--------+
この章では、Sqoopジョブを作成および保守する方法について説明します。Sqoopジョブは、インポートコマンドとエクスポートコマンドを作成して保存します。保存されたジョブを識別して呼び出すためのパラメーターを指定します。この再呼び出しまたは再実行は、増分インポートで使用されます。増分インポートでは、更新された行をRDBMSテーブルからHDFSにインポートできます。
構文
以下は、Sqoopジョブを作成するための構文です。
$ sqoop job (generic-args) (job-args)
[-- [subtool-name] (subtool-args)]
$ sqoop-job (generic-args) (job-args)
[-- [subtool-name] (subtool-args)]
ジョブの作成(--create)
ここでは、という名前のジョブを作成しています myjob、RDBMSテーブルからHDFSにテーブルデータをインポートできます。次のコマンドを使用して、からデータをインポートするジョブを作成します。employee のテーブル db データベースをHDFSファイルに。
$ sqoop job --create myjob \
-- import \
--connect jdbc:mysql://localhost/db \
--username root \
--table employee --m 1
ジョブの確認(--list)
‘--list’引数は、保存されたジョブを確認するために使用されます。次のコマンドを使用して、保存されているSqoopジョブのリストを確認します。
$ sqoop job --list
保存されたジョブのリストが表示されます。
Available jobs:
myjob
ジョブの検査(--show)
‘--show’引数は、特定のジョブとその詳細を検査または検証するために使用されます。次のコマンドとサンプル出力は、呼び出されたジョブを検証するために使用されますmyjob。
$ sqoop job --show myjob
で使用されるツールとそのオプションが表示されます myjob。
Job: myjob
Tool: import Options:
----------------------------
direct.import = true
codegen.input.delimiters.record = 0
hdfs.append.dir = false
db.table = employee
...
incremental.last.value = 1206
...
ジョブの実行(--exec)
‘--exec’オプションは、保存されたジョブを実行するために使用されます。次のコマンドは、と呼ばれる保存されたジョブを実行するために使用されますmyjob。
$ sqoop job --exec myjob
次の出力が表示されます。
10/08/19 13:08:45 INFO tool.CodeGenTool: Beginning code generation
...
この章では、「codegen」ツールの重要性について説明します。オブジェクト指向アプリケーションの観点からは、すべてのデータベーステーブルには、オブジェクトを初期化するための「getter」メソッドと「setter」メソッドを含む1つのDAOクラスがあります。このツール(-codegen)は、DAOクラスを自動的に生成します。
テーブルスキーマ構造に基づいて、JavaでDAOクラスを生成します。Java定義は、インポートプロセスの一部としてインスタンス化されます。このツールの主な用途は、JavaがJavaコードを失ったかどうかを確認することです。その場合、フィールド間にデフォルトの区切り文字を使用して新しいバージョンのJavaを作成します。
構文
以下は、Sqoopcodegenコマンドの構文です。
$ sqoop codegen (generic-args) (codegen-args)
$ sqoop-codegen (generic-args) (codegen-args)
例
のJavaコードを生成する例を見てみましょう。 emp のテーブル userdb データベース。
次のコマンドを使用して、指定された例を実行します。
$ sqoop codegen \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp
コマンドが正常に実行されると、端末に次の出力が生成されます。
14/12/23 02:34:40 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/23 02:34:41 INFO tool.CodeGenTool: Beginning code generation
……………….
14/12/23 02:34:42 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
Note: /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/emp.java uses or
overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
14/12/23 02:34:47 INFO orm.CompilationManager: Writing jar file:
/tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/emp.jar
検証
出力を見てみましょう。太字のパスは、のJavaコードが存在する場所です。empテーブルが生成して保存します。次のコマンドを使用して、その場所にあるファイルを確認しましょう。
$ cd /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/
$ ls
emp.class
emp.jar
emp.java
詳細を確認したい場合は、 emp のテーブル userdb データベースと emp.java 次のディレクトリにあります
/ tmp / sqoop-hadoop / compile / 9a300a1f94899df4a9b10f9935ed9f91 /。
この章では、Sqoopの「eval」ツールの使用方法について説明します。これにより、ユーザーはそれぞれのデータベースサーバーに対してユーザー定義のクエリを実行し、コンソールで結果をプレビューできます。したがって、ユーザーは結果のテーブルデータがインポートされることを期待できます。evalを使用すると、DDLまたはDMLステートメントのいずれかである任意のタイプのSQLクエリを評価できます。
構文
Sqoop evalコマンドには、次の構文が使用されます。
$ sqoop eval (generic-args) (eval-args)
$ sqoop-eval (generic-args) (eval-args)
クエリ評価を選択します
evalツールを使用すると、あらゆるタイプのSQLクエリを評価できます。で制限された行を選択する例を見てみましょうemployee のテーブル dbデータベース。次のコマンドは、SQLクエリを使用して特定の例を評価するために使用されます。
$ sqoop eval \
--connect jdbc:mysql://localhost/db \
--username root \
--query “SELECT * FROM employee LIMIT 3”
コマンドが正常に実行されると、端末に次の出力が生成されます。
+------+--------------+-------------+-------------------+--------+
| Id | Name | Designation | Salary | Dept |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal | manager | 50000 | TP |
| 1202 | manisha | preader | 50000 | TP |
| 1203 | khalil | php dev | 30000 | AC |
+------+--------------+-------------+-------------------+--------+
クエリ評価の挿入
Sqoop evalツールは、SQLステートメントのモデリングと定義の両方に適用できます。つまり、挿入ステートメントにもevalを使用できます。次のコマンドを使用して、に新しい行を挿入します。employee のテーブル db データベース。
$ sqoop eval \
--connect jdbc:mysql://localhost/db \
--username root \
-e “INSERT INTO employee VALUES(1207,‘Raju’,‘UI dev’,15000,‘TP’)”
コマンドが正常に実行されると、更新された行のステータスがコンソールに表示されます。
または、MySQLコンソールでemployeeテーブルを確認できます。次のコマンドは、の行を確認するために使用されますemployee のテーブル db select 'クエリを使用したデータベース。
mysql>
mysql> use db;
mysql> SELECT * FROM employee;
+------+--------------+-------------+-------------------+--------+
| Id | Name | Designation | Salary | Dept |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal | manager | 50000 | TP |
| 1202 | manisha | preader | 50000 | TP |
| 1203 | khalil | php dev | 30000 | AC |
| 1204 | prasanth | php dev | 30000 | AC |
| 1205 | kranthi | admin | 20000 | TP |
| 1206 | satish p | grp des | 20000 | GR |
| 1207 | Raju | UI dev | 15000 | TP |
+------+--------------+-------------+-------------------+--------+
この章では、Sqoopを使用してデータベースを一覧表示する方法について説明します。Sqoopリストデータベースツールは、データベースサーバーに対して「SHOWDATABASES」クエリを解析して実行します。その後、サーバー上の現在のデータベースを一覧表示します。
構文
次の構文は、Sqooplist-databasesコマンドに使用されます。
$ sqoop list-databases (generic-args) (list-databases-args)
$ sqoop-list-databases (generic-args) (list-databases-args)
サンプルクエリ
次のコマンドは、MySQLデータベースサーバー内のすべてのデータベースを一覧表示するために使用されます。
$ sqoop list-databases \
--connect jdbc:mysql://localhost/ \
--username root
コマンドが正常に実行されると、MySQLデータベースサーバー内のデータベースのリストが次のように表示されます。
...
13/05/31 16:45:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
mysql
test
userdb
db
この章では、Sqoopを使用してMySQLデータベースサーバー内の特定のデータベースのテーブルを一覧表示する方法について説明します。Sqoop list-tablesツールは、特定のデータベースに対して「SHOWTABLES」クエリを解析して実行します。その後、データベース内の現在のテーブルを一覧表示します。
構文
次の構文は、Sqooplist-tablesコマンドに使用されます。
$ sqoop list-tables (generic-args) (list-tables-args)
$ sqoop-list-tables (generic-args) (list-tables-args)
サンプルクエリ
次のコマンドを使用して、内のすべてのテーブルを一覧表示します。 userdb MySQLデータベースサーバーのデータベース。
$ sqoop list-tables \
--connect jdbc:mysql://localhost/userdb \
--username root
コマンドが正常に実行されると、テーブルのリストが表示されます。 userdb 次のようなデータベース。
...
13/05/31 16:45:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
emp
emp_add
emp_contact
この章では、Sqoopを使用してMySQLデータベースサーバー内の特定のデータベースのテーブルを一覧表示する方法について説明します。Sqoop list-tablesツールは、特定のデータベースに対して「SHOWTABLES」クエリを解析して実行します。その後、データベース内の現在のテーブルを一覧表示します。
構文
次の構文は、Sqooplist-tablesコマンドに使用されます。
$ sqoop list-tables (generic-args) (list-tables-args)
$ sqoop-list-tables (generic-args) (list-tables-args)
サンプルクエリ
次のコマンドを使用して、内のすべてのテーブルを一覧表示します。 userdb MySQLデータベースサーバーのデータベース。
$ sqoop list-tables \
--connect jdbc:mysql://localhost/userdb \
--username root
コマンドが正常に実行されると、テーブルのリストが表示されます。 userdb 次のようなデータベース。
...
13/05/31 16:45:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
emp
emp_add
emp_contact