Apache Sqoopチュートリアル–HDFSとRDBMS間のデータのインポート/エクスポート



Apache Sqoopチュートリアル:Sqoopは、Hadoopとリレーショナルデータベース間でデータを転送するためのツールです。このブログでは、MySQLからのSooopのインポートとエクスポートについて説明しています。

このApacheSqoopチュートリアルを開始する前に、一歩後退しましょう。以前のブログで説明したように、データの取り込みの重要性を思い出してください。 Apache Flume 。現在、Apache Flumeは非構造化ソースのデータ取り込みツールであることがわかっていますが、組織は運用データをリレーショナルデータベースに保存しています。そのため、リレーショナルデータベースからデータをインポートおよびエクスポートできるツールが必要でした。これが、ApacheSqoopが誕生した理由です。 SqoopはHadoopと簡単に統合でき、HDFS上のリレーショナルデータベースから構造化データをダンプして、Hadoopのパワーを補完します。これが理由です、 ApacheSqoopとFlumeの十分な知識が必要です。

当初、SqoopはClouderaによって開発および保守されていました。その後、2011年7月23日に、Apacheによってインキュベートされました。 2012年4月、SqoopプロジェクトはApacheのトップレベルプロジェクトとして昇格しました。





このApacheFlumeチュートリアルブログでは、以下について説明します。



このApacheSqoopチュートリアルは、ApacheSqoopを紹介することから始めます。次に、ApacheSqoopを使用する利点を理解します。

Apache Sqoopチュートリアル:Sqoopの概要

ApacheSqoop-ApacheSqoopチュートリアル-Edureka一般に、アプリケーションはRDBMSを使用してリレーショナルデータベースと対話するため、リレーショナルデータベースはビッグデータを生成する最も重要なソースの1つになります。このようなデータは、リレーショナル構造のRDBサーバーに格納されます。ここで、ApacheSqoopは 、リレーショナルデータベースサーバーとHDFS間の実行可能な相互作用を提供します。

つまり、ApacheSqoopは 間でデータを転送するように設計されています HDFS (Hadoopストレージ)およびMySQL、Oracle RDB、SQLite、Teradata、Netezza、Postgresなどのリレーショナルデータベースサーバー。ApacheSqoopは、リレーショナルデータベースからHDFSにデータをインポートし、HDFSからリレーショナルデータベースにデータをエクスポートします。 Hadoopと、エンタープライズデータウェアハウス、リレーショナルデータベースなどの外部データストアとの間でバルクデータを効率的に転送します。



これがSqoopの名前の由来です–「 SQ L to Had 開いた &Hadoop toSQL」。

さらに、Sqoopは、外部データストアからHadoopエコシステムのツールにデータをインポートするために使用されます。 ハイブ HBase

さて、私たちが知っているように、ApacheSqoopとは何ですか。それでは、Apache Sqoopチュートリアルを進めて、Sqoopが組織で広く使用されている理由を理解しましょう。

Apache Sqoopチュートリアル:なぜSqoopなのか?

Hadoop開発者の場合、実際のゲームはデータがHDFSにロードされた後に開始されます。彼らは、HDFSに保存されているデータに隠されているさまざまな洞察を得るために、このデータをいじくり回しています。

したがって、この分析では、リレーショナルデータベース管理システムにあるデータをHDFSに転送する必要があります。書く仕事 リレーショナルデータベースからHDFSにデータをインポートおよびエクスポートするためのコードは面白くなく面倒です。ここで、Apache Sqoopが救助に来て、彼らの痛みを取り除きます。データのインポートとエクスポートのプロセスを自動化します。

Sqoopは、データをインポートおよびエクスポートするためのCLIを提供することにより、開発者の生活を楽にします。データベース認証、ソース、宛先、操作などの基本情報を提供するだけです。残りの部分はそれで処理されます。

Sqoopは、コマンドを内部でMapReduceタスクに変換し、HDFSを介して実行されます。 YARNフレームワークを使用してデータをインポートおよびエクスポートし、並列処理に加えてフォールトトレランスを提供します。

このSqoopチュートリアルブログで先に進むと、Sqoopの主要な機能を理解してから、ApacheSqoopアーキテクチャに移ります。

Apache Sqoopチュートリアル:Sqoopの主な機能

Sqoopは、次のような多くの顕著な機能を提供します。

  1. 全負荷 :Apache Sqoopは、1つのコマンドでテーブル全体をロードできます。 1つのコマンドを使用して、データベースからすべてのテーブルをロードすることもできます。
  2. 増分 負荷 :Apache Sqoopは、テーブルが更新されるたびにテーブルの一部をロードできる増分ロードの機能も提供します。
  3. 平行 インポート・エクスポート :Sqoopは、YARNフレームワークを使用してデータをインポートおよびエクスポートします。これにより、並列処理に加えてフォールトトレランスが提供されます。
  4. インポート 結果 SQL クエリ :SQLクエリから返された結果をHDFSにインポートすることもできます。
  5. 圧縮 :–compress引数を指定してdeflate(gzip)アルゴリズムを使用するか、–compression-codec引数を指定することにより、データを圧縮できます。圧縮テーブルをロードすることもできます Apache Hive
  6. コネクタ ために すべて メジャー RDBMS データベース :Apache Sqoopは、ほぼ全周をカバーする複数のRDBMSデータベース用のコネクタを提供します。
  7. Kerberos セキュリティ 統合 :Kerberosは、「チケット」に基づいて機能するコンピュータネットワーク認証プロトコルであり、安全でないネットワークを介して通信するノードが、安全な方法で相互にIDを証明できるようにします。 SqoopはKerberos認証をサポートしています。
  8. 負荷 データ 直接 HIVE / HBase :データを直接ロードできます Apache Hive 分析のために、またNoSQLデータベースであるHBaseにデータをダンプします。
  9. サポート ために 累積 :HDFSのディレクトリではなく、AccumuloにテーブルをインポートするようにSqoopに指示することもできます。

このアーキテクチャーは、ApacheSqoopにこれらの利点を提供するものです。これで、Apache Sqoopの機能がわかったので、先に進んでApacheSqoopのアーキテクチャと動作を理解しましょう。

Apache Sqoopチュートリアル:Sqoopアーキテクチャと作業

次の図を使用して、ApacheSqoopがどのように機能するかを理解しましょう。

インポートツールは、個々のテーブルをRDBMSからHDFSにインポートします。テーブルの各行は、HDFSではレコードとして扱われます。

Sqoopコマンドを送信すると、メインタスクはサブタスクに分割され、内部で個々のマップタスクによって処理されます。マップタスクはサブタスクであり、データの一部をHadoopエコシステムにインポートします。まとめると、すべてのマップタスクはデータ全体をインポートします。

エクスポートも同様に機能します。

エクスポートツールは、ファイルのセットをHDFSからRDBMSにエクスポートします。 Sqoopへの入力として指定されたファイルには、テーブルの行と呼ばれるレコードが含まれています。

ジョブを送信すると、HDFSからデータのチャンクを取得するマップタスクにマップされます。これらのチャンクは、構造化データの宛先にエクスポートされます。これらのエクスポートされたすべてのデータチャンクを組み合わせて、宛先でデータ全体を受け取ります。宛先は、ほとんどの場合、RDBMS(MYSQL / Oracle / SQL Server)です。

集約の場合、削減フェーズが必要です。ただし、Apache Sqoopはデータをインポートおよびエクスポートするだけであり、集計は実行しません。マップジョブは、ユーザーが定義した数に応じて複数のマッパーを起動します。 Sqoopインポートの場合、各マッパータスクには、インポートされるデータの一部が割り当てられます。 Sqoopは、入力データをマッパー間で均等に分散して、高いパフォーマンスを実現します。次に、各マッパーはJDBCを使用してデータベースとの接続を作成し、Sqoopによって割り当てられたデータの一部をフェッチし、CLIで提供された引数に基づいてHDFS、Hive、またはHBaseに書き込みます。

Apache Sqoopのアーキテクチャと動作について理解したところで、ApacheFlumeとApacheSqoopの違いを理解しましょう。

Apache Sqoopチュートリアル:FlumeとSqoop

FlumeとSqoopの主な違いは次のとおりです。

  • Flumeは、非構造化データまたは半構造化データのみをHDFSに取り込みます。
  • Sqoopは、構造化データをRDBMSまたはエンタープライズデータウェアハウスからHDFSに、またはその逆にインポートおよびエクスポートできます。

ここで、Apache Sqoopチュートリアルを進めて、ApacheSqoopコマンドを実行するときが来ました。

Javaで一時的な意味は何ですか

Apache Sqoopチュートリアル:Sqoopコマンド

  • Sqoop –IMPORTコマンド

Importコマンドは、リレーショナルデータベースからHDFSにテーブルをインポートするために使用されます。この例では、MySQLデータベースからHDFSにテーブルをインポートします。

下の画像でわかるように、HDFSにインポートするemployeesデータベースにemployeesテーブルがあります。

テーブルをインポートするためのコマンドは次のとおりです。

sqoop import --connect jdbc:mysql:// localhost / employees --username edureka --tableemployees

次の画像でわかるように、このコマンドを実行すると、マップタスクがバックエンドで実行されます。

コードが実行された後、データがインポートされているHDFSのWeb UI、つまりlocalhost:50070を確認できます。

  • Sqoop –ターゲットディレクトリを使用したIMPORTコマンド

以下のコマンドを使用して、HDFSの特定のディレクトリにテーブルをインポートすることもできます。

sqoop import --connect jdbc:mysql:// localhost / employees --username edureka --table employee --m 1 --target-dir / employee

Sqoopは、ほとんどのデータベースソースからデータを並行してインポートします。 -m プロパティは、実行するマッパーの数を指定するために使用されます。

Sqoopは、ほとんどのデータベースソースからデータを並行してインポートします。を使用して、インポートの実行に使用するマップタスク(並列プロセス)の数を指定できます。 -m または –num-mappers 引数。これらの各引数は、使用する並列度に対応する整数値を取ります。

ディレクトリに存在するファイルの数とは別に、マッパーの数を制御できます。エクスポートのパフォーマンスは、並列処理の程度によって異なります。デフォルトでは、Sqoopはエクスポートプロセスに4つのタスクを並行して使用します。これは最適ではない可能性があります。独自の特定の設定を試す必要があります。追加のタスクはより良い並行性を提供するかもしれませんが、データベースがインデックスの更新、トリガーの呼び出しなどですでにボトルネックになっている場合、追加の負荷はパフォーマンスを低下させる可能性があります。

下の画像で、マッパータスクの数が1であることがわかります。

MySQLテーブルのインポート中に作成されるファイルの数は、作成されるマッパーの数と同じです。

  • Sqoop –Where句を使用したIMPORTコマンド

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

sqoop import --connect jdbc:mysql:// localhost / employees --username edureka --table employees --m 3 --where'emp_no&gt 49000 '--target-dir / Latest_Employees

  • Sqoop –インクリメンタルインポート

Sqoopは、以前にインポートされた行のセットよりも新しい行のみを取得するために使用できる増分インポートモードを提供します。 Sqoopは、次の2種類の増分インポートをサポートしています。 追加 そして 最終更新日 。 –incremental引数を使用して、実行する増分インポートのタイプを指定できます。

指定する必要があります 追加 行ID値の増加に伴って新しい行が継続的に追加されるテーブルをインポートする場合のモード。行のIDを含む列を次のように指定します –check-column 。 Sqoopは、チェック列の値がで指定された値より大きい行をインポートします –最後の値

Sqoopでサポートされている代替のテーブル更新戦略は 最終更新日 モード。これは、ソーステーブルの行が更新される可能性がある場合に使用する必要があり、そのような更新のたびに、最後に変更された列の値が現在のタイムスタンプに設定されます。

後続のインポートを実行するときは、次のように指定する必要があります –最後の値 このようにして、新しいデータまたは更新されたデータのみをインポートするようにします。これは、保存されたジョブとして増分インポートを作成することによって自動的に処理されます。これは、定期的な増分インポートを実行するための推奨メカニズムです。

まず、HDFSで更新される新しい行を挿入します。

インクリメンタルインポートのコマンドは次のとおりです。

sqoop import --connect jdbc:mysql:// localhost / employees --username edureka --table employee --target-dir / Later_Employees --incremental append --check-column emp_no --last-value 499999

下の画像でわかるように、更新されたデータで新しいファイルが作成されます。

  • Sqoop –すべてのテーブルをインポートする

RDBMSデータベースサーバーからHDFSにすべてのテーブルをインポートできます。各テーブルデータは個別のディレクトリに保存され、ディレクトリ名はテーブル名と同じです。そのデータベース内のすべてのテーブルに主キーフィールドが必要です。データベースからすべてのテーブルをインポートするためのコマンドは次のとおりです。

sqoop import-all-tables --connect jdbc:mysql:// localhost / employees --username edureka

  • Sqoop –データベースのリスト

Sqoopを使用して、リレーショナルデータベースに存在するデータベースを一覧表示できます。 Sqoopリストデータベースツールは、データベースサーバーに対して「SHOWDATABASES」クエリを解析して実行します。データベースを一覧表示するためのコマンドは次のとおりです。

sqoop list-databases --connect jdbc:mysql:// localhost / --username edureka

  • Sqoop –リストテーブル

Sqoopを使用して、MySQLデータベースサーバー内の特定のデータベースのテーブルを一覧表示することもできます。 Sqoop list-tablesツールは、「SHOWTABLES」クエリを解析して実行します。テーブルを一覧表示するためのコマンドはデータベースです。

sqoop list-tables --connect jdbc:mysql:// localhost / employees --username edureka

  • Sqoop –エクスポート

上で説明したように、HDFSからRDBMSデータベースにデータをエクスポートすることもできます。ターゲットテーブルは、ターゲットデータベースに存在する必要があります。データはHDFSにレコードとして保存されます。これらのレコードは、ユーザー指定の区切り文字で読み取られ、解析され、区切られます。デフォルトの操作では、INSERTステートメントを使用して、入力ファイルからデータベーステーブルにすべてのレコードを挿入します。更新モードでは、Sqoopは既存のレコードをデータベースに置き換えるUPDATEステートメントを生成します。

したがって、最初に空のテーブルを作成し、そこにデータをエクスポートします。

javatostringの使用方法

HDFSからリレーショナルデータベースにデータをエクスポートするコマンドは次のとおりです。

sqoop export --connect jdbc:mysql:// localhost / employees --username edureka --table emp --export-dir / user / edureka / employee

  • Sqoop-Codegen

オブジェクト指向アプリケーションでは、すべてのデータベーステーブルに、オブジェクトを初期化するための「getter」メソッドと「setter」メソッドを含む1つのデータアクセスオブジェクトクラスがあります。 CodegenはDAOクラスを自動的に生成します。テーブルスキーマ構造に基づいて、JavaでDAOクラスを生成します。

Javaコードを生成するためのコマンドは次のとおりです。

sqoop codegen --connect jdbc:mysql:// localhost / employees --username edureka --tableemployees

上の画像で、コードが生成されたパスを確認できます。パスに移動して、作成されたファイルを確認しましょう。

このブログがあなたにとって有益で付加価値があることを願っています。あなたがもっと学ぶことに興味があるなら、あなたはこれを通過することができます ビッグデータと、Hadoopがビッグデータに関連する課題をどのように解決しているかについて説明します。

Apache Sqoopを理解したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaビッグデータHadoop認定トレーニングコースは、小売、ソーシャルメディア、航空、観光、金融の各ドメインでリアルタイムのユースケースを使用して、学習者がHDFS、Yarn、MapReduce、Pig、Hive、HBase、Oozie、Flume、Sqoopのエキスパートになるのに役立ちます。

質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。