Partilhar via


Executar tarefas do Apache Sqoop com o SDK .NET para Apache Hadoop no HDInsight

Saiba como utilizar o SDK .NET do Azure HDInsight para executar tarefas do Apache Sqoop no HDInsight para importar e exportar entre um cluster do HDInsight e uma Base de Dados do SQL do Azure ou SQL Server base de dados.

Pré-requisitos

Utilizar o Sqoop em clusters do HDInsight com o SDK .NET

O SDK .NET do HDInsight fornece bibliotecas de cliente .NET, para que seja mais fácil trabalhar com clusters do HDInsight a partir do .NET. Nesta secção, vai criar uma aplicação de consola C# para exportar a hivesampletable para a tabela base de dados SQL do Azure que criou a partir dos pré-requisitos.

Configurar

  1. Inicie o Visual Studio e crie uma aplicação de consola C#.

  2. Navegue para Ferramentas>Consola do> Gestor dePacotes do Gestor de Pacotes NuGete execute o seguinte comando:

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

Exportação do Sqoop

Do Hive ao SQL Server. Este exemplo exporta dados da tabela do Hive hivesampletable para a mobiledata tabela no Base de Dados SQL.

  1. Utilize o seguinte código no ficheiro Program.cs. Edite o código para definir os valores para ExistingClusterNamee 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, selecione a tecla F5 .

Importação do Sqoop

Do SQL Server ao Armazenamento do Azure. Este exemplo depende da exportação acima ter sido executada. Este exemplo importa dados da mobiledata tabela no Base de Dados SQL para o wasb:///tutorials/usesqoop/importeddata diretório na Conta de Armazenamento predefinida do cluster.

  1. Substitua o código acima no //sqoop start //sqoop end bloco 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, selecione a tecla F5 .

Limitações

O HDInsight baseado em Linux apresenta as seguintes limitações:

  • Exportação em massa: o conector sqoop utilizado para exportar dados para o Microsoft SQL Server ou a Base de Dados SQL do Azure não suporta atualmente inserções em massa.

  • Criação de batches: ao utilizar o comutador, o -batch Sqoop executa várias inserções em vez de criar em lote as operações de inserção.

Passos seguintes

Agora aprendeu a utilizar o Sqoop. Para saber mais, veja: