Azure への Apache Sqoop の移行

Azure HDInsight
Azure Cosmos DB
Azure Data Lake Storage
Azure Synapse Analytics
Azure Stream Analytics

Apache Sqoop は、Apache Hadoop クラスターとリレーショナル データベースの間でデータを転送するためツールです。 これにはコマンドライン インターフェイスがあります。

Sqoop を使用すると、MySQL、PostgreSQL、Oracle、SQL Server などのリレーショナル データベースから HDFS にデータをインポートし、HDFS のデータをそのようなデータベースにエクスポートできます。 Sqoop では、MapReduce と Apache Hive を使用して Hadoop 上のデータを変換できます。 高度な機能には、増分読み込み、SQL を使用した書式設定、データセットの更新などがあります。 Sqoop は並列で動作し、高速なデータ転送を実現します。

注意

Sqoop プロジェクトは廃止されました。 Sqoop は 2021 年 6 月に Apache Attic に移動されました。 Web サイト、ダウンロード、イシュー トラッカーは引き続きすべて使用できます。 詳細については、Apache Attic の Apache Sqoop を参照してください。

Apache®、Apache Spark®Apache Hadoop®Apache HBaseApache HiveApache Ranger®Apache Storm®Apache Sqoop®Apache Kafka®、および炎のロゴは、Apache Software Foundation の米国およびその他の国における登録商標または商標です。 これらのマークを使用することが、Apache Software Foundation による保証を意味するものではありません。

Sqoop のアーキテクチャとコンポーネント

Sqoop には、Sqoop1 と Sqoop2 の 2 つのバージョンがあります。 Sqoop1 は単純なクライアント ツールですが、Sqoop2 にはクライアント/サーバー アーキテクチャがあります。 これらは互いに互換性がないため、使用方法が異なります。 Sqoop2 は機能が完全ではなく、運用環境へのデプロイを目的としたものではありません。

Sqoop1 のアーキテクチャ

Sqoop1 のアーキテクチャの図。

Sqoop1 のインポートとエクスポート

  • [インポート]

    リレーショナル データベースからデータを読み取り、HDFS にデータを出力します。 リレーショナル データベースのテーブル内の各レコードは、HDFS に 1 行として出力されます。 HDFS に書き込むことができるファイル形式は、テキスト、SequenceFiles、Avro です。

  • エクスポート

    HDFS からデータを読み取り、リレーショナル データベースに転送します。 ターゲット リレーショナル データベースでは、挿入と更新の両方がサポートされます。

Sqoop2 のアーキテクチャ

Sqoop2 のアーキテクチャの図。

  • Sqoop サーバー

    Sqoop クライアントのエントリ ポイントを提供します。

  • Sqoop クライアント

    Sqoop サーバーとやり取りします。 クライアントは、サーバーと通信できれば、任意のノードに配置できます。 クライアントはサーバーとの通信のみを必要とするため、MapReduce と同様に設定する必要はありません。

オンプレミスの Sqoop の課題

オンプレミスの Sqoop デプロイの一般的な課題を次に示します。

  • ハードウェアとデータセンターの容量によっては、スケーリングが困難な場合があります。
  • 必要に応じて簡単にスケーリングすることはできません。
  • 古くなったインフラストラクチャのサポートが終了すると、置き換えとアップグレードを強制される可能性があります。
  • 提供されるネイティブ ツールがありません。
    • コストの透明性
    • 監視
    • DevOps
    • オートメーション

考慮事項

  • Sqoop を Azure に移行し、データ ソースをオンプレミスに残す場合は、その接続性を考慮する必要があります。 Azure と既存のオンプレミス ネットワークの間でインターネット経由で VPN 接続を確立するか、Azure ExpressRoute を使用してプライベート接続を確立することができます。
  • Sqoop を Azure HDInsight に移行する場合は、Sqoop のバージョンを考慮してください。 HDInsight では Sqoop1 のみがサポートされるため、オンプレミス環境で Sqoop2 を使用している場合は、HDInsight 上の Sqoop1 に置き換えるか、Sqoop2 を独立した状態にしておく必要があります。
  • Sqoop を Azure Data Factory に移行する場合は、データ ファイルの形式を考慮する必要があります。 Data Factory では、SequenceFile 形式はサポートされません。 Sqoop の実装において SequenceFile 形式でデータをインポートする場合、サポートがないことが問題になる可能性があります。 詳細については、「ファイル形式」を参照してください。

移行のアプローチ

Azure には、Apache Sqoop のいくつかの移行ターゲットがあります。 要件と製品の機能に応じて、Azure IaaS 仮想マシン (VM)、Azure HDInsight、Azure Data Factory を選択できます。

移行ターゲットを選択するための決定チャートを次に示します。

Azure Apache Sqoop の移行ターゲットを選択するための決定チャートの図。

以下のセクションでは、移行ターゲットについて説明します。

Azure IaaS へのリフト アンド シフト移行

オンプレミスの Sqoop の移行先として Azure IaaS VM を選択した場合は、リフト アンド シフト移行を実行できます。 完全に制御可能な環境を作成するには、同じバージョンの Sqoop を使用します。 このため、Sqoop ソフトウェアを変更する必要はありません。 Sqoop は Hadoop クラスターと連携して動作し、通常は Hadoop クラスターと共に移行されます。 次の記事は、Hadoop クラスターのリフト アンド シフト移行のガイドです。 移行するサービスに該当する記事を選択します。

移行の準備

移行の準備を行うには、移行を計画して、ネットワーク接続を確立します。

移行の計画

オンプレミスの Sqoop の移行を準備するために、次の情報を収集します。 この情報は、移行先の仮想マシンのサイズを決定し、ソフトウェア コンポーネントとネットワーク構成を計画するのに役立ちます。

Item バックグラウンド
現在のホストのサイズ Sqoop クライアントまたはサーバーが実行されているホストまたは仮想マシンの CPU、メモリ、ディスク、およびその他のコンポーネントに関する情報を取得します。 この情報は、Azure 仮想マシンに必要な基本サイズを推定するために使用します。
ホストとアプリケーションのメトリック Sqoop クライアントを実行するマシンのリソース使用状況情報 (CPU、メモリ、ディスク、およびその他のコンポーネント) を取得し、実際に使用されるリソースを見積もります。 ホストに割り当てられているリソースよりも少ないリソースが使用されている場合は、Azure への移行時にダウンサイズを検討してください。 必要なリソースの量を確認したら、「Azure の仮想マシンのサイズ」を参照して、移行する仮想マシンの種類を選択します。
Sqoop のバージョン オンプレミスの Sqoop のバージョンを確認して、Azure 仮想マシンにインストールする Sqoop のバージョンを決定します。 Cloudera や Hortonworks などのディストリビューションを使用している場合、コンポーネントのバージョンはそのディストリビューションのバージョンによって異なります。
ジョブとスクリプトの実行 Sqoop を実行するジョブと、それらをスケジュールする方法を確認します。 ジョブと方法は移行の候補です。
接続するデータベース Sqoop ジョブのインポートおよびエクスポート コマンドで指定される、Sqoop が接続するデータベースを確認します。 それらを確認したら、Sqoop を Azure 仮想マシンに移行した後に、それらのデータベースに接続できるかどうかを確認する必要があります。 接続するデータベースの一部がまだオンプレミスにある場合は、オンプレミスと Azure の間のネットワーク接続が必要です。 詳細については、「ネットワーク接続の確立」セクションを参照してください。
プラグイン 使用する Sqoop プラグインを確認し、それらを移行できるかどうかを判断します。
高可用性、ビジネス継続性、ディザスター リカバリー オンプレミスで使用しているトラブルシューティング手法を Azure で使用できるかどうかを判断します。 たとえば、2 つのノードにアクティブ/スタンバイ構成がある場合は、Sqoop クライアント用に同じ構成を持つ 2 つの Azure 仮想マシンを準備します。 ディザスター リカバリーを構成する場合も同様です。
ネットワーク接続の確立

接続するデータベースの一部をオンプレミスに残した場合は、オンプレミスと Azure の間のネットワーク接続が必要です。

オンプレミスとプライベート ネットワーク上の Azure を接続するには、主に次の 2 つのオプションがあります。

  • VPN Gateway

    Azure VPN Gateway を使用すると、暗号化されたトラフィックを Azure 仮想ネットワークとオンプレミスの場所の間でパブリック インターネット経由で送信できます。 この手法は安価でセットアップが簡単です。 ただし、インターネット経由の暗号化された接続であるため、通信の帯域幅は保証されません。 帯域幅を保証する必要がある場合は、2 番目のオプションである ExpressRoute を選択する必要があります。 VPN オプションの詳細については、「VPN Gateway とは」と「VPN Gateway の設計」を参照してください。

  • ExpressRoute

    ExpressRoute では、接続プロバイダーによって提供されるプライベート接続を使用して、オンプレミス ネットワークを Azure または Microsoft 365 に接続できます。 ExpressRoute はパブリック インターネットを経由しないため、インターネット経由の接続よりも安全で信頼性が高く、一貫した待機時間になります。 さらに、購入する回線の帯域幅オプションによって、安定した待機時間が保証されます。 詳細については、「Azure ExpressRoute とは」を参照してください。

これらのプライベート接続の方法でニーズが満たされない場合は、移行先として Azure Data Factory を検討してください。 Data Factory のセルフホステッド統合ランタイムを使用すると、プライベート ネットワークを構成しなくても、オンプレミスから Azure にデータを転送できます。

データと設定を移行する

オンプレミスの Sqoop を Azure 仮想マシンに移行する場合は、次のデータと設定を含めます。

  • Sqoop 構成ファイル: 環境によって異なりますが、多くの場合、次のファイルが含まれます。

    • sqoop-site.xml
    • sqoop-env.xml
    • password-file
    • oraoop-site.xml、Oraoopを使用する場合
  • 保存されたジョブ: sqoop job --create コマンドを使用して Sqoop メタストアにジョブを保存した場合は、それらを移行する必要があります。 メタストアの保存先は、sqoop-site.xml で定義されます。 共有メタストアが設定されていない場合は、メタストアを実行するユーザーのホーム ディレクトリの .sqoop サブディレクトリで、保存されたジョブを探します。

    次のコマンドを使用すると、保存されたジョブに関する情報を表示できます。

    • 保存されたジョブの一覧を取得する:

      sqoop job --list

    • 保存されたジョブのパラメーターを表示する

      sqoop job --show <job-id>

  • スクリプト: Sqoop を実行するスクリプト ファイルがある場合は、それらを移行する必要があります。

  • スケジューラ: Sqoop の実行をスケジュールする場合は、Linux の cron ジョブやジョブ管理ツールなど、そのスケジューラを確認する必要があります。 その後、スケジューラを Azure に移行できるかどうかを検討する必要があります。

  • プラグイン: Sqoop でカスタム プラグイン (外部データベースへのコネクタなど) を使用している場合は、それらを移行する必要があります。 パッチ ファイルを作成した場合は、移行された Sqoop にパッチを適用します。

HDInsight への移行

HDInsight では、Apache Hadoop コンポーネントと HDInsight プラットフォームが、クラスター上にデプロイされるパッケージにバンドルされます。 Sqoop 自体を Azure に移行する代わりに、HDInsight クラスターで Sqoop を実行する方が一般的です。 HDInsight を使用して Hadoop や Spark などのオープンソース フレームワークを実行する方法の詳細については、「Azure HDInsight とは」および Azure HDInsight へのビッグ データ ワークロードの移行ガイドに関する記事を参照してください。

HDInsight のコンポーネントのバージョンについては、次の記事を参照してください。

Data Factory への移行

Azure Data Factory は、フル マネージドのサーバーレス データ統合サービスです。 データの量などの要因に応じて、オンデマンドでスケーリングできます。 Python、.NET、Azure Resource Manager テンプレート (ARM テンプレート) を使用して直感的な編集と開発を行うための GUI があります。

データ ソースへの接続

標準の Sqoop コネクタの一覧については、該当する記事を参照してください。

Data Factory には多数のコネクタがあります。 詳細については、「Azure Data Factory と Azure Synapse Analytics のコネクタの概要」を参照してください。

次の表は、Sqoop1 バージョン 1.4.7 および Sqoop2 バージョン 1.99.7 で使用される Data Factory コネクタを示した例です。 サポートされるバージョンの一覧が変更される可能性があるため、必ず最新のドキュメントを参照してください。

Sqoop1 - 1.4.7 Sqoop2 - 1.99.7 Data Factory 考慮事項
MySQL JDBC コネクタ 汎用 JDBC コネクタ MySQL、Azure Database for MySQL
MySQL Direct Connector 該当なし 該当なし Direct Connector では、mysqldump を使用して、JDBC を経由せずにデータの入出力を行います。 Data Factory では方法が異なりますが、代わりに MySQL コネクタを使用できます。
Microsoft SQL コネクタ 汎用 JDBC コネクタ SQL Server、Azure SQL Database、Azure SQL Managed Instance
PostgreSQL コネクタ PostgreSQL、汎用 JDBC コネクタ Azure Database for PostgreSQL
PostgreSQL Direct Connector 該当なし 該当なし Direct Connector では、JDBC を経由せず、COPY コマンドを使用してデータの入出力を行います。 Data Factory では方法が異なりますが、代わりに PostgreSQL コネクタを使用できます。
pg_bulkload コネクタ 該当なし 該当なし pg_bulkload を使用して PostgreSQL に読み込みます。 Data Factory では方法が異なりますが、代わりに PostgreSQL コネクタを使用できます。
Netezza コネクタ 汎用 JDBC コネクタ Netteza
Oracle および Hadoop 用のデータ コネクタ 汎用 JDBC コネクタ Oracle
該当なし FTP コネクタ FTP
該当なし SFTP コネクタ SFTP
該当なし Kafka コネクタ 該当なし Data Factory は Kafka に直接接続できません。 Azure Databricks や HDInsight などの Spark ストリーミングを使用して Kafka に接続することを検討してください。
該当なし Kite コネクタ 該当なし Data Factory は Kite に直接接続できません。
HDFS HDFS HDFS Data Factory では、HDFS はソースとしてサポートされますが、シンクとしてはサポートされません。

オンプレミスのデータベースに接続する

Sqoop を Data Factory に移行した後も、オンプレミス ネットワーク内のデータ ストアと Azure の間でデータをコピーする必要がある場合は、次の方法を使用することを検討してください。

セルフホステッド統合ランタイム

パブリック クラウド環境からの直接通信パスがないプライベート ネットワーク環境にデータを統合しようとしている場合は、次の操作を行ってセキュリティを強化できます。

  • 内部ファイアウォールまたは仮想プライベート ネットワーク内のオンプレミス環境に、セルフホステッド統合ランタイムをインストールします。
  • データ移動のための接続を確立するために、セルフホステッド統合ランタイムから Azure への HTTPS ベースの送信接続を確立します。

セルフホステッド統合ランタイムは、Windows でのみサポートされます。 また、複数のマシンにセルフホステッド統合ランタイムをインストールして関連付けることで、スケーラビリティと高可用性を実現することもできます。 セルフホステッド統合ランタイムは、オンプレミスまたは Azure 仮想ネットワークにないリソースにデータ変換アクティビティをディスパッチする役割も担います。

セルフホステッド統合ランタイムのセットアップ方法については、「セルフホステッド統合ランタイムの作成と構成」を参照してください。

プライベート エンドポイントを使用したマネージド仮想ネットワーク

オンプレミスと Azure の間にプライベート接続がある (ExpressRoute や VPN Gateway など) 場合は、Data Factory のマネージド仮想ネットワークとプライベート エンドポイントを使用して、オンプレミス データベースへのプライベート接続を確立できます。 次の図に示すように、仮想ネットワークを使用してオンプレミスのリソースにトラフィックを転送し、インターネットを経由せずにオンプレミスのリソースにアクセスできます。

プライベート エンドポイントを使用して Data Factory のマネージド仮想ネットワークからオンプレミスの SQL Server にアクセスするためのアーキテクチャの図。

このアーキテクチャの Visio ファイルをダウンロードします。

詳細については、「チュートリアル: プライベート エンドポイントを使用して Data Factory マネージド VNet からオンプレミスの SQL Server にアクセスする方法」を参照してください。

ネットワーク オプション

Data Factory には、次の 2 つのネットワーク オプションがあります。

どちらもプライベート ネットワークを構築し、データ統合のプロセスをセキュリティで保護するのに役立ちます。 これらは同時に使用できます。

マネージド仮想ネットワーク

統合ランタイム (Data Factory ランタイム) は、マネージド仮想ネットワーク内にデプロイできます。 マネージド仮想ネットワークに接続するデータ ストアなどのプライベート エンドポイントをデプロイすることで、閉域プライベート ネットワーク内のデータ統合の安全性を向上させることができます。

マネージド仮想ネットワークとプライベート エンドポイントを示すアーキテクチャの図。

このアーキテクチャの Visio ファイルをダウンロードします。

詳細については、「Azure Data Factory のマネージド仮想ネットワーク」を参照してください。

Azure Data Factory 用の Azure Private Link を使用して Data Factory に接続できます。

統合ランタイム、マネージド仮想ネットワーク、プライベート エンドポイントを含むアーキテクチャの図。

このアーキテクチャの Visio ファイルをダウンロードします。

詳細については、「プライベート エンドポイントとは」と「Private Link のドキュメント」を参照してください。

データ コピーのパフォーマンス

Sqoop では、並列処理に MapReduce を使用することで、データ転送のパフォーマンスを向上させています。 Sqoop の移行後は、Data Factory によって、大規模なデータ移行を実行するシナリオのパフォーマンスとスケーラビリティを調整できます。

"データ統合ユニット" (DIU) は、Data Factory のパフォーマンスの単位です。 これは、CPU、メモリ、ネットワーク リソース割り当てを組み合わせたものです。 Data Factory では、Azure 統合ランタイムを使用するコピー アクティビティ用に最大 256 個の DIU を調整できます。 詳細については、「データ統合単位」を参照してください。

セルフホステッド統合ランタイムを使用する場合は、セルフホステッド統合ランタイムをホストするマシンをスケーリングすることで、パフォーマンスを向上させることができます。 最大のスケールアウトは 4 つのノードです。

目的のパフォーマンスを実現するための調整の詳細については、「コピー アクティビティのパフォーマンスとスケーラビリティに関するガイド」を参照してください。

SQL の適用

Sqoop では、次の例に示すように、SQL クエリの結果セットをインポートできます。

$ sqoop import \
  --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
  --split-by a.id --target-dir /user/foo/joinresults

Data Factory では、データベースに対してクエリを実行し、結果セットをコピーすることもできます。

Data Factory での MySQL クエリを示すスクリーンショット。

MySQL データベースに対するクエリの結果セットを取得する例については、「コピー アクティビティのプロパティ」を参照してください。

データの変換

Data Factory と HDInsight の両方で、さまざまなデータ変換アクティビティを実行できます。

Data Factory のアクティビティを使用してデータを変換する

Data Factory では、データ フローやデータ ラングリングなど、さまざまなデータ変換アクティビティを実行できます。 どちらの場合も、ビジュアル UI を使用して変換を定義します。 HDInsight、Databricks、ストアド プロシージャのさまざまな Hadoop コンポーネントのアクティビティとその他のカスタム アクティビティを使用することもできます。 Sqoop を移行し、そのプロセスにデータ変換を含める場合は、これらのアクティビティの使用を検討してください。 詳細については、Azure Data Factory でのデータの変換に関する記事を参照してください。

HDInsight アクティビティを使用してデータを変換する

Hive、Pig、MapReduce、Streaming、Spark など、Azure Data Factory パイプライン内のさまざまな HDInsight アクティビティでは、独自のクラスターまたはオンデマンド HDInsight クラスターでプログラムとクエリを実行できます。 Hadoop エコシステムのデータ変換ロジックを使用する Sqoop 実装を移行する場合は、変換を HDInsight アクティビティに簡単に移行できます。 詳細については、次の記事を参照してください。

ファイル形式

Sqoop では、HDFS にデータをインポートするときに、テキスト、SequenceFile、Avro がファイル形式としてサポートされます。 Data Factory では、HDFS をデータ シンクとしてサポートしていませんが、ファイル ストレージとして Azure Data Lake Storage または Azure Blob Storage が使用されます。 HDFS の移行の詳細については、Apache HDFS の移行に関する記事を参照してください。

Data Factory でファイル ストレージに書き込む際にサポートされる形式は、テキスト、バイナリ、Avro、JSON、ORC、Parquet ですが、SequenceFile はサポートされません。 Spark などのアクティビティを使用し、saveAsSequenceFile を使用してファイルを SequenceFile に変換できます。

data.saveAsSequenceFile(<path>)

ジョブのスケジュール設定

Sqoop にはスケジューラ機能はありません。 スケジューラで Sqoop ジョブを実行している場合は、その機能を Data Factory に移行する必要があります。 Data Factory では、トリガーを使用して、データ パイプラインの実行をスケジュールできます。 既存のスケジュール構成に従って、Data Factory のトリガーを選択します。 トリガーの種類を次に示します。

  • スケジュール トリガー: スケジュール トリガーでは、実時間のスケジュールでパイプラインが実行されます。
  • タンブリング ウィンドウ トリガー: タンブリング ウィンドウ トリガーは、指定した開始時刻から定期的に実行され、その状態が維持されます。
  • イベント ベースのトリガー: イベント ベースのトリガーでは、イベントに応答してパイプラインがトリガーされます。 イベントベースのトリガーには、2 つの種類があります。
    • ストレージ イベント トリガー: ストレージ イベント トリガーでは、ファイルの作成、削除、書き込みなどのストレージ イベントに応答してパイプラインがトリガーされます。
    • カスタム イベント トリガー: カスタム イベント トリガーでは、イベント グリッド内のカスタム トピックに送信されるイベントに応答してパイプラインがトリガーされます。 カスタム トピックの詳細については、「Azure Event Grid でのカスタム トピック」を参照してください。

トリガーの詳細については、「Azure Data Factory または Azure Synapse Analytics でのパイプラインの実行とトリガー」を参照してください。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパルの作成者:

  • Namrata Maheshwary | シニア クラウド ソリューション アーキテクト
  • Raja N | ディレクター、カスタマー サクセス
  • Hideo Takagi | クラウド ソリューション アーキテクト
  • Ram Yerrabotu | シニア クラウド ソリューション アーキテクト

その他の共同作成者:

  • Ram Baskaran | シニア クラウド ソリューション アーキテクト
  • Jason Bouska | シニア ソフトウェア エンジニア
  • Eugene Chung | シニア クラウド ソリューション アーキテクト
  • Pawan Hosatti | シニア クラウド ソリューション アーキテクト - エンジニアリング
  • Daman Kaur | クラウド ソリューション アーキテクト
  • Danny Liu | シニア クラウド ソリューション アーキテクト - エンジニアリング
  • Jose Mendez | シニア クラウド ソリューション アーキテクト
  • Ben Sadeghi | シニア スペシャリスト
  • Sunil Sattiraju | シニア クラウド ソリューション アーキテクト
  • Amanjeet Singh | プリンシパル プログラム マネージャー
  • Nagaraj Seeplapudur Venkatesan | シニア クラウド ソリューション アーキテクト - エンジニアリング

パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。

次の手順

Azure 製品の概要

Azure 製品のリファレンス

その他