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 の使用」の続きです。

前提条件

設定

  1. ssh コマンドを使用してクラスターに接続します。 次のコマンドを編集して CLUSTERNAME をクラスターの名前に置き換えてから、そのコマンドを入力します。

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. 使いやすくするために、変数を設定します。 PASSWORDMYSQLSERVER、および 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 へ。

  1. Sqoop でデータベースを認識できることを確認するには、開いている SSH 接続に次のコマンドを入力します。 このコマンドはデータベースの一覧を返します。

    sqoop list-databases --connect $SERVER_CONNECT
    
  2. 次のコマンドを入力して、指定したデータベースのテーブルのリストを表示します。

    sqoop list-tables --connect $SERVER_DB_CONNECT
    
  3. Hive hivesampletable テーブルからデータベース内の mobiledata テーブルにデータをエクスポートするには、開いている SSH 接続に次のコマンドを入力します。

    sqoop export --connect $SERVER_DB_CONNECT \
    -table mobiledata \
    --hcatalog-table hivesampletable
    
  4. データがエクスポートされたことを確認するには、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 のストレージへ。

  1. 開いている 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
    
  2. または、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
    
  3. インポートが完了したら、開いた SSH 接続に次のコマンドを入力して、新しいディレクトリ内のデータを列挙します。

    hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
    
  4. beeline を使用して、テーブルがHiveで作成されたことを確認します。

    1. 接続する

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    2. 次のクエリを一度に1つずつ実行し、出力を確認します。

      show tables;
      describe mobiledata_imported2;
      SELECT COUNT(*) FROM mobiledata_imported2;
      SELECT * FROM mobiledata_imported2 LIMIT 10;
      
    3. Beeline を終了するには、 !exitを使用します。

制限事項

  • 一括エクスポート - Linux ベースの HDInsight を使用する場合、SQL にデータをエクスポートするために使用する Sqoop コネクタでは、一括挿入はサポートされません。

  • バッチ処理 - Linux ベースの HDInsight で、挿入処理実行時に -batch スイッチを使用すると、Sqoop は挿入操作をバッチ処理するのではなく、複数の挿入を行います。

重要な考慮事項

次のステップ

ここでは Sqoop の使用方法を学習しました。 詳細については、次を参照してください。