Sqoop-quick-guide
Sqoop-はじめに
従来のアプリケーション管理システム、つまり、RDBMSを使用したアプリケーションとリレーショナルデータベースの相互作用は、ビッグデータを生成するソースの1つです。 RDBMSによって生成されるこのようなビッグデータは、リレーショナルデータベース構造のリレーショナル*データベースサーバー*に保存されます。
MapReduce、Hive、HBase、Cassandra、Pigなどのビッグデータストレージおよびアナライザー Hadoopエコシステムの一部が姿を現したため、リレーショナルデータベースサーバーと対話して、そこにあるビッグデータをインポートおよびエクスポートするためのツールが必要でした。 ここで、Sqoopは、Hadoopエコシステムで、リレーショナルデータベースサーバーとHadoopのHDFSの間の実行可能な相互作用を提供します。
Sqoopは、Hadoopとリレーショナルデータベースサーバー間でデータを転送するために設計されたツールです。 MySQL、OracleなどのリレーショナルデータベースからHadoop HDFSへのデータのインポート、およびHadoopファイルシステムからリレーショナルデータベースへのエクスポートに使用されます。 Apache Software Foundationによって提供されます。
Sqoopの仕組み
次の画像は、Sqoopのワークフローを説明しています。
Sqoopインポート
インポートツールは、RDBMSからHDFSに個々のテーブルをインポートします。 テーブルの各行は、HDFSのレコードとして扱われます。 すべてのレコードは、テキストファイルにテキストデータとして保存されるか、Avroおよびシーケンスファイルにバイナリデータとして保存されます。
Sqoopエクスポート
エクスポートツールは、一連のファイルをHDFSからRDBMSにエクスポートします。 Sqoopへの入力として指定されたファイルには、テーブルの行と呼ばれるレコードが含まれています。 これらは読み取られ、解析されて一連のレコードになり、ユーザー指定の区切り文字で区切られます。
Sqoop-インストール
SqoopはHadoopのサブプロジェクトであるため、Linuxオペレーティングシステムでのみ機能します。 以下の手順に従って、システムにSqoopをインストールします。
ステップ1:JAVAインストールの確認
Sqoopをインストールする前に、システムにJavaをインストールする必要があります。 次のコマンドを使用してJavaのインストールを確認しましょう-
Javaがすでにシステムにインストールされている場合、次の応答が表示されます-
Javaがシステムにインストールされていない場合は、以下の手順に従ってください。
Javaのインストール
以下に示す簡単な手順に従って、システムにJavaをインストールします。
ステップ1
次のhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads- [リンク]にアクセスして、Java(JDK <最新バージョン>-X64.tar.gz)をダウンロードします。
次に、jdk-7u71-linux-x64.tar.gzがシステムにダウンロードされます。
ステップ2
通常、ダウンロードしたJavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用してjdk-7u71-linux-x64.gzファイルを抽出します。
ステップ3
Javaをすべてのユーザーが利用できるようにするには、Javaを「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。
ステップ4
PATHおよびJAVA_HOME変数を設定するには、次のコマンドを〜/.bashrcファイルに追加します。
すべての変更を現在実行中のシステムに適用します。
ステップ5
次のコマンドを使用して、Javaの代替を構成します-
上記で説明したように、ターミナルからコマンド java -version を使用してインストールを検証します。
ステップ2:Hadoopインストールの検証
Sqoopをインストールする前に、Hadoopをシステムにインストールする必要があります。 次のコマンドを使用してHadoopのインストールを確認しましょう-
Hadoopが既にシステムにインストールされている場合、次の応答が表示されます-
Hadoopがシステムにインストールされていない場合は、次の手順に進みます-
Hadoopをダウンロードする
次のコマンドを使用して、Apache Software FoundationからHadoop 2.4.1をダウンロードして抽出します。
擬似分散モードでのHadoopのインストール
以下の手順に従って、Hadoop 2.4.1を擬似分散モードでインストールします。
ステップ1:Hadoopのセットアップ
〜/.bashrcファイルに次のコマンドを追加することにより、Hadoop環境変数を設定できます。
次に、すべての変更を現在実行中のシステムに適用します。
ステップ2:Hadoopの構成
すべてのHadoop設定ファイルは、「$ HADOOP_HOME/etc/hadoop」の場所にあります。 Hadoopインフラストラクチャに応じて、これらの構成ファイルに適切な変更を加える必要があります。
javaを使用してHadoopプログラムを開発するには、JAVA_HOME値をシステム内のjavaの場所に置き換えて、 hadoop-env.sh ファイルのjava環境変数をリセットする必要があります。
以下に、Hadoopを構成するために編集する必要があるファイルのリストを示します。
core-site.xmlファイルには、Hadoopインスタンスに使用されるポート番号、ファイルシステムに割り当てられたメモリ、データを保存するためのメモリ制限、読み取り/書き込みバッファのサイズなどの情報が含まれています。
core-site.xmlを開き、<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
hdfs-site.xmlファイルには、レプリケーションデータの値、namenodeパス、ローカルファイルシステムのdatanodeパスなどの情報が含まれています。 これは、Hadoopインフラストラクチャを保存する場所を意味します。
次のデータを想定します。
このファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
注-上記のファイルでは、すべてのプロパティ値はユーザー定義であり、Hadoopインフラストラクチャに応じて変更できます。
このファイルは、Hadoopに糸を設定するために使用されます。 yarn-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。 デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。 まず、次のコマンドを使用して、mapred-site.xml.templateからmapred-site.xmlファイルにファイルをコピーする必要があります。
mapred-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
Hadoopインストールの検証
次の手順を使用して、Hadoopのインストールを確認します。
ステップ1:ノードのセットアップに名前を付ける
次のようにコマンド「hdfs namenode -format」を使用して、namenodeをセットアップします。
期待される結果は次のとおりです。
ステップ2:Hadoop dfの検証
次のコマンドは、dfsを開始するために使用されます。 このコマンドを実行すると、Hadoopファイルシステムが起動します。
予想される出力は次のとおりです-
ステップ3:糸スクリプトの検証
次のコマンドを使用して、糸スクリプトを開始します。 このコマンドを実行すると、糸デーモンが起動します。
予想される出力は次のとおりです-
ステップ4:ブラウザーでHadoopにアクセスする
Hadoopにアクセスするためのデフォルトのポート番号は50070です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。
次の画像は、Hadoopブラウザーを示しています。
ステップ5:クラスターのすべてのアプリケーションを確認する
クラスターのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。 このサービスにアクセスするには、次のURLを使用してください。
次の画像は、Hadoopクラスターブラウザーを示しています。
ステップ3:Sqoopをダウンロードする
Sqoopの最新バージョンは、次のhttps://sqoop.apache.org [link]からダウンロードできます。このチュートリアルでは、バージョン1.4.5、つまり sqoop-1.4.5.bin__hadoop-2.0.4を使用しています。 -alpha.tar.gz 。
ステップ4:Sqoopのインストール
次のコマンドを使用して、Sqoop tarボールを抽出し、「/usr/lib/sqoop」ディレクトリに移動します。
ステップ5:bashrcの構成
次の行を〜/*。bashrc *ファイルに追加して、Sqoop環境を設定する必要があります-
〜/*。bashrc *ファイルを実行するには、次のコマンドを使用します。
ステップ6:Sqoopの構成
HadoopでSqoopを設定するには、 $ SQOOP_HOME/conf ディレクトリにある sqoop-env.sh ファイルを編集する必要があります。 まず、Sqoop configディレクトリにリダイレクトし、次のコマンドを使用してテンプレートファイルをコピーします-
ステップ7:mysql-connector-javaをダウンロードして構成する
次のhttp://ftp.ntu.edu.tw/MySQL/Downloads/Connector-J/.[link]から mysql-connector-java-5.1.30.tar.gz ファイルをダウンロードできます。
次のコマンドを使用して、mysql-connector-java tarballを抽出し、 mysql-connector-java-5.1.30-bin.jar を/usr/lib/sqoop/libディレクトリに移動します。
ステップ8:Sqoopの検証
次のコマンドを使用して、Sqoopバージョンを確認します。
期待される出力-
Sqoopのインストールが完了しました。
Sqoop-インポート
この章では、MySQLデータベースからHadoop HDFSにデータをインポートする方法について説明します。 「インポートツール」は、RDBMSからHDFSに個々のテーブルをインポートします。 テーブルの各行は、HDFSのレコードとして扱われます。 すべてのレコードは、テキストファイルにテキストデータとして保存されるか、Avroおよびシーケンスファイルにバイナリデータとして保存されます。
構文
次の構文は、HDFSにデータをインポートするために使用されます。
例
MySQLデータベースサーバーのuserdbというデータベースにある、 emp 、 emp_add 、および emp_contact という名前の3つのテーブルの例を見てみましょう。
3つのテーブルとそのデータは次のとおりです。
emp:
id | name | deg | salary | dept |
---|---|---|---|---|
1201 | gopal | manager | 50,000 | TP |
1202 | manisha | Proof reader | 50,000 | TP |
1203 | khalil | php dev | 30,000 | AC |
1204 | prasanth | php dev | 30,000 | AC |
1204 | kranthi | admin | 20,000 | TP |
emp_add:
id | hno | street | city |
---|---|---|---|
1201 | 288A | vgiri | jublee |
1202 | 108I | aoc | sec-bad |
1203 | 144Z | pgutta | hyd |
1204 | 78B | old city | sec-bad |
1205 | 720X | hitec | sec-bad |
emp_contact:
id | phno | |
---|---|---|
1201 | 2356742 | gopal@tp.com |
1202 | 1661663 | manisha@tp.com |
1203 | 8887776 | khalil@ac.com |
1204 | 9988774 | prasanth@ac.com |
1205 | 1231231 | kranthi@tp.com |
テーブルのインポート
Sqoopツール「インポート」を使用して、テーブルからテーブルデータをテキストファイルまたはバイナリファイルとしてHadoopファイルシステムにインポートします。
次のコマンドを使用して、 emp テーブルをMySQLデータベースサーバーからHDFSにインポートします。
正常に実行されると、次の出力が得られます。
HDFSでインポートされたデータを確認するには、次のコマンドを使用します。
ターゲットディレクトリへのインポート
Sqoopインポートツールを使用して、テーブルデータをHDFSにインポートするときにターゲットディレクトリを指定できます。
以下は、Sqoopインポートコマンドのオプションとしてターゲットディレクトリを指定する構文です。
次のコマンドを使用して、 emp_add テーブルデータを「/queryresult」ディレクトリにインポートします。
次のコマンドは、 emp_add テーブルの/queryresultディレクトリにインポートされたデータを確認するために使用されます。
カンマ(、)で区切られたフィールドを持つemp_addテーブルデータが表示されます。
テーブルデータのサブセットのインポート
Sqoopインポートツールの「where」句を使用して、テーブルのサブセットをインポートできます。 各データベースサーバーで対応するSQLクエリを実行し、結果をHDFSのターゲットディレクトリに格納します。
where句の構文は次のとおりです。
次のコマンドは、 emp_add テーブルデータのサブセットをインポートするために使用されます。 サブセットクエリは、セカンドラバード市に住む従業員IDと住所を取得することです。
次のコマンドを使用して、 emp_add テーブルから/wherequeryディレクトリにインポートされたデータを確認します。
コンマ(、)で区切られたフィールドを持つ emp_add テーブルデータが表示されます。
増分インポート
増分インポートは、テーブルに新しく追加された行のみをインポートする手法です。 増分インポートを実行するには、「増分」、「チェック列」、「最終値」オプションを追加する必要があります。
次の構文は、Sqoop importコマンドの増分オプションに使用されます。
次のコマンドを使用して、 emp テーブルで増分インポートを実行します。
次のコマンドは、 emp テーブルからHDFS emp/ディレクトリにインポートされたデータを確認するために使用されます。
コンマ(、)で区切られたフィールドを持つ emp テーブルデータが表示されます。
次のコマンドを使用して、 emp テーブルから変更または新しく追加された行を表示します。
コンマ(、)で区切られたフィールドを使用して、 emp テーブルに新しく追加された行を表示します。
Sqoop-すべてのテーブルのインポート
この章では、RDBMSデータベースサーバーからHDFSにすべてのテーブルをインポートする方法について説明します。 各テーブルデータは個別のディレクトリに格納され、ディレクトリ名はテーブル名と同じです。
構文
すべてのテーブルをインポートするには、次の構文を使用します。
例
次のコマンドを使用して、 userdb データベースからすべてのテーブルをインポートします。
注-import-all-tablesを使用している場合、そのデータベース内のすべてのテーブルに主キーフィールドが必要です。
次のコマンドは、HDFSのuserdbデータベースに対するすべてのテーブルデータを確認するために使用されます。
userdbデータベース内のテーブル名のリストがディレクトリとして表示されます。
出力
Sqoop-エクスポート
この章では、HDFSからRDBMSデータベースにデータをエクスポートする方法について説明します。 ターゲットテーブルは、ターゲットデータベースに存在する必要があります。 Sqoopへの入力として提供されるファイルには、テーブル内の行と呼ばれるレコードが含まれています。 これらは読み取られ、解析されて一連のレコードになり、ユーザー指定の区切り文字で区切られます。
デフォルトの操作では、INSERTステートメントを使用して、入力ファイルのすべてのレコードをデータベーステーブルに挿入します。 更新モードでは、Sqoopは既存のレコードをデータベースに置き換えるUPDATEステートメントを生成します。
構文
exportコマンドの構文は次のとおりです。
例
HDFSのファイルにある従業員データの例を見てみましょう。 従業員データは、HDFSの「emp/」ディレクトリの emp_data ファイルで入手できます。 emp_data は次のとおりです。
エクスポートするテーブルは手動で作成し、エクスポートする必要のあるデータベースに存在することが必須です。
次のクエリを使用して、mysqlコマンドラインでテーブル「従業員」を作成します。
次のコマンドを使用して、テーブルデータ(HDFSの emp_data ファイル内)をMysqlデータベースサーバーのdbデータベースの従業員テーブルにエクスポートします。
次のコマンドを使用して、mysqlコマンドラインのテーブルを確認します。
指定されたデータが正常に保存された場合、指定された従業員データの次の表を見つけることができます。
Sqoop-ジョブ
この章では、Sqoopジョブを作成および管理する方法について説明します。 Sqoopジョブは、インポートコマンドとエクスポートコマンドを作成して保存します。 保存されたジョブを識別して呼び出すためのパラメーターを指定します。 この再呼び出しまたは再実行は増分インポートで使用され、更新された行をRDBMSテーブルからHDFSにインポートできます。
構文
以下は、Sqoopジョブを作成するための構文です。
ジョブの作成(-作成)
ここでは、RDBMSテーブルからHDFSにテーブルデータをインポートできる myjob という名前のジョブを作成しています。 次のコマンドは、 db データベースの employee テーブルからHDFSファイルにデータをインポートするジョブを作成するために使用されます。
検証ジョブ(--list)
保存されたジョブのリストが表示されます。
ジョブの検査(--show)
ジョブの実行(--exec)
次の出力が表示されます。
Sqoop-コード生成
この章では、「codegen」ツールの重要性について説明します。 オブジェクト指向アプリケーションの観点から、すべてのデータベーステーブルには、オブジェクトを初期化する「getter」および「setter」メソッドを含む1つのDAOクラスがあります。 このツール(-codegen)は、DAOクラスを自動的に生成します。
テーブルスキーマ構造に基づいて、JavaでDAOクラスを生成します。 Java定義は、インポートプロセスの一部としてインスタンス化されます。 このツールの主な使用法は、JavaがJavaコードを失ったかどうかを確認することです。 その場合、フィールド間のデフォルトの区切り文字を使用して新しいバージョンのJavaが作成されます。
構文
以下は、Sqoop codegenコマンドの構文です。
例
次のコマンドを使用して、指定された例を実行します。
コマンドが正常に実行されると、端末に次の出力が生成されます。
検証
出力を見てみましょう。 太字のパスは、 emp テーブルのJavaコードが生成および保存する場所です。 次のコマンドを使用して、その場所のファイルを確認します。
詳細に検証する場合は、 userdb データベースの emp テーブルと次のディレクトリの emp.java を比較します
/tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/。
Sqoop-評価
この章では、Sqoopの「評価」ツールの使用方法について説明します。 ユーザーは、各データベースサーバーに対してユーザー定義のクエリを実行し、コンソールで結果をプレビューできます。 したがって、ユーザーは結果の表データがインポートされることを期待できます。 evalを使用して、DDLまたはDMLステートメントのいずれかである可能性がある任意のタイプのSQLクエリを評価できます。
構文
次の構文は、Sqoop evalコマンドに使用されます。
クエリ評価を選択
evalツールを使用して、あらゆるタイプのSQLクエリを評価できます。 db データベースの employee テーブルで制限された行を選択する例を見てみましょう。 次のコマンドは、SQLクエリを使用して特定の例を評価するために使用されます。
コマンドが正常に実行されると、端末に次の出力が生成されます。
クエリ評価の挿入
Sqoop evalツールは、SQLステートメントのモデリングと定義の両方に適用できます。 つまり、挿入ステートメントにもevalを使用できます。 次のコマンドを使用して、 db データベースの employee テーブルに新しい行を挿入します。
コマンドが正常に実行されると、更新された行のステータスがコンソールに表示されます。
または、MySQLコンソールで従業員テーブルを確認できます。 次のコマンドは、selectクエリを使用して、 db データベースの employee テーブルの行を確認するために使用されます。
Sqoop-データベースのリスト
この章では、Sqoopを使用してデータベースをリストする方法について説明します。 Sqoopリストデータベースツールは、データベースサーバーに対して「SHOW DATABASES」クエリを解析して実行します。 その後、サーバー上の現在のデータベースをリストします。
構文
次の構文は、Sqoop list-databasesコマンドに使用されます。
サンプルクエリ
次のコマンドを使用して、MySQLデータベースサーバー内のすべてのデータベースを一覧表示します。
コマンドが正常に実行されると、MySQLデータベースサーバー内のデータベースのリストが次のように表示されます。
Sqoop-リストテーブル
この章では、Sqoopを使用して、MySQLデータベースサーバー内の特定のデータベースのテーブルをリストする方法について説明します。 Sqoopリストテーブルツールは、特定のデータベースに対して「SHOW TABLES」クエリを解析して実行します。 その後、データベース内の現在のテーブルをリストします。
構文
次の構文は、Sqoop list-tablesコマンドに使用されます。
サンプルクエリ
次のコマンドは、MySQLデータベースサーバーの userdb データベース内のすべてのテーブルを一覧表示するために使用されます。
コマンドが正常に実行されると、次のように userdb データベース内のテーブルのリストが表示されます。