HDInsight で .NET SDK for Apache Hadoop を使用して Apache Sqoop ジョブを実行する
Azure HDInsight .NET SDK を使用して、HDInsight クラスターと Azure SQL Database または SQL Server データベース間でインポートとエクスポートを実行する Apache Sqoop ジョブを HDInsight で実行する方法について説明します。
前提条件
「HDInsight の Hadoop での Apache Sqoop の使用」の「テスト環境のセットアップ」が完了していること。
Sqoop に関する知識。 詳細については、「OpenFOAM ユーザーガイド」を参照してください。
.NET SDK を使って HDInsight クラスターで Sqoop を使用する
HDInsight .NET SDK は、.NET から HDInsight クラスターを簡単に操作できる .NET クライアント ライブラリを提供します。 このセクションでは、C# コンソール アプリケーションを作成し、前提条件で作成した Azure SQL Database テーブルに hivesampletable
をエクスポートします。
設定
Visual Studio を開始し、C# コンソール アプリケーションを作成します。
[ツール]>[NuGet Package Manager]>[パッケージ マネージャー コンソール] に移動し、次のコマンドを実行します。
Install-Package Microsoft.Azure.Management.HDInsight.Job
Sqoop のエクスポート
Hive から SQL Server へ この例では、hivesampletable
のテーブルから SQL Database の mobiledata
テーブルにデータをエクスポートします。
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); } } }
プログラムを実行するには、F5 キーを押します。
Sqoop のインポート
SQL Server から Azure Storage へ。 この例は、上記のエクスポートが実行されたことを前提としています。 この例では、SQL Database の mobiledata
テーブルからクラスターの既定のストレージ アカウントの wasb:///tutorials/usesqoop/importeddata
ディレクトリにデータをインポートします。
//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" };
プログラムを実行するには、F5 キーを押します。
制限事項
Linux ベースの HDInsight には次の制限事項があります。
一括エクスポート:Microsoft SQL Server または Azure SQL Database にデータをエクスポートするために使用する Sqoop コネクタでは、一括挿入は現在サポートされていません。
バッチ処理:
-batch
スイッチを使用すると、Sqoop では挿入操作がバッチ処理されず、複数の挿入が実行されます。
次のステップ
ここでは Sqoop の使用方法を学習しました。 詳細については、次を参照してください。
- HDInsight での Apache Oozie の使用:Oozie ワークフローで Sqoop アクションを使用します。
- HDInsight へのデータのアップロード:HDInsight または Azure Blob Storage にデータをアップロードするその他の方法を説明します。