Executar trabalhos do Apache Sqoop usando .NET SDK para Apache Hadoop no HDInsight
Saiba como usar o SDK .NET do Azure HDInsight para executar trabalhos do Apache Sqoop no HDInsight para importar e exportar entre um cluster HDInsight e um banco de dados SQL do Azure ou o SQL Server.
Pré-requisitos
Conclusão de Configurar o ambiente de teste de Usar o Apache Sqoop com o Hadoop no HDInsight.
Familiaridade com o Sqoop. Para obter mais informações, consulte Guia do usuário do Sqoop.
Usar o Sqoop em clusters HDInsight com o SDK do .NET
O SDK do .NET do HDInsight fornece bibliotecas de cliente .NET que facilitam o trabalho com clusters HDInsight no .NET. Nesta seção, você cria um aplicativo de console em C# a fim de exportar o hivesampletable
para a tabela do Banco de Dados SQL do Azure criada por você de acordo com os pré-requisitos.
Configuração
Abra o Visual Studio e crie um aplicativo de console em C#.
Navegue até Ferramentas>Gerenciador de Pacotes NuGet>Console do Gerenciador do NuGet e execute o seguinte comando:
Install-Package Microsoft.Azure.Management.HDInsight.Job
Exportação do Sqoop
Do Hive para o SQL Server. Este exemplo exporta dados da tabela hivesampletable
do Hive para a tabela mobiledata
no Banco de Dados SQL.
Use o seguinte código no arquivo Program.cs. Edite o código para definir os valores para
ExistingClusterName
eExistingClusterPassword
.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); } } }
Para executar o programa, aperte a tecla F5.
Importação do Sqoop
Do SQL Server para o Armazenamento do Azure. Este exemplo depende da exportação acima ter sido executada. Este exemplo importa dados da tabela mobiledata
no Banco de Dados SQL para o diretório wasb:///tutorials/usesqoop/importeddata
na conta de armazenamento padrão do cluster.
Substitua o código acima no bloclo
//sqoop start //sqoop end
pelo seguinte código: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" };
Para executar o programa, aperte a tecla F5.
Limitações
O HDInsight baseado em Linux tem as seguintes limitações:
Exportação em massa: O conector Sqoop usado para exportar dados no Microsoft SQL Server ou no Banco de Dados SQL do Azure não permite inserções em massa atualmente.
Envio em lote: ao usar o comutador
-batch
, o Sqoop realizará várias inserções em vez de enviar em lote as operações de inserção.
Próximas etapas
Você aprendeu como usar o Sqoop. Para obter mais informações, consulte:
- Usar o Apache Oozie com o HDInsight: Use a ação Sqoop em um fluxo de trabalho do Oozie.
- Carregar dados para HDInsight: Encontre outros métodos para fazer upload de dados para HDInsight ou armazenamento de Blob do Azure.