HDInsight の Hadoop での Apache Sqoop の使用
HDInsight 内で Apache Sqoop を使用して、HDInsight クラスターと Azure SQL Database 間でデータのインポートとエクスポートを行う方法について学習します。
Apache Hadoop はログやファイルなどの非構造化データおよび半構造化データを処理する場合に自然な選択ですが、リレーショナル データベースに格納された構造化データを処理する必要が生じることもあります。
Apache Sqoop は、Hadoop クラスターとリレーショナル データベース間でデータを転送するためのツールです。 このツールを使用して、SQL、MySQL、Oracle などのリレーショナル データベース管理システム (RDBMS) から Hadoop 分散ファイル システム (HDFS) へデータをインポートしたり、MapReduce または Apache Hive を使用して Hadoop のデータを変換し、そのデータを RDBMS へ取り込んだりできます。 この記事では、リレーショナル データベースとして Azure SQL Database を使用します。
重要
この記事では、データ転送を実行するテスト環境を設定します。 次に、後述の「Sqoop ジョブの実行」セクションにあるいずれかの方法から、この環境のデータ転送方法を選択してください。
HDInsight クラスターでサポートされている Sqoop のバージョンについては、「HDInsight で提供されるクラスター バージョンの新機能」をご覧ください。
シナリオの理解
HDInsight クラスターにはサンプル データがいくつか付属しています。 ここでは、以下の 2 つのサンプルを使用します。
/example/data/sample.log
にある ApacheLog4j
ログ ファイル。 次のようなログがファイルから抽出されます。
2012-02-03 18:35:34 SampleClass6 [INFO] everything normal for id 577725851
2012-02-03 18:35:34 SampleClass4 [FATAL] system problem at id 1991281254
2012-02-03 18:35:34 SampleClass3 [DEBUG] detail for id 1304807656
...
hivesampletable
という名前の Hive テーブル。これは/hive/warehouse/hivesampletable
にあるデータ ファイルを参照します。 テーブルはモバイル デバイスのデータを含んでいます。フィールド データ型 clientid string querytime string market string deviceplatform string devicemake string devicemodel string state string country string querydwelltime 倍精度浮動小数点 sessionid
bigint sessionpagevieworder bigint
この記事では、これら 2 つのデータセットを使用して Sqoop のインポートとエクスポートをテストします。
テスト環境のセットアップ
クラスター、SQL データベース、およびその他のオブジェクトは、Azure Resource Manager テンプレートを使用して Azure portal から作成されます。 テンプレートは Azure クイック スタート テンプレート集にあります。 Resource Manager テンプレートでは、SQL データベースにテーブル スキーマをデプロイするために bacpac パッケージを呼び出します。 bacpac ファイルのプライベート コンテナーを使用する場合は、テンプレートで、次の値を使用します。
"storageKeyType": "Primary",
"storageKey": "<TheAzureStorageAccountKey>",
注意
テンプレートまたは Azure Portal を使用したインポートでは、Azure Blob Storage からのインポートのみをサポートします。
次の画像を選択して、Azure portal で Resource Manager テンプレートを開きます。
次のプロパティを入力します。
フィールド 値 サブスクリプション ドロップダウン リストから Azure サブスクリプションを選択します。 Resource group ドロップダウン リストからリソース グループを選択するか、新しいリソース グループを作成します。 場所 ドロップダウン リストからリージョンを選択します。 クラスター名 Hadoop クラスターの名前を入力します。 小文字のみを使用します。 クラスター サインインのユーザー名 事前設定された値 admin
のままにします。クラスター サインインのパスワード パスワードを入力します。 SSH ユーザー名 事前設定された値 sshuser
のままにします。SSH パスワード パスワードを入力します。 SQL の管理者サインイン 事前設定された値 sqluser
のままにします。SQL の管理者パスワード パスワードを入力します。 _artifacts の場所 別の場所で独自の bacpac ファイルを使用する場合を除き、既定値を使用します。 Sas トークンとしての _artifacts の場所 空白のままにします。 Bacpac ファイル名 独自の bacpac ファイルを使用する場合を除き、既定値を使用します。 場所 既定値を使用します。 論理 SQL サーバー名は
<ClusterName>dbserver
です。 データベース名は<ClusterName>db
です。 既定のストレージ アカウント名はe6qhezrh2pdqu
です。[上記の使用条件に同意する] を選択します。
[購入] を選択します。 "Submitting deployment for Template deployment" という新しいタイルが表示されます。 クラスターと SQL Database の作成には約 20 分かかります。
Sqoop ジョブの実行
HDInsight では、さまざまな方法を使用して Sqoop ジョブを実行できます。 次の表を使用して、適切な方法を判別してから、該当するチュートリアルのリンクをクリックしてください。
方法 | 対話型 シェルの有無 | バッチ 処理の有無 | 使用元の クライアントのオペレーティング システム |
---|---|---|---|
SSH | ? | ? | Linux、Unix、macOS X、または Windows |
.NET SDK for Hadoop | ? | Windows (現時点) | |
Azure PowerShell | ? | Windows |
制限事項
- 一括エクスポート - Linux ベースの HDInsight では、Microsoft SQL Server または SQL Database にデータをエクスポートするために使用する Sqoop コネクタは、一括挿入を現在サポートしていません。
- バッチ処理 - Linux ベースの HDInsight で、挿入処理実行時に
-batch
スイッチを使用すると、Sqoop は挿入操作をバッチ処理するのではなく、複数の挿入を実行します。
次のステップ
ここでは Sqoop の使用方法を学習しました。 詳細については、次を参照してください。
- HDInsight での Apache Hive の使用
- HDInsight へのデータのアップロード:HDInsight/Azure Blob Storage にデータをアップロードするその他の方法を説明します。
- Apache Sqoop を使用して、HDInsight 上の Apache Hadoop と SQL Database の間でデータをインポートおよびエクスポートする