Выполнение заданий Apache Sqoop с помощью пакета SDK для .NET для Apache Hadoop в HDInsight
Узнайте, как использовать пакет SDK Azure HDInsight для .NET, чтобы выполнять задания Apache Sqoop в HDInsight для импорта и экспорта данных между кластером HDInsight и Базой данных SQL Azure или базой данных SQL Server.
Предварительные требования
Должна быть выполнена настройка тестовой среды, описанная в разделе Использование Apache Sqoop с Hadoop в HDInsight.
Опыт работы со Sqoop. Дополнительные сведения см. в руководстве пользователя по Sqoop.
Использование Sqoop в кластерах HDInsight с пакетом SDK для .NET
Пакет SDK для HDInsight .NET предоставляет клиентские библиотеки .NET, которые упрощают работу с кластерами HDInsight из .NET. В этом разделе показано, как создать консольное приложение C# для экспорта таблицы hivesampletable
в таблицу Базы данных SQL Azure, созданную согласно предварительным требованиям.
Настройка
Запустите Visual Studio и создайте консольное приложение C#.
Последовательно выберите Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов и выполните следующую команду:
Install-Package Microsoft.Azure.Management.HDInsight.Job
Экспорт Sqoop
Из Hive в SQL Server. В этом примере данные экспортируются из таблицы Hive hivesampletable
в таблицу mobiledata
в Базе данных SQL.
Используйте следующий код в файле 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. Этот пример зависит от операции экспорта, выполненной ранее. В этом примере данные из таблицы mobiledata
в Базе данных SQL импортируются в каталог 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, чтобы запустить программу.
Ограничения
Для HDInsight под управлением Linux действуют следующие ограничения:
Массовый экспорт: соединитель Sqoop, применяемый для экспорта данных в Microsoft SQL Server или Базу данных SQL Azure, пока не поддерживает операции массовой вставки.
Пакетная обработка: когда для вставок применяется параметр
-batch
, Sqoop выполняет несколько вставок вместо пакетной обработки операций вставки.
Дальнейшие действия
Теперь вы узнали, как использовать Sqoop. Дополнительные сведения см. на следующих ресурсах:
- Использование Apache Oozie с HDInsight. Используйте действие Sqoop в рабочем процессе Oozie.
- Отправка данных в HDInsight. Узнайте о других способах отправки данных в HDInsight или хранилище BLOB-объектов Azure.