Menjalankan pekerjaan Apache Sqoop menggunakan .NET SDK untuk Apache Hadoop di HDInsight

Pelajari cara menggunakan Azure HDInsight .NET SDK untuk menjalankan pekerjaan Apache Sqoop di HDInsight untuk mengimpor dan mengekspor antara kluster HDInsight dan database Azure SQL Database atau SQL Server.

Prasyarat

Menggunakan Sqoop pada kluster HDInsight dengan .NET SDK

HDInsight .NET SDK menyediakan pustaka klien .NET, sehingga lebih mudah untuk bekerja dengan kluster HDInsight dari .NET. Di bagian ini, Anda membuat aplikasi konsol C# untuk mengekspor hivesampletable ke tabel Azure SQL Database yang Anda buat dari prasyarat.

Menyiapkan

  1. Mulai Visual Studio dan buat aplikasi konsol C#.

  2. Navigasikan ke Alat>NuGet Package Manager>Package Manager Console dan jalankan perintah berikut:

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

Ekspor Sqoop

Dari Apache Hive ke SQL Server. Contoh ini mengekspor data dari tabel Apache Hive hivesampletable ke tabel mobiledata dalam SQL Database.

  1. Gunakan kode berikut dalam file Program.cs. Edit kode untuk mengatur nilai ExistingClusterName, dan 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. Untuk menjalankan program, pilih tombol F5.

Impor Sqoop

Dari SQL Server ke Azure Storage. Contoh ini bergantung pada ekspor di atas yang telah dilakukan. Contoh ini mengimpor data dari tabel mobiledata di SQL Database ke direktori wasb:///tutorials/usesqoop/importeddata pada Akun Storage default kluster.

  1. Ganti kode di atas pada blok //sqoop start //sqoop end dengan kode berikut:

    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. Untuk menjalankan program, pilih tombol F5.

Batasan

HDInsight berbasis Linux menyajikan batasan berikut:

  • Ekspor massal: Konektor Sqoop yang digunakan untuk mengekspor data ke Microsoft SQL Server atau Azure SQL Database saat ini tidak mendukung penyisipan massal.

  • Batching: Menggunakan sakelar -batch, Sqoop melakukan banyak penyisipan alih-alih menumpuk operasi penyisipan.

Langkah berikutnya

Sekarang Anda telah mempelajari cara menggunakan Sqoop. Untuk mempelajari selengkapnya, lihat: