HDInsight で .NET SDK for Apache Hadoop を使用して Apache Sqoop ジョブを実行する

Azure HDInsight .NET SDK を使用して、HDInsight クラスターと Azure SQL Database または SQL Server データベース間でインポートとエクスポートを実行する Apache Sqoop ジョブを HDInsight で実行する方法について説明します。

前提条件

.NET SDK を使って HDInsight クラスターで Sqoop を使用する

HDInsight .NET SDK は、.NET から HDInsight クラスターを簡単に操作できる .NET クライアント ライブラリを提供します。 このセクションでは、C# コンソール アプリケーションを作成し、前提条件で作成した Azure SQL Database テーブルに hivesampletable をエクスポートします。

設定

  1. Visual Studio を開始し、C# コンソール アプリケーションを作成します。

  2. [ツール]>[NuGet Package Manager]>[パッケージ マネージャー コンソール] に移動し、次のコマンドを実行します。

    Install-Package Microsoft.Azure.Management.HDInsight.Job
    

Sqoop のエクスポート

Hive から SQL Server へ この例では、hivesampletable のテーブルから SQL Database の mobiledata テーブルにデータをエクスポートします。

  1. Program.cs ファイルで次のコードを使用します。 このコードを編集して ExistingClusterName および ExistingClusterPassword の値を設定します。

    using Microsoft.Azure.Management.HDInsight.Job;
    using Microsoft.Azure.Management.HDInsight.Job.Models;
    using Hyak.Common;
    
    namespace SubmitHDInsightJobDotNet
    {
        class Program
        {
            private static HDInsightJobManagementClient _hdiJobManagementClient;
    
            private const string ExistingClusterName = "<Your HDInsight Cluster Name>";
            private const string ExistingClusterPassword = "<Cluster User Password>";
            private const string ExistingClusterUri = ExistingClusterName + ".azurehdinsight.net";
            private const string ExistingClusterUsername = "admin";
    
            static void Main(string[] args)
            {
                System.Console.WriteLine("The application is running ...");
    
                var clusterCredentials = new BasicAuthenticationCloudCredentials { Username = ExistingClusterUsername, Password = ExistingClusterPassword };
                _hdiJobManagementClient = new HDInsightJobManagementClient(ExistingClusterUri, clusterCredentials);
    
                SubmitSqoopJob();
    
                System.Console.WriteLine("Press ENTER to continue ...");
                System.Console.ReadLine();
            }
    
            private static void SubmitSqoopJob()
            {
                var sqlDatabaseServerName = ExistingClusterName + "dbserver";
                var sqlDatabaseLogin = "sqluser";
                var sqlDatabaseLoginPassword = ExistingClusterPassword;
                var sqlDatabaseDatabaseName = ExistingClusterName + "db";
    
                // Connection string for using Azure SQL Database; Comment if using SQL Server
                var connectionString = "jdbc:sqlserver://" + sqlDatabaseServerName + ".database.windows.net;user=" + sqlDatabaseLogin + "@" + sqlDatabaseServerName + ";password=" + sqlDatabaseLoginPassword + ";database=" + sqlDatabaseDatabaseName;
    
                // Connection string for using SQL Server; Uncomment if using SQL Server
                // var connectionString = "jdbc:sqlserver://" + sqlDatabaseServerName + ";user=" + sqlDatabaseLogin + ";password=" + sqlDatabaseLoginPassword + ";database=" + sqlDatabaseDatabaseName;
    
                //sqoop start
                var tableName = "mobiledata";
    
                var parameters = new SqoopJobSubmissionParameters
                {
                     Command = "export --connect " + connectionString + " --table " + tableName + " --hcatalog-table hivesampletable"
                };
                //sqoop end
    
                System.Console.WriteLine("Submitting the Sqoop job to the cluster...");
                var response = _hdiJobManagementClient.JobManagement.SubmitSqoopJob(parameters);
                System.Console.WriteLine("Validating that the response is as expected...");
                System.Console.WriteLine("Response status code is " + response.StatusCode);
                System.Console.WriteLine("Validating the response object...");
                System.Console.WriteLine("JobId is " + response.JobSubmissionJsonResponse.Id);
            }
        }
    }
    
  2. プログラムを実行するには、F5 キーを押します。

Sqoop のインポート

SQL Server から Azure Storage へ。 この例は、上記のエクスポートが実行されたことを前提としています。 この例では、SQL Database の mobiledata テーブルからクラスターの既定のストレージ アカウントの wasb:///tutorials/usesqoop/importeddata ディレクトリにデータをインポートします。

  1. //sqoop start //sqoop end ブロック内の上記のコードを次のコードに置き換えます。

    var tableName = "mobiledata";
    var exportDir = "/tutorials/usesqoop/importeddata";
    
    var parameters = new SqoopJobSubmissionParameters
    {
        Command = "import --connect " + connectionString + " --table " + tableName + " --target-dir " +  exportDir + " --fields-terminated-by \\t --lines-terminated-by \\n -m 1"
    };
    
  2. プログラムを実行するには、F5 キーを押します。

制限事項

Linux ベースの HDInsight には次の制限事項があります。

  • 一括エクスポート:Microsoft SQL Server または Azure SQL Database にデータをエクスポートするために使用する Sqoop コネクタでは、一括挿入は現在サポートされていません。

  • バッチ処理: -batch スイッチを使用すると、Sqoop では挿入操作がバッチ処理されず、複数の挿入が実行されます。

次のステップ

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