Bagikan melalui


Mentransformasi data di Azure Virtual Network menggunakan aktivitas Apache Hive di Azure Data Factory

BERLAKU UNTUK: Azure Data Factory Azure Synapse Analytics

Tip

Cobalah Data Factory di Microsoft Fabric, solusi analitik all-in-one untuk perusahaan. Microsoft Fabric mencakup semuanya mulai dari pergerakan data hingga ilmu data, analitik real time, kecerdasan bisnis, dan pelaporan. Pelajari cara memulai uji coba baru secara gratis!

Dalam tutorial ini, Anda menggunakan Azure PowerShell untuk membuat alur Azure Data Factory yang mengubah data menggunakan Aktivitas Apache Hive pada kluster Azure HDInsight yang berada di Azure Virtual Network (VNet). Anda akan melakukan langkah-langkah berikut dalam tutorial ini:

  • Membuat pabrik data.
  • Menulis dan menyiapkan waktu runtime integrasi yang dihosting sendiri
  • Menulis dan menyebarkan layanan tertaut.
  • Tulis dan sebarkan alur yang berisi aktivitas Apache Hive.
  • Memulai eksekusi alur.
  • Memantau eksekusi alur
  • verifikasi output.

Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.

Prasyarat

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Untuk memulai, lihat Menginstal Azure PowerShell. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

  • Akun Azure Storage. Anda membuat skrip Apache Hive, dan mengunggahnya ke penyimpanan Azure. Output dari skrip Apache Hive disimpan di akun penyimpanan ini. Dalam sampel ini, kluster Microsoft Azure HDInsight menggunakan akun Microsoft Azure Storage ini sebagai penyimpanan utama.

  • Azure Jaringan Virtual. Jika Anda tidak memiliki jaringan virtual Azure, buat dengan mengikuti instruksi ini. Dalam sampel ini, Microsoft Azure HDInsight berada dalam Microsoft Azure Virtual Network Azure. Berikut adalah sampel konfigurasi Microsoft Azure Virtual Network.

    Membuat jaringan virtual

  • Kluster HDInsight. Buat kluster Microsoft Azure HDInsight dan gabungkan ke jaringan virtual yang Anda buat di langkah sebelumnya dengan mengikuti artikel ini: Memperluas Azure Microsoft Azure HDInsight menggunakan Microsoft Azure Virtual Network. Berikut adalah sampel konfigurasi Microsoft Azure HDInsight dalam jaringan virtual.

    Microsoft Azure HDInsight dalam jaringan virtual

  • Azure PowerShell. Ikuti instruksi di Cara menginstal dan mengonfigurasi Azure PowerShell.

Unggah skrip Apache Hive ke akun Azure Blob Storage Anda

  1. Buat file Apache Hive SQL bernama hivescript.hql dengan konten berikut:

    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. Di Azure Blob Storage Anda, buat kontainer bernama adftutorial jika tidak ada.

  3. Buat folder bernama hivescripts.

  4. Unggah file hivescript.hql ke subfolder hivescripts.

Membuat pabrik data

  1. Menyediakan nama grup sumber daya Anda membuat grup sumber daya sebagai bagian dari tutorial ini. Namun, Anda dapat menggunakan grup sumber daya yang ada jika mau.

    $resourceGroupName = "ADFTutorialResourceGroup" 
    
  2. Tentukan nama pabrik data. Harus unik secara global.

    $dataFactoryName = "MyDataFactory09142017"
    
  3. Tentukan nama untuk alur.

    $pipelineName = "MyHivePipeline" # 
    
  4. Tentukan nama untuk runtime integrasi yang dihosting sendiri. Anda memerlukan runtime integrasi yang dihosting sendiri saat Data Factory perlu mengakses sumber daya (seperti Azure SQL Database) di dalam VNet.

    $selfHostedIntegrationRuntimeName = "MySelfHostedIR09142017" 
    
  5. Luncurkan PowerShell. Biarkan Azure PowerShell terbuka hingga akhir panduan mulai cepat ini. Jika Anda menutup dan membuka kembali, Anda perlu menjalankan perintah lagi. Untuk daftar wilayah Azure tempat Data Factory saat ini tersedia, pilih wilayah yang menarik minat Anda pada halaman berikut, lalu perluas Analitik untuk menemukan Data Factory: Produk yang tersedia menurut wilayah. Penyimpanan data (Azure Storage, Azure SQL Database, dll.) dan komputasi (HDInsight, dll.) yang digunakan oleh pabrik data dapat berada di wilayah lain.

    Jalankan perintah berikut dan masukkan nama pengguna serta kata sandi yang Anda gunakan untuk masuk ke portal Microsoft Azure:

    Connect-AzAccount
    

    Jalankan perintah berikut untuk menampilkan semua langganan untuk akun ini:

    Get-AzSubscription
    

    Jalankan perintah berikut untuk memilih langganan yang ingin Anda gunakan. Ganti SubscriptionId dengan ID langganan Azure Anda:

    Select-AzSubscription -SubscriptionId "<SubscriptionId>"    
    
  6. Buat grup sumber daya: ADFTutorialResourceGroup jika belum ada di langganan Anda.

    New-AzResourceGroup -Name $resourceGroupName -Location "East Us" 
    
  7. Buat pabrik data.

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

    Jalankan perintah berikut untuk melihat output:

    $df
    

Membuat runtime integrasi yang dihost sendiri

Di bagian ini, Anda membuat runtime integrasi yang dihosting sendiri dan mengaitkannya dengan komputer virtual Azure di Azure Virtual Network yang sama di tempat kluster HDInsight Anda berada.

  1. Buat Runtime integrasi yang dihosting sendiri Gunakan nama unik jika ada runtime integrasi lain dengan nama yang sama.

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

    Perintah ini membuat pendaftaran logis dari runtime integrasi yang dihosting sendiri.

  2. Gunakan PowerShell untuk mengambil kunci autentikasi untuk mendaftarkan runtime integrasi yang dihosting sendiri. Salin salah satu kunci untuk mendaftarkan runtime integrasi yang dihosting sendiri.

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

    Berikut adalah output sampel:

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

    Catat nilai AuthKey1 tanpa tanda kutip.

  3. Buat komputer virtual Azure dan gabungkan ke jaringan virtual yang sama yang berisi kluster Microsoft Azure HDInsight Anda. Untuk detailnya, lihat Cara membuat mesin virtual. Gabungkan ke dalam Azure Virtual Network.

  4. Di komputer virtual Azure, unduh runtime integrasi yang dihosting sendiri. Gunakan Kunci Autentikasi yang diperoleh di langkah sebelumnya untuk mendaftarkan runtime integrasi yang dihosting sendiri secara manual.

    Daftarkan runtime integrasi

    Anda melihat pesan berikut saat runtime integrasi yang dihost sendiri berhasil didaftarkan: Berhasil didaftarkan

    Anda melihat halaman berikut saat simpul tersambung ke layanan awan: Node tersambung

Layanan tertaut penulis

Anda menulis dan menyebarkan dua Layanan Tertaut di bagian ini:

  • Layanan tertaut Azure Storage yang menautkan akun penyimpanan Azure Anda ke pabrik data. Penyimpanan ini adalah penyimpanan utama yang digunakan oleh kluster Microsoft Azure HDInsight Anda. Dalam hal ini, kita juga menggunakan akun Microsoft Azure Storage ini untuk menyimpan skrip Apache Hive dan output skrip.
  • Layanan Tertaut Microsoft Azure HDInsight. Azure Data Factory mengirimkan skrip Hive ke kluster HDInsight ini untuk dieksekusi.

Layanan tertaut Microsoft Azure Storage

Buat file JSON menggunakan editor pilihan Anda, salin definisi JSON berikut dari layanan tertaut Microsoft Azure Storage, lalu simpan file sebagai MyStorageLinkedService.json.

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

Ganti < accountname > dan <accountkey> dengan nama dan kunci akun Microsoft Azure Storage Anda.

Layanan tertaut Microsoft Azure HDInsight

Buat file JSON menggunakan editor pilihan Anda, salin definisi JSON berikut dari layanan tertaut Microsoft Azure HDInsight, lalu simpan file sebagai 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"
      }
  }
}

Perbarui nilai untuk properti berikut ini dalam definisi layanan tertaut:

  • userName. Nama pengguna masuk kluster yang Anda tentukan saat membuat kluster.

  • password. Kata sandi untuk pengguna.

  • clusterUri. Tentukan URL kluster Microsoft Azure HDInsight Anda dalam format berikut: https://<clustername>.azurehdinsight.net. Artikel ini mengasumsikan Anda memiliki akses ke kluster melalui internet. Misalnya, Anda dapat terhubung ke kluster di https://clustername.azurehdinsight.net. Alamat ini menggunakan gateway publik, yang tidak tersedia jika Anda telah menggunakan kelompok keamanan jaringan (NSG) atau rute yang ditentukan pengguna (UDR) untuk membatasi akses dari internet. Agar Data Factory mengirimkan pekerjaan ke kluster Microsoft Azure HDInsight di Azure Virtual Network, Azure Virtual Network Anda perlu dikonfigurasi sedemikian rupa agar URL dapat diselesaikan ke alamat IP privat gateway yang digunakan oleh Microsoft Azure HDInsight.

    1. Dari portal Microsoft Azure, buka Microsoft Azure Virtual Network tempat Microsoft Azure HDInsight masuk. Buka antarmuka jaringan dengan nama yang dimulai dengan nic-gateway-0. Catat alamat IP privat. Misalnya: 10.6.0.15.

    2. Jika Azure Virtual Network Anda memiliki server DNS, perbarui catatan DNS agar URL kluster Microsoft Azure HDInsight https://<clustername>.azurehdinsight.net dapat diatasi ke 10.6.0.15. Ini adalah pendekatan yang direkomendasikan. Jika tidak memiliki server DNS di Azure Virtual Network, Anda dapat bekerja sementara dengan mengedit file host ini (C:\Windows\System32\drivers\etc) dari semua komputer virtual yang terdaftar sebagai simpul runtime integrasi yang dihosting sendiri dengan menambahkan entri seperti ini:

      10.6.0.15 myHDIClusterName.azurehdinsight.net

Membuat layanan tertaut

Di PowerShell, alihkan ke folder tempat Anda membuat file JSON, dan jalankan perintah berikut untuk menyebarkan layanan tertaut:

  1. Di PowerShell, alihkan ke folder tempat Anda membuat file JSON.

  2. Jalankan perintah berikut untuk membuat layanan tertaut Microsoft Azure Storage.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "MyStorageLinkedService" -File "MyStorageLinkedService.json"
    
  3. Jalankan perintah berikut untuk membuat layanan tertaut Microsoft Azure HDInsight.

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

Menulis alur

Dalam langkah ini, Anda membuat alur baru dengan aktivitas Apache Hive. Aktivitas ini menjalankan skrip Apache Hive untuk mengembalikan data dari tabel sampel dan menyimpannya ke jalur yang Anda tentukan. Buat file JSON di editor pilihan Anda, salin definisi JSON berikut dari definisi alur, dan simpan sebagai 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"
          }
        }
      }
    ]
  }
}

Perhatikan poin berikut:

  • scriptPath menunjuk ke jalur ke skrip Apache Hive di Akun Microsoft Azure Storage yang Anda gunakan untuk MyStorageLinkedService. Jalur tersebut peka huruf besar/kecil.
  • Output adalah argumen yang digunakan dalam Apache Hive. Gunakan format wasb://<Container>@<StorageAccount>.blob.core.windows.net/outputfolder/ untuk mengarahkannya ke folder yang sudah ada di Microsoft Azure Storage Anda. Jalur tersebut peka huruf besar/kecil.

Alihkan ke folder tempat Anda membuat file JSON, dan jalankan perintah berikut untuk menyebarkan alur:

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

Memulai alur

  1. Memulai eksekusi alur. Ini juga menangkap ID eksekusi alur untuk pemantauan di masa depan.

    $runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName $pipelineName
    
  2. Jalankan skrip berikut ini untuk terus memeriksa status eksekusi alur hingga selesai.

    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"
    

    Berikut adalah output dari eksekusi sampel:

    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. Periksa folder outputfolder untuk file baru yang dibuat sebagai hasil kueri Apache Hive, yang akan terlihat seperti sampel output berikut:

    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
    

Anda melakukan langkah-langkah berikut dalam tutorial ini:

  • Membuat pabrik data.
  • Menulis dan menyiapkan waktu runtime integrasi yang dihosting sendiri
  • Menulis dan menyebarkan layanan tertaut.
  • Tulis dan sebarkan alur yang berisi aktivitas Apache Hive.
  • Memulai eksekusi alur.
  • Memantau eksekusi alur
  • verifikasi output.

Lanjutkan ke tutorial berikut untuk mempelajari tentang mengubah data dengan menggunakan kluster Spark di Azure: