Apache Sqoop を使用して、HDInsight 上の Apache Hadoop と Azure SQL Database の間でデータをインポートおよびエクスポートする
Apache Sqoop を使用して、Azure HDInsight 上の Apache Hadoop クラスターと Azure SQL Database または Microsoft SQL Server の間でインポートとエクスポートを行う方法について説明します。 このドキュメントの手順では、Hadoop クラスターのヘッド ノードから sqoop
コマンドを直接使用します。 SSH を使用してヘッド ノードに接続し、このドキュメント内のコマンドを実行します。 この記事は、「HDInsight の Hadoop での Apache Sqoop の使用」の続きです。
前提条件
「HDInsight の Hadoop での Apache Sqoop の使用」の「テスト環境のセットアップ」が完了していること。
SSH クライアント 詳細については、SSH を使用して HDInsight (Apache Hadoop) に接続する方法に関するページを参照してください。
Sqoop に関する知識。 詳細については、「OpenFOAM ユーザーガイド」を参照してください。
設定
ssh コマンドを使用してクラスターに接続します。 次のコマンドを編集して CLUSTERNAME をクラスターの名前に置き換えてから、そのコマンドを入力します。
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
使いやすくするために、変数を設定します。
PASSWORD
、MYSQLSERVER
、およびMYDATABASE
を関連する値に置き換え、次のコマンドを入力します。export PASSWORD='PASSWORD' export SQL_SERVER="MYSQLSERVER" export DATABASE="MYDATABASE" export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD" export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD;database=$DABATASE"
Sqoop のエクスポート
Hive から SQL へ。
Sqoop でデータベースを認識できることを確認するには、開いている SSH 接続に次のコマンドを入力します。 このコマンドはデータベースの一覧を返します。
sqoop list-databases --connect $SERVER_CONNECT
次のコマンドを入力して、指定したデータベースのテーブルのリストを表示します。
sqoop list-tables --connect $SERVER_DB_CONNECT
Hive
hivesampletable
テーブルからデータベース内のmobiledata
テーブルにデータをエクスポートするには、開いている SSH 接続に次のコマンドを入力します。sqoop export --connect $SERVER_DB_CONNECT \ -table mobiledata \ --hcatalog-table hivesampletable
データがエクスポートされたことを確認するには、SSH 接続から、次のクエリを使用して、エクスポートされたデータを表示します。
sqoop eval --connect $SERVER_DB_CONNECT \ --query "SELECT COUNT(*) from dbo.mobiledata WITH (NOLOCK)" sqoop eval --connect $SERVER_DB_CONNECT \ --query "SELECT TOP(10) * from dbo.mobiledata WITH (NOLOCK)"
Sqoop のインポート
SQL から Azure のストレージへ。
開いている SSH 接続に次のコマンドを入力して、SQL 内の
mobiledata
テーブルから HDInsight 上のwasbs:///tutorials/usesqoop/importeddata
ディレクトリにデータをインポートします。 データ内のフィールドはタブ文字で区切られていて、行は改行文字で終わっています。sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' -m 1
または、Hive テーブルを指定することもできます。
sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata2' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' \ --create-hive-table \ --hive-table mobiledata_imported2 \ --hive-import -m 1
インポートが完了したら、開いた SSH 接続に次のコマンドを入力して、新しいディレクトリ内のデータを列挙します。
hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
beeline を使用して、テーブルがHiveで作成されたことを確認します。
接続する
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
次のクエリを一度に1つずつ実行し、出力を確認します。
show tables; describe mobiledata_imported2; SELECT COUNT(*) FROM mobiledata_imported2; SELECT * FROM mobiledata_imported2 LIMIT 10;
Beeline を終了するには、
!exit
を使用します。
制限事項
一括エクスポート - Linux ベースの HDInsight を使用する場合、SQL にデータをエクスポートするために使用する Sqoop コネクタでは、一括挿入はサポートされません。
バッチ処理 - Linux ベースの HDInsight で、挿入処理実行時に
-batch
スイッチを使用すると、Sqoop は挿入操作をバッチ処理するのではなく、複数の挿入を行います。
重要な考慮事項
HDInsight と SQL Server の両方が、同じ Azure Virtual Network に存在する必要があります。
例については、「HDInsight をオンプレミス ネットワークに接続する方法」に関するドキュメントを参照してください。
Azure Virtual Network での HDInsight の使用に関する詳細情報については、「Azure Virtual Network で HDInsight 機能を拡張する方法」に関するドキュメントを参照してください。 Azure Virtual Network の詳細については、「Virtual Network の概要」を参照してください。
SQL 認証を許可するよう、SQL Server を構成する必要があります。 詳細については、認証モードの選択に関するドキュメントを参照してください。
リモート接続を許可するよう、SQL Server を構成する必要がある場合があります。
次のステップ
ここでは Sqoop の使用方法を学習しました。 詳細については、次を参照してください。
- HDInsight での Apache Oozie の使用:Oozie ワークフローで Sqoop アクションを使用します。
- HDInsight を使用したフライト遅延データの分析:Interactive Query を使用してフライト遅延データを分析してから、Sqoop を使用して Azure のデータベースにデータをエクスポートします。
- HDInsight へのデータのアップロード:HDInsight/Azure Blob Storage にデータをアップロードするその他の方法を説明します。