مشاركة عبر


تحويل البيانات في الشبكة الافتراضية في Azure باستخدام نشاط Hive في Azure Data Factory

ينطبق على: Azure Data Factory Azure Synapse Analytics

تلميح

جرب Data Factory في Microsoft Fabric، وهو حل تحليلي متكامل للمؤسسات. يغطي Microsoft Fabric كل شيء بدءا من حركة البيانات إلى علم البيانات والتحليلات في الوقت الحقيقي والمعلومات المهنية وإعداد التقارير. تعرف على كيفية بدء إصدار تجريبي جديد مجانا!

يمكنك في هذا البرنامج التعليمي، استخدام Azure PowerShell لإنشاء بنية أساسية لـ Data Factory يقوم بتحويل البيانات باستخدام نشاط Hive على شبكة نظام مجموعة HDInsight الموجودة في الشكة الافتراضية لنظام Azure (VNet). نفذ الخطوات التالية في هذا البرنامج التعليمي:

  • إنشاء data factory.
  • تأليف وإعداد وقت تشغيل التكامل المستضاف ذاتيًا
  • تأليف خدمات مرتبطة ونشرها.
  • تأليف ونشر تدفق يحتوي على نشاط Hive.
  • ابدأ تشغيل تدفق.
  • راقب عملية تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية
  • التحقق من صحة الناتج.

في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

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

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

  • حساب في مساحة تخزين Azure. إنشاء برنامج نصي في Hive ثم قم بتحميله إلى تخزين Azure. يتم تخزين الإخراج من البرنامج النصي Hive في حساب التخزين هذا. في هذا النموذج، تستخدم مجموعة HDInsight حساب Azure Storage هذا كمخزن أساسي.

  • شبكة Azure الظاهرية. إذا لم يكن لديك شبكة Azure ظاهرية، فبادر بإنشائها باتباع هذه الإرشادات. في هذا النموذج، يوجد HDInsight في شبكة Azure الافتراضية. فيما يلي نموذج تكوين لشبكة Azure الافتراضية.

    إنشاء شبكة ظاهرية

  • مجموعة HDInsight. أنشئ مجموعة HDInsight وانضم إليها إلى الشبكة الظاهرية التي أنشأتها في الخطوة السابقة باتباع هذه المقالة: توسيع Azure HDInsight باستخدام شبكة Azure الظاهرية. فيما يلي نموذج لتكوين HDInsight في شبكة افتراضية.

    HDInsight في شبكة افتراضية

  • Azure PowerShell. اتبع الإرشادات الموجودة في كيفية تثبيت وتكوين Azure PowerShell.

حمل البرنامج النصي من Hive إلى حساب تخزين Blob

  1. إنشاء ملف Hive SQL باسم hivescript.hql بالمحتوى التالي:

    DROP TABLE IF EXISTS HiveSampleOut; 
    CREATE EXTERNAL TABLE HiveSampleOut (clientid string, market string, devicemodel string, state string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' 
    STORED AS TEXTFILE LOCATION '${hiveconf:Output}';
    
    INSERT OVERWRITE TABLE HiveSampleOut
    Select 
        clientid,
        market,
        devicemodel,
        state
    FROM hivesampletable
    
  2. في مساحة تخزين Azure Blob، أنشئ حاوية باسم adftutorial إذا لم تكن موجودة بالفعل.

  3. إنشاء مجلد باسم hivescripts.

  4. قم بتحميل ملف hivescript.hql إلى المجلد الفرعي hivescripts.

إنشاء مصدرًا للبيانات

  1. قم بتعيين اسم مجموعة الموارد. تنشئ مجموعة موارد كجزء من هذا البرنامج التعليمي. ومع ذلك، يمكنك استخدام مجموعة موارد موجودة إذا أردت.

    $resourceGroupName = "ADFTutorialResourceGroup" 
    
  2. حدد اسم مُنشئ البيانات. ويجب أن يكون فريدًا من نوعه على الصعيد العالمي.

    $dataFactoryName = "MyDataFactory09142017"
    
  3. حدد اسمًا للتدفق.

    $pipelineName = "MyHivePipeline" # 
    
  4. حدد اسمًا لوقت تشغيل التكامل المستضاف ذاتيًا. أنت بحاجة إلى وقت تشغيل تكامل مستضاف ذاتيًا عندما يحتاج Data Factory إلى الوصول إلى الموارد (مثل قاعدة بيانات Azure SQL) داخل شبكة VNet.

    $selfHostedIntegrationRuntimeName = "MySelfHostedIR09142017" 
    
  5. شغّل PowerShell. اترك Azure PowerShell مفتوحًا حتى نهاية هذه البداية السريعة. في حال قمت بإغلاق وإعادة فتح، تحتاج إلى تشغيل الأوامر مرة أخرى. للحصول على قائمة بمناطق Azure التي يتوفر فيها حالياً Data Factory، حدد المناطق التي تهمك في الصفحة التالية، ثم قم بتوسيع "Analytics" لتحديد موقع Data Factory: "Products available by region". تخزن البيانات (Azure Storage، وAzure SQL Database، وما إلى ذلك) وتحسب (HDInsight، وما إلى ذلك) التي يستخدمها مصنع البيانات في مناطق أخرى.

    شغّل الأمر التالي، وأدخل اسم المستخدم وكلمة المرور اللذين تستخدمهما لتسجيل الدخول إلى مدخل Microsoft Azure:

    Connect-AzAccount
    

    شغّل الأمر التالي لعرض جميع الاشتراكات لهذا الحساب:

    Get-AzSubscription
    

    شغّل الأمر التالي لتحديد الاشتراك الذي تريد العمل معه. استبدل SubscriptionId بـ ID الخاص باشتراك Azure الخاص بك:

    Select-AzSubscription -SubscriptionId "<SubscriptionId>"    
    
  6. أنشئ مجموعة الموارد: ADFTutorialResourceGroup إذا لم تكن موجودة بالفعل في اشتراكك.

    New-AzResourceGroup -Name $resourceGroupName -Location "East Us" 
    
  7. أنشئ مصنع البيانات.

     $df = Set-AzDataFactoryV2 -Location EastUS -Name $dataFactoryName -ResourceGroupName $resourceGroupName
    

    نفذ الأمر التالي للاطلاع على الإخراج الناتج:

    $df
    

إنشاء وقت تشغيل التكامل المستضاف ذاتيًا

في هذا القسم، تنشئ وقت تشغيل تكامل مستضاف ذاتيًا وتربطه بـ Azure VM في شبكة Azure الافتراضية نفسها حيث توجد مجموعة HDInsight الخاصة بك.

  1. إنشاء وقت تشغيل تكامل ذاتي الاستضافة. استخدم اسمًا فريدًا في حالة وجود وقت تشغيل تكامل آخر بالاسم نفسه.

    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName -Name $selfHostedIntegrationRuntimeName -Type SelfHosted
    

    ينشئ هذا الأمر تسجيلاً منطقيًا لوقت تشغيل التكامل المستضاف ذاتيًا.

  2. استخدم PowerShell لاسترداد مفاتيح المصادقة لتسجيل وقت تشغيل التكامل المستضاف ذاتيًا. انسخ أحد مفاتيح تسجيل وقت تشغيل التكامل المستضاف ذاتيًا.

    Get-AzDataFactoryV2IntegrationRuntimeKey -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName -Name $selfHostedIntegrationRuntimeName | ConvertTo-Json
    

    فيما يلي ناتج العينة:

    {
        "AuthKey1":  "IR@0000000000000000000000000000000000000=",
        "AuthKey2":  "IR@0000000000000000000000000000000000000="
    }
    

    دوّن قيمة AuthKey1 دون علامة اقتباس النص.

  3. أنشئ Azure VM وانضم إليه في الشبكة الافتراضية نفسها التي تحتوي على مجموعة HDInsight الخاصة بك. للحصول على التفاصيل، راجع كيفية إنشاء الأجهزة الظاهرية. انضم إليها في شبكة Azure الظاهرية.

  4. على جهاز Azure الظاهري، قم بتنزيل وقت تشغيل التكامل المستضاف ذاتيا. استخدم مفتاح المصادقة الذي تم الحصول عليه في الخطوة السابقة لتسجيل وقت تشغيل التكامل المستضاف ذاتيًا يدويًا.

    سجل وقت تشغيل التكامل

    ترى الرسالة التالية عند تسجيل وقت تشغيل التكامل المستضاف ذاتيا بنجاح: تم التسجيل بنجاح

    ترى الصفحة التالية عندما تكون العقدة متصلة بالخدمة السحابية: العقدة متصلة

خدمات مرتبطة بالتأليف

يمكنك تأليف ونشر اثنتين من الخدمات المرتبطة في هذا القسم:

  • خدمة مرتبطة بتخزين Azure تربط حساب Azure Storage بمُنشئ البيانات. هذا التخزين هو التخزين الأساسي الذي تستخدمه مجموعة HDInsight الخاصة بك. في هذه الحالة، نستخدم أيضًا حساب Azure Storage هذا للاحتفاظ بنص Hive النصي وإخراج البرنامج النصي.
  • خدمة مرتبطة بـ HDInsight. يرسل Azure Data Factory البرنامج النصي لـ Apache Hive إلى نظام مجموعة HDInsight هذا للتنفيذ.​

خدمة Azure Storage المرتبطة

أنشئ ملف JSON باستخدام المحرر الذي تفضله، وانسخ تعريف JSON التالي لخدمة مرتبطة في مساحة تخزين Azure، ثم احفظ الملف بهذا الاسم MyStorageLinkedService.json.

{
    "name": "MyStorageLinkedService",
    "properties": {
      "type": "AzureStorage",
      "typeProperties": {
        "connectionString": "DefaultEndpointsProtocol=https;AccountName=<storageAccountName>;AccountKey=<storageAccountKey>"
      },
      "connectVia": {
        "referenceName": "MySelfhostedIR",
        "type": "IntegrationRuntimeReference"
      }  
    }
}

استبدل <accountname> و<accountkey> باسم ومفتاح حسابك على Azure Storage.

خدمة مرتبطة بـ HDInsight

أنشئ ملف JSON باستخدام المحرر الذي تفضله، وانسخ تعريف JSON التالي للخدمة المرتبطة بـ Azure HDInsight، ثم احفظ الملف بهذا الاسم MyHDInsightLinkedService.json.

{
  "name": "MyHDInsightLinkedService",
  "properties": {     
      "type": "HDInsight",
      "typeProperties": {
          "clusterUri": "https://<clustername>.azurehdinsight.net",
          "userName": "<username>",
          "password": {
            "value": "<password>",
            "type": "SecureString"
          },
          "linkedServiceName": {
            "referenceName": "MyStorageLinkedService",
            "type": "LinkedServiceReference"
          }
      },
      "connectVia": {
        "referenceName": "MySelfhostedIR",
        "type": "IntegrationRuntimeReference"
      }
  }
}

حدّث قيم الخصائص التالية في تعريف الخدمة المرتبطة:

  • userName. اسم مستخدم تسجيل دخول المجموعة الذي حددته عند إنشائها.

  • password. كلمة المرور للمستخدم.

  • clusterUri. حدد عنوان URL الخاص بمجموعة HDInsight بالتنسيق التالي: https://<clustername>.azurehdinsight.net. تفترض هذه المقالة أن لديك حق الوصول إلى المجموعة عبر الإنترنت. على سبيل المثال، يمكنك الاتصال بالمجموعة في https://clustername.azurehdinsight.net. يستخدم هذا العنوان البوابة العامة، والتي لا تتوفر إذا كنت قد استخدمت مجموعات أمان الشبكة (NSGs) أو المسارات المحددة من قبل المستخدم (UDRs) لتقييد الوصول من الإنترنت. ليرسل Data Factory المهام إلى مجموعات HDInsight في شبكة Azure الافتراضية، يجب تكوين شبكة Azure الافتراضية الخاصة بك بطريقة يمكن من خلالها حل عنوان URL لعنوان IP الخاص بالبوابة التي تستخدمها HDInsight.

    1. من بوابة Azure، افتح الشبكة الافتراضية التي يوجد بها HDInsight. افتح واجهة الشبكة بالاسم بدءا من nic-gateway-0. دوّن عنوان IP الخاص به. على سبيل المثال، 10.6.0.15.

    2. إذا كانت شبكة Azure الظاهرية تحتوي على خادم DNS، فقم بتحديث سجل DNS بحيث يمكن حل عنوان URL https://<clustername>.azurehdinsight.net لنظام مجموعة HDInsight إلى 10.6.0.15. هذا هو النهج الموصى به. إذا لم يكن لديك خادم DNS في شبكة Azure الافتراضية، فإنه يمكنك حل هذا مؤقتًا عن طريق تحرير ملف المضيفين (C:\Windows\System32\drivers\ إلخ) لجميع الأجهزة الافتراضية التي تم تسجيلها كعقد وقت تشغيل تكامل مستضافة ذاتيًا عن طريق إضافة إدخال مثل هذا:

      10.6.0.15 myHDIClusterName.azurehdinsight.net

إنشاء linked services

في PowerShell، قم بالتبديل إلى المجلد، حيث أنشأت ملفات JSON، وشغّل الأمر التالي لنشر الخدمات المرتبطة:

  1. في PowerShell، قم بالتبديل إلى المجلد حيث أنشأت ملفات JSON.

  2. شغّل الأمر التالي لإنشاء خدمة مرتبطة بالتخزين في Azure.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "MyStorageLinkedService" -File "MyStorageLinkedService.json"
    
  3. شغّل الأمر التالي لإنشاء خدمة Azure HDInsight مرتبطة.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "MyHDInsightLinkedService" -File "MyHDInsightLinkedService.json"
    

تأليف تدفق

في هذه الخطوة، يمكنك إنشاء تدفق جديد مع نشاط Hive. يقوم النشاط بتنفيذ برنامج Hive النصي لإرجاع البيانات من نموذج الجدول وحفظها في المسار الذي حددته. أنشئ ملف JSON في المحرر المفضل لديك، وانسخ تعريف JSON التالي لتعريف البنية الأساسية لبرنامج ربط العمليات، واحفظه باسم MyHivePipeline.json.

{
  "name": "MyHivePipeline",
  "properties": {
    "activities": [
      {
        "name": "MyHiveActivity",
        "type": "HDInsightHive",
        "linkedServiceName": {
            "referenceName": "MyHDILinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
          "scriptPath": "adftutorial\\hivescripts\\hivescript.hql",
          "getDebugInfo": "Failure",
          "defines": {           
            "Output": "wasb://<Container>@<StorageAccount>.blob.core.windows.net/outputfolder/"
          },
          "scriptLinkedService": {
            "referenceName": "MyStorageLinkedService",
            "type": "LinkedServiceReference"
          }
        }
      }
    ]
  }
}

لاحظ النقاط التالية:

  • يشير scriptPath إلى المسار إلى البرنامج النصي Hive على حساب تخزين Azure الذي استخدمته ل MyStorageLinkedService. يتمتع المسار بحساسية حالة الأحرف.
  • الإخراج هو وسيطة مستخدمة في البرنامج النصي Hive. استخدم تنسيق wasb://<Container>@<StorageAccount>.blob.core.windows.net/outputfolder/ لتوجيهه إلى مجلد موجود على Azure Storage. يتمتع المسار بحساسية حالة الأحرف.

قم بالتبديل إلى المجلد حيث أنشأت ملفات JSON، وشغّل الأمر التالي لنشر التدفق:

Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name $pipelineName -File "MyHivePipeline.json"

ابدأ التدفق

  1. ابدأ تشغيل تدفق. تؤدي هذه الخطوة أيضًا إلى التقاط معرّف تشغيل التدفق للمراقبة في المستقبل.

    $runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName $pipelineName
    
  2. شغّل البرنامج النصي التالي للتحقق باستمرار من حالة تشغيل التدفق حتى ينتهي.

    while ($True) {
        $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)
    
        if(!$result) {
            Write-Host "Waiting for pipeline to start..." -foregroundcolor "Yellow"
        }
        elseif (($result | Where-Object { $_.Status -eq "InProgress" } | Measure-Object).count -ne 0) {
            Write-Host "Pipeline run status: In Progress" -foregroundcolor "Yellow"
        }
        else {
            Write-Host "Pipeline '"$pipelineName"' run finished. Result:" -foregroundcolor "Yellow"
            $result
            break
        }
        ($result | Format-List | Out-String)
        Start-Sleep -Seconds 15
    }
    
    Write-Host "Activity `Output` section:" -foregroundcolor "Yellow"
    $result.Output -join "`r`n"
    
    Write-Host "Activity `Error` section:" -foregroundcolor "Yellow"
    $result.Error -join "`r`n"
    

    إليك ناتج تشغيل العينة:

    Pipeline run status: In Progress
    
    ResourceGroupName : ADFV2SampleRG2
    DataFactoryName   : SampleV2DataFactory2
    ActivityName      : MyHiveActivity
    PipelineRunId     : 000000000-0000-0000-000000000000000000
    PipelineName      : MyHivePipeline
    Input             : {getDebugInfo, scriptPath, scriptLinkedService, defines}
    Output            :
    LinkedServiceName :
    ActivityRunStart  : 9/18/2017 6:58:13 AM
    ActivityRunEnd    :
    DurationInMs      :
    Status            : InProgress
    Error             :
    
    Pipeline ' MyHivePipeline' run finished. Result:
    
    ResourceGroupName : ADFV2SampleRG2
    DataFactoryName   : SampleV2DataFactory2
    ActivityName      : MyHiveActivity
    PipelineRunId     : 0000000-0000-0000-0000-000000000000
    PipelineName      : MyHivePipeline
    Input             : {getDebugInfo, scriptPath, scriptLinkedService, defines}
    Output            : {logLocation, clusterInUse, jobId, ExecutionProgress...}
    LinkedServiceName :
    ActivityRunStart  : 9/18/2017 6:58:13 AM
    ActivityRunEnd    : 9/18/2017 6:59:16 AM
    DurationInMs      : 63636
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    Activity Output section:
    "logLocation": "wasbs://adfjobs@adfv2samplestor.blob.core.windows.net/HiveQueryJobs/000000000-0000-47c3-9b28-1cdc7f3f2ba2/18_09_2017_06_58_18_023/Status"
    "clusterInUse": "https://adfv2HivePrivate.azurehdinsight.net"
    "jobId": "job_1505387997356_0024"
    "ExecutionProgress": "Succeeded"
    "effectiveIntegrationRuntime": "MySelfhostedIR"
    Activity Error section:
    "errorCode": ""
    "message": ""
    "failureType": ""
    "target": "MyHiveActivity"
    
  3. تحقق من مجلد outputfolder بحثاً عن ملف جديد تم إنشاؤه كنتيجة استعلام Hive، يجب أن يبدو مثل الناتج النموذجي التالي:

    8 en-US SCH-i500 California
    23 en-US Incredible Pennsylvania
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    246 en-US SCH-i500 District Of Columbia
    246 en-US SCH-i500 District Of Columbia
    

نفّذت الخطوات التالية في هذا البرنامج التعليمي:

  • إنشاء data factory.
  • تأليف وإعداد وقت تشغيل التكامل المستضاف ذاتيًا
  • تأليف خدمات مرتبطة ونشرها.
  • تأليف ونشر تدفق يحتوي على نشاط Hive.
  • ابدأ تشغيل تدفق.
  • راقب عملية تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية
  • التحقق من صحة الناتج.

انتقل إلى البرنامج التعليمي التالي لمعرفة المزيد حول تحويل البيانات باستخدام مجموعة Spark على Azure: