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

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

  1. Abra o Visual Studio e crie um aplicativo de console em C#.

  2. 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.

  1. Use o seguinte código no arquivo Program.cs. Edite o código para definir os valores para ExistingClusterName e 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. 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.

  1. 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"
    };
    
  2. 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: