Aracılığıyla paylaş


Azure Data Factory’de Hive etkinliğini kullanarak Azure Sanal Ağ’daki verileri dönüştürme

UYGULANANLAR: Azure Data Factory Azure Synapse Analytics

İpucu

Kuruluşlar için hepsi bir arada analiz çözümü olan Microsoft Fabric'te Data Factory'yi deneyin. Microsoft Fabric , veri taşımadan veri bilimine, gerçek zamanlı analize, iş zekasına ve raporlamaya kadar her şeyi kapsar. Yeni bir deneme sürümünü ücretsiz olarak başlatmayı öğrenin!

Bu öğreticide, Azure PowerShell kullanarak Azure Sanal Ağ’daki bir HDInsight kümesinde Hive Etkinliği ile verileri dönüştüren bir Data Factory işlem hattı oluşturacaksınız. Bu öğreticide aşağıdaki adımları gerçekleştireceksiniz:

  • Veri fabrikası oluşturma.
  • Şirket içinde barındırılan tümleştirme çalışma zamanı yazma ve kurma
  • Bağlantılı hizmetler yazma ve dağıtma.
  • Hive etkinliği içeren bir işlem hattı yazma ve dağıtma.
  • Bir işlem hattı çalıştırması başlatma.
  • İşlem hattı çalıştırmasını izleme
  • çıktıyı doğrulama.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

Not

Azure ile etkileşim kurmak için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

  • Azure Depolama hesabı. Bir hive betiği oluşturun ve Azure depolama alanına yükleyin. Hive betiğinin çıktısı bu depolama hesabında depolanır. Bu örnekte, HDInsight kümesi bu Azure Depolama hesabını birincil depolama alanı olarak kullanır.

  • Azure Sanal Ağı. Bir Azure sanal ağınız yoksa bu yönergeleri izleyerek bir tane oluşturun. Bu örnekte HDInsight bir Azure Sanal Ağ içindedir. Azure Sanal Ağ’ın örnek yapılandırması aşağıda verilmiştir.

    Sanal ağ oluşturma

  • HDInsight kümesi. Bir HDInsight kümesi oluşturun ve önceki adımda oluşturduğunuz sanal ağa katmak için şu makaleyi izleyin: Bir Azure Sanal Ağ kullanarak Azure HDInsight’ı genişletme. Bir sanal ağda HDInsight’ın örnek yapılandırması aşağıda verilmiştir.

    Sanal ağda HDInsight

  • Azure PowerShell. Azure PowerShell’i yükleme ve yapılandırma bölümündeki yönergeleri izleyin.

Hive betiğini Blob Depolama hesabınıza yükleme

  1. Aşağıdaki içeriğe sahip hivescript.hql adlı bir Hive SQL dosyası oluşturun:

    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 depolama alanınızda henüz yoksa adftutorial adlı bir kapsayıcı oluşturun.

  3. hivescripts adlı bir klasör oluşturun.

  4. hivescript.hql dosyasını hivescripts alt klasörüne yükleyin.

Veri fabrikası oluşturma

  1. Kaynak grubu adını ayarlayın. Bu öğreticinin bir parçası olarak bir kaynak grubu oluşturun. Ancak, isterseniz mevcut bir kaynak grubunu kullanabilirsiniz.

    $resourceGroupName = "ADFTutorialResourceGroup" 
    
  2. Veri fabrikası adını belirtin. Genel olarak benzersiz olması gerekir.

    $dataFactoryName = "MyDataFactory09142017"
    
  3. İş hattı için bir ad belirtin.

    $pipelineName = "MyHivePipeline" # 
    
  4. Şirket içinde barındırılan tümleştirme çalışma zamanı adını belirtin. Data Factory’nin, bir sanal ağ içindeki kaynaklara (Azure SQL Veritabanı gibi) erişmesi gerektiğinde, şirket içinde barındırılan tümleştirme çalışma zamanına ihtiyaç duyacaksınız.

    $selfHostedIntegrationRuntimeName = "MySelfHostedIR09142017" 
    
  5. PowerShell’i başlatın. Bu hızlı başlangıcın sonuna kadar Azure PowerShell’i açık tutun. Kapatıp yeniden açarsanız komutları yeniden çalıştırmanız gerekir. Data Factory'nin kullanılabileceği Azure bölgelerinin bir listesi için bir sonraki sayfada ilgilendiğiniz bölgeleri seçin ve Analytics'i genişleterek Data Factory: Products available by region (Bölgeye göre kullanılabilir durumdaki ürünler) bölümünü bulun. Veri fabrikası tarafından kullanılan verileri depoları (Azure Depolama, Azure SQL Veritabanı vb.) ve işlemler (HDInsight vb.) başka bölgelerde olabilir.

    Aşağıdaki komutu çalıştırın ve Azure portalda oturum açmak için kullandığınız kullanıcı adı ve parolayı girin:

    Connect-AzAccount
    

    Bu hesapla ilgili tüm abonelikleri görmek için aşağıdaki komutu çalıştırın:

    Get-AzSubscription
    

    Çalışmak isteğiniz aboneliği seçmek için aşağıdaki komutu çalıştırın. SubscriptionId’yi Azure aboneliğinizin kimliği ile değiştirin:

    Select-AzSubscription -SubscriptionId "<SubscriptionId>"    
    
  6. Aboneliğinizde henüz yoksa ADFTutorialResourceGroup adlı kaynak grubunu oluşturun.

    New-AzResourceGroup -Name $resourceGroupName -Location "East Us" 
    
  7. Veri fabrikasını oluşturun.

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

    Çıktıyı görmek için aşağıdaki komutu yürütün:

    $df
    

Şirket içinde barındırılan IR oluşturma

Bu bölümde, şirket içinde barındırılan bir tümleştirme çalışma zamanı oluşturacak ve HDInsight kümenizin bulunduğu Azure Sanal Ağdaki bir Azure VM ile ilişkilendireceksiniz.

  1. Şirket içinde barındırılan tümleştirme çalışma zamanı oluşturun. Aynı ada sahip başka bir tümleştirme çalışma zamanı varsa benzersiz bir ad kullanın.

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

    Bu komut, şirket içinde barındırılan tümleştirme çalışma zamanının mantıksal bir kaydını oluşturur.

  2. Şirket içinde barındırılan tümleştirme çalışma zamanını kaydetmek üzere kimlik doğrulama anahtarlarını almak için PowerShell’i kullanın. Şirket içinde barındırılan tümleştirme çalışma zamanını kaydetmek için anahtarlardan birini kopyalayın.

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

    Örnek çıktı aşağıdaki gibidir:

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

    AuthKey1 değerini tırnak işareti olmadan not edin.

  3. Bir Azure VM oluşturun ve HDInsight kümenizi içeren aynı sanal ağa ekleyin. Ayrıntılar için bkz. Sanal makine oluşturma. Sanal makineleri bir Azure Sanal Ağa ekleyin.

  4. Azure VM’ye şirket içinde barındırılan tümleştirme çalışma zamanını indirin. Şirket içinde barındırılan tümleştirme çalışma zamanını el ile kaydetmek için önceki adımda elde edilen Kimlik Doğrulama Anahtarını kullanın.

    Tümleştirme çalışma zamanını kaydetme

    Şirket içinde barındırılan tümleştirme çalışma zamanı başarıyla kaydedildiğinde aşağıdaki iletiyi görürsünüz: Başarıyla kaydedildi

    Düğüm bulut hizmetine bağlandığında aşağıdaki sayfayı görürsünüz: Düğüm bağlı

Bağlı hizmetler oluşturma

Bu bölümde iki Bağlı Hizmet oluşturup dağıtacaksınız:

  • Bir Azure Depolama hesabını veri fabrikasına bağlayan Azure Depolama Bağlı Hizmeti. Bu depolama, HDInsight kümeniz tarafından kullanılan birincil depolamadır. Bu örnekte, bu Azure Depolama hesabını Hive betiğini ve komut dosyası çıktısını tutmak için de kullanırız.
  • Bir HDInsight Bağlı Hizmeti. Azure Data Factory, hive betiğini yürütme için bu HDInsight kümesine gönderir.

Azure Storage bağlı hizmeti

Tercih ettiğiniz düzenleyiciyi kullanarak bir JSON dosyası oluşturun, Azure Depolama bağlı hizmetinin aşağıdaki JSON tanımını kopyalayın ve ardından dosyayı MyStorageLinkedService.json olarak kaydedin.

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

<accountname> ve <accountkey> sözcüklerini Azure Depolama hesabınızın adı ve anahtarıyla değiştirin.

HDInsight bağlı hizmeti

Tercih ettiğiniz düzenleyiciyi kullanarak bir JSON dosyası oluşturun, Azure HDInsight bağlı hizmetinin aşağıdaki JSON tanımını kopyalayın ve dosyayı MyHDInsightLinkedService.json olarak kaydedin.

{
  "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"
      }
  }
}

Bağlı hizmet tanımında aşağıdaki özelliklerin değerlerini güncelleştirin:

  • userName. Kümeyi oluştururken belirttiğiniz küme oturum açma kullanıcı adı.

  • password. Kullanıcının parolası.

  • clusterUri. HDInsight kümenizin URL'sini şu biçimde belirtin: https://<clustername>.azurehdinsight.net. Bu makalede, kümeye internet üzerinden erişebildiğiniz varsayılır. Örneğin, https://clustername.azurehdinsight.net konumundaki kümeye bağlanabilirsiniz. Bu adres, İnternet'ten erişimi kısıtlamak için ağ güvenlik grupları (NSG) veya kullanıcı tanımlı yollar (UDR) kullandıysanız kullanılabilir olmayan ortak ağ geçidi kullanır. Data Factory’nin işleri Azure Sanal Ağdaki HDInsight kümelerine gönderebilmesi için Azure Sanal Ağınızı URL’nin HDInsight tarafından kullanılan ağ geçidine ait özel IP adresine çözümlenebileceği şekilde yapılandırmanız gerekir.

    1. Azure portalından, HDInsight’ın içinde bulunduğu Sanal Ağı açın. Adı nic-gateway-0 ile başlayan ağ arabirimini açın. Özel IP adresini not edin. Örneğin, 10.6.0.15.

    2. Azure sanal ağınızda DNS sunucusu varsa, HDInsight kümesi https://<clustername>.azurehdinsight.net URL’sinin 10.6.0.15 hedefine çözümlenebilmesi için DNS kaydını güncelleştirin. Bu, önerilen yaklaşımdır. Azure Sanal Ağınızda bir DNS sunucusu yoksa, şunun gibi bir giriş ekleyerek şirket içinde barındırılan tümleştirme çalışma zamanı düğümleri olarak kaydedilmiş tüm VM’lerin ana bilgisayar dosyalarını (C:\Windows\System32\drivers\etc) düzenleyerek bu sorunu geçici olarak çözebilirsiniz:

      10.6.0.15 myHDIClusterName.azurehdinsight.net

Bağlı hizmetler oluşturma

PowerShell’de, JSON dosyalarını oluşturduğunuz klasöre geçin ve bağlı hizmetleri dağıtmak için şu komutu çalıştırın:

  1. PowerShell'de, JSON dosyalarını oluşturduğunuz klasöre geçin.

  2. Azure Depolama bağlı hizmeti oluşturmak için şu komutu çalıştırın.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "MyStorageLinkedService" -File "MyStorageLinkedService.json"
    
  3. Azure HDInsight bağlı hizmeti oluşturmak için şu komutu çalıştırın.

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

İşlem hattı oluşturma

Bu adımda, Hive etkinliği ile bir işlem hattı oluşturacaksınız. Etkinlik, bir örnek tablodan veri döndürmek ve tanımladığınız bir yola kaydetmek üzere Hive betiğini yürütür. Tercih ettiğiniz düzenleyicide bir JSON dosyası oluşturun, şu işlem hattı JSON tanımını kopyalayın ve MyHivePipeline.json olarak kaydedin.

{
  "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"
          }
        }
      }
    ]
  }
}

Aaşağıdaki noktaları unutmayın:

  • scriptPath, MyStorageLinkedService için kullandığınız Azure Depolama Hesabında Hive betiğinin yoluna işaret eder. Bu yol büyük/küçük harfe duyarlıdır.
  • Çıktı, Hive betiğinde kullanılan bir değişkendir. Azure Depolama hesabınızda var olan bir klasörü işaret etmek için wasb://<Container>@<StorageAccount>.blob.core.windows.net/outputfolder/ biçimini kullanın. Bu yol büyük/küçük harfe duyarlıdır.

JSON dosyalarını oluşturduğunuz klasöre geçin ve işlem hattını dağıtmak için aşağıdaki komutu çalıştırın:

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

İşlem hattı başlatma

  1. Bir işlem hattı çalıştırması başlatma. Ayrıca, gelecekte izlemek üzere işlem hattı çalıştırma kimliğini yakalar.

    $runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName $pipelineName
    
  2. İşlem hattı çalıştırma durumunu tamamlanıncaya kadar sürekli olarak denetlemek için aşağıdaki betiği çalıştırın.

    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"
    

    Örnek çalıştırmanın çıktısı aşağıdaki gibidir:

    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. Hive sorgu sonucu olarak oluşturulan yeni dosya için outputfolder klasörünü denetleyin; aşağıdaki örnek çıktı gibi görünmelidir:

    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
    

Bu öğreticide aşağıdaki adımları gerçekleştirdiniz:

  • Veri fabrikası oluşturma.
  • Şirket içinde barındırılan tümleştirme çalışma zamanı yazma ve kurma
  • Bağlantılı hizmetler yazma ve dağıtma.
  • Hive etkinliği içeren bir işlem hattı yazma ve dağıtma.
  • Bir işlem hattı çalıştırması başlatma.
  • İşlem hattı çalıştırmasını izleme
  • çıktıyı doğrulama.

Azure üzerinde bir Spark kümesi kullanarak veri dönüştürme hakkında bilgi edinmek için aşağıdaki öğreticiye geçin: