تشغيل مهام Apache Sqoop باستخدام ‎.NET SDK لـ Apache Hadoop في HDInsight

تعرف على كيفية استخدام Azure HDInsight .NET SDK لتشغيل وظائف Apache Sqoop في HDInsight لاستيراد البيانات وتصديرها بين مجموعة HDInsight وقاعدة بيانات Azure SQL أو خادم SQL.

المتطلبات الأساسية

استخدام Sqoop على مجموعات HDInsight مع .NET SDK

يوفر HDInsight .NET SDK مكتبات عملاء NET.، مما يسهل العمل مع مجموعات HDInsight من .NET. في هذا القسم، يمكنك إنشاء تطبيق وحدة تحكم C# لتصدير hivesampletable إلى جدول قاعدة بيانات Azure SQL التي قمت بإنشائها من المتطلبات الأساسية.

الإعداد

  1. ابدأ تشغيل Visual Studio وأنشئ تطبيق وحدة تحكم #C.

  2. انتقل إلى Tools>NuGet Package Manager>Package Manager Console وأدخل الأمر التالي:

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

تصدير Sqoop

من Hive إلى خادم SQL. يقوم هذا المثال بتصدير البيانات من جدول Hive hivesampletable إلى جدول mobiledata في قاعدة بيانات SQL.

  1. استخدم التعليمات البرمجية التالية في الملف 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);
            }
        }
    }
    
  2. لتشغيل البرنامج، حدد المفتاح F5.

استيراد Sqoop

من خادم SQL إلى تخزين Azure. يعتمد هذا المثال على التصدير أعلاه بعد أن تم تنفيذه. يقوم هذا المثال باستيراد البيانات من الجدول mobiledata في قاعدة بيانات SQL إلى الدليل wasb:///tutorials/usesqoop/importeddata على حساب التخزين الافتراضي للمجموعة.

  1. استبدل التعليمات البرمجية أعلاه في كتلة //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"
    };
    
  2. لتشغيل البرنامج، حدد المفتاح F5.

التقييدات

يقدم HDInsight القائم على Linux القيود التالية:

  • تصدير كمية كبيرة: موصل Sqoop المستخدم لتصدير البيانات إلى Microsoft SQL Server أو قاعدة بيانات SQL لا يدعم حاليًا إدراج كميات كبيرة.

  • إرسال في دفعات: باستخدام المفتاح -batch، يقوم Sqoop بإدراجات متعددة بدلاً من الإرسال في دفعات.

الخطوات التالية

لقد تعلمت الآن كيفية استخدام Sqoop. لمعرفة المزيد، راجع: