Memindahkan data dari HDFS lokal menggunakan Azure Data Factory

Catatan

Artikel ini berlaku untuk versi 1 dari Azure Data Factory. Jika Anda menggunakan versi layanan Azure Data Factory saat ini, lihat konektor HDFS di V2.

Artikel ini menjelaskan cara menggunakan Aktivitas Salin di Azure Data Factory untuk memindahkan data dari HDFS lokal. Ini dibuat pada artikel Aktivitas Pergerakan Data, yang menyajikan ikhtisar umum pergerakan data dengan aktivitas salin.

Anda dapat menyalin data dari HDFS ke penyimpanan data sink yang didukung. Untuk daftar penyimpanan data yang didukung sebagai sink oleh aktivitas salin, lihat tabel Penyimpanan data yang didukung. Data factory saat ini hanya mendukung pemindahan data dari HDFS lokal ke penyimpanan data lain, tetapi tidak untuk memindahkan data dari penyimpanan data lain ke HDFS lokal.

Catatan

Aktivitas Salin tidak menghapus file sumber setelah berhasil disalin ke tujuan. Jika Anda perlu menghapus file sumber setelah penyalinan berhasil, buat aktivitas kustom untuk menghapus file, dan gunakan aktivitas di alur.

Catatan

Artikel ini menggunakan modul Azure Az PowerShell, yang merupakan modul PowerShell yang direkomendasikan untuk berinteraksi dengan Azure. Untuk mulai menggunakan modul Az PowerShell, lihat Menginstal Azure PowerShell. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Mengaktifkan konektivitas

layanan Azure Data Factory mendukung koneksi ke sumber HDFS lokal menggunakan Data Management Gateway. Lihat artikel memindahkan data antara lokasi lokal dan cloud untuk mempelajari tentang Data Management Gateway dan untuk instruksi langkah demi langkah tentang cara menyiapkan gateway. Gunakan gateway untuk menyambungkan ke HDFS meskipun dihosting di Azure IaaS VM.

Catatan

Pastikan Data Management Gateway dapat mengakses SEMUA [server node nama]:[port node nama] dan [server node data]:[port node data] dari klaster Hadoop. Default [port node nama] adalah 50070, dan default [port node data] adalah 50075.

Meskipun Anda dapat menginstal gateway pada mesin lokal yang sama atau Azure VM sebagai HDFS, kami sarankan Anda menginstal gateway pada mesin terpisah/Azure IaaS VM. Memiliki gateway pada mesin terpisah mengurangi friksi sumber daya dan meningkatkan kinerja. Ketika Anda menginstal gateway pada mesin terpisah, mesin harus dapat mengakses mesin dengan HDFS.

Memulai

Anda dapat membuat alur dengan aktivitas salin yang memindahkan data dari sumber HDFS menggunakan alat/API yang berbeda.

Cara termudah untuk membuat alur adalah dengan menggunakan Wizard Salin. Lihat Tutorial: Membuat alur menggunakan Wizard Salin untuk panduan singkat tentang membuat alur menggunakan Wizard Salin data.

Anda juga dapat menggunakan alat berikut untuk membuat saluran: Portal Microsoft Azure, Visual Studio, Azure PowerShell, template Azure Resource Manager, .NET API, dan REST API. Lihat Tutorial aktivitas salin untuk instruksi langkah demi langkah guna membuat alur dengan aktivitas salin.

Baik Anda menggunakan alat atau API, Anda melakukan langkah-langkah berikut untuk membuat alur yang memindahkan data dari penyimpanan data sumber ke penyimpanan data sink:

  1. Buat layanan tertaut untuk menautkan penyimpanan data input dan output ke pabrik data Anda.
  2. Buat kumpulan data untuk mewakili data input dan output untuk operasi salin.
  3. Buat jalur dengan aktivitas salinan yang mengambil set data sebagai input dan set data sebagai output.

Saat Anda menggunakan wizard, definisi JSON untuk entitas Data Factory ini (layanan tertaut, himpunan data, dan alur) secara otomatis dibuat untuk Anda. Saat Anda menggunakan alat/API (kecuali .NET API), Anda menentukan entitas Data Factory ini dengan menggunakan format JSON. Untuk contoh dengan definisi JSON untuk entitas Azure Data Factory yang digunakan untuk menyalin data dari penyimpanan data HDFS, lihat bagian Contoh JSON: Menyalin data dari HDFS lokal ke Azure Blob dari artikel ini.

Bagian berikut memberikan detail tentang properti JSON yang digunakan untuk menentukan entitas Azure Data Factory khusus untuk HDFS:

Properti layanan tertaut

Layanan tertaut menghubungkan penyimpanan data ke data factory. Anda membuat layanan tertaut dari jenis Hdfs untuk menautkan HDFS lokal ke data factory Anda. Tabel berikut memberikan deskripsi untuk elemen JSON khusus untuk layanan tertaut HDFS.

Properti Deskripsi Diperlukan
jenis Jenis properti harus diatur ke: Hdfs Ya
url URL ke HDFS Ya
authenticationType Anonim, atau Windows.

Untuk menggunakan autentikasi Kerberos untuk konektor HDFS, lihat bagian ini untuk menyiapkan lingkungan lokal Anda yang sesuai.
Ya
userName Nama pengguna untuk autentikasi Windows. Untuk autentikasi Kerberos, tentukan <username>@<domain>.com. Ya (untuk Autentikasi Windows)
kata sandi Kata sandi untuk autentikasi Windows. Ya (untuk Autentikasi Windows)
gatewayName Nama gateway yang harus digunakan layanan Azure Data Factory untuk menyambung ke HDFS. Ya
encryptedCredential Baru-output AzDataFactoryEncryptValue dari kredensial akses. Tidak

Menggunakan autentikasi Anonim

{
    "name": "hdfs",
    "properties":
    {
        "type": "Hdfs",
        "typeProperties":
        {
            "authenticationType": "Anonymous",
            "userName": "hadoop",
            "url" : "http://<machine>:50070/webhdfs/v1/",
            "gatewayName": "mygateway"
        }
    }
}

Menggunakan autentikasi Windows

{
    "name": "hdfs",
    "properties":
    {
        "type": "Hdfs",
        "typeProperties":
        {
            "authenticationType": "Windows",
            "userName": "<username>@<domain>.com (for Kerberos auth)",
            "password": "password",
            "url" : "http://<machine>:50070/webhdfs/v1/",
            "gatewayName": "mygateway"
        }
    }
}

Properti himpunan data

Untuk daftar lengkap bagian properti & yang tersedia untuk menentukan himpunan data, lihat artikel Membuat himpunan data. Bagian-bagian seperti struktur, ketersediaan, dan kebijakan himpunan data JSON mirip untuk semua jenis himpunan data (Azure SQL, blob Azure, tabel Azure, dll.).

Bagian typeProperties berbeda untuk setiap jenis himpunan data dan menyediakan informasi tentang lokasi data di penyimpanan data. Bagian typeProperties untuk himpunan data tipe FileShare (yang mencakup himpunan data HDFS) memiliki properti berikut

Properti Deskripsi Diperlukan
folderPath Jalur ke folder. Contoh: myfolder

Gunakan karakter escape ' \ ' untuk karakter khusus dalam string. For example: for folder\subfolder, specify folder\\subfolder and for d:\samplefolder, specify d:\\samplefolder.

Anda dapat menggabungkan properti ini dengan partitionBy untuk memiliki jalur folder berdasarkan irisan waktu mulai/tanggal akhir.
Ya
fileName Menentukan nama file dalam folderPath jika Anda ingin tabel merujuk ke file tertentu di folder. Jika Anda tidak menentukan nilai apa pun untuk properti ini, tabel akan menunjuk ke semua file dalam folder.

Ketika fileName tidak ditentukan untuk himpunan data output, nama file yang dihasilkan dalam format berikut:

Data.<Guid>.txt (misalnya: : Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt
Tidak
partitionedBy partitionedBy dapat digunakan untuk menentukan folderPath dinamis, nama file untuk data seri waktu. Contoh: folderPath di parameter untuk setiap jam data. Tidak
format Jenis format berikut didukung: TextFormat, JsonFormat, AvroFormat, OrcFormat, ParquetFormat. Atur properti jenis berdasarkan format ke salah satu nilai ini. Untuk informasi selengkapnya, lihat Bagian Format Teks, Format Json, Format Avro, Format Orc, dan Format Parket.

Jika Anda ingin menyalin file apa adanya antara penyimpanan berbasis file (salinan biner), lewati bagian format dalam definisi himpunan data input dan output.
Tidak
compression Menentukan jenis dan tingkat kompresi untuk data. Jenis yang didukung adalah: GZip, Deflate, BZip2, dan ZipDeflate. Level yang didukung adalah: Optimal dan Tercepat. Untuk informasi selengkapnya, lihat Format file dan kompresi di Azure Data Factory. Tidak

Catatan

filename dan fileFilter tak bisa digunakan secara bersamaan.

Menggunakan properti partitionedBy

Seperti disebutkan di bagian sebelumnya, Anda dapat menentukan folderPath dinamis dan nama file untuk data seri waktu dengan properti partitionedBy, fungsi Data Factory, dan variabel sistem.

Untuk mempelajari lebih lanjut tentang himpunan data deret waktu, penjadwalan, dan potongan, lihat artikel Membuat Himpunan Data, Menjadwalkan & Eksekusi, dan Membuat Alur.

Contoh 1:

"folderPath": "wikidatagateway/wikisampledataout/{Slice}",
"partitionedBy":
[
    { "name": "Slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyyMMddHH" } },
],

Dalam contoh ini, {Slice} diganti dengan nilai variabel sistem Data Factory SliceStart, dalam format yang ditentukan (YYYYMMDDHH). SliceStart mengacu pada waktu mulai irisan. folderPath berbeda untuk setiap irisan. Misalnya: wikidatagateway/wikisampledataout/2014100103 atau wikidatagateway/wikisampledataout/2014100104.

Contoh 2:

"folderPath": "wikidatagateway/wikisampledataout/{Year}/{Month}/{Day}",
"fileName": "{Hour}.csv",
"partitionedBy":
 [
    { "name": "Year", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyy" } },
    { "name": "Month", "value": { "type": "DateTime", "date": "SliceStart", "format": "MM" } },
    { "name": "Day", "value": { "type": "DateTime", "date": "SliceStart", "format": "dd" } },
    { "name": "Hour", "value": { "type": "DateTime", "date": "SliceStart", "format": "hh" } }
],

Dalam contoh ini, tahun, bulan, hari, dan waktu SliceStart diekstraksi ke dalam variabel terpisah yang digunakan oleh folderPath dan properti fileName.

Properti aktivitas salin

Untuk daftar lengkap bagian & properti yang tersedia untuk menentukan aktivitas, lihat artikel Membuat Alur. Properti seperti nama, deskripsi, tabel input dan output, serta kebijakan tersedia untuk semua jenis aktivitas.

Sedangkan properti yang tersedia di bagian typeProperties aktivitas bervariasi menurut setiap jenis aktivitas. Untuk aktivitas salin, ini bervariasi tergantung pada jenis sumber dan sink.

Untuk Aktivitas Salin, ketika sumber berjenis FileSystemSource, properti berikut tersedia di bagian typeProperties:

FileSystemSource mendukung properti berikut:

Properti Deskripsi Nilai yang diizinkan Diperlukan
rekursif Menunjukkan apakah data dibaca secara rekursif dari sub folder atau hanya dari folder yang ditentukan. True, False (default) Tidak

File yang didukung dan format kompresi

Lihat artikel File dan format kompresi Azure Data Factory untuk detailnya.

Contoh JSON: Menyalin data dari HDFS lokal ke Azure Blob

Contoh ini memperlihatkan cara menyalin data dari HDFS lokal ke Azure Blob Storage. Namun, data dapat disalin langsung ke salah satu sink yang disebutkan di sini menggunakan Aktivitas Salin di Azure Data Factory.

Contoh tersebut memberikan definisi JSON untuk entitas Data Factory berikut. Anda dapat menggunakan definisi ini untuk membuat alur untuk menyalin data dari HDFS ke Azure Blob Storage dengan menggunakan Visual Studio atau Azure PowerShell.

  1. Layanan tertaut jenis OnPremisesHdfs.
  2. Layanan tertaut jenis AzureStorage.
  3. Sebuah input himpunan data jenis FileShare.
  4. Sebuah output himpunan data jenis AzureBlob.
  5. Sebuah alur dengan Aktivitas Salin yang menggunakan FileSystemSource dan BlobSink.

Sampel menyalin data dari HDFS lokal ke Azure blob setiap jam. Properti JSON yang digunakan dalam sampel ini dijelaskan dalam beberapa bagian setelah sampel.

Sebagai langkah pertama, siapkan data management gateway. Instruksinya berada di artikel memindahkan data antara lokasi lokal dan cloud.

Layanan tertaut HDFS: Contoh ini menggunakan autentikasi Windows. Lihat bagian layanan tertaut HDFS untuk berbagai jenis autentikasi yang dapat Anda gunakan.

{
    "name": "HDFSLinkedService",
    "properties":
    {
        "type": "Hdfs",
        "typeProperties":
        {
            "authenticationType": "Windows",
            "userName": "Administrator",
            "password": "password",
            "url" : "http://<machine>:50070/webhdfs/v1/",
            "gatewayName": "mygateway"
        }
    }
}

Layanan tertaut Microsoft Azure Storage:

{
  "name": "AzureStorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

himpunan data input HDFS: Himpunan data ini mengacu pada folder HDFS DataTransfer/UnitTest/. Alur menyalin semua file di dalam folder ini ke tujuan.

Pengaturan "eksternal": "true" menginformasikan layanan Data Factory bahwa himpunan data berada di luar data factory dan tidak diproduksi oleh aktivitas di data factory.

{
    "name": "InputDataset",
    "properties": {
        "type": "FileShare",
        "linkedServiceName": "HDFSLinkedService",
        "typeProperties": {
            "folderPath": "DataTransfer/UnitTest/"
        },
        "external": true,
        "availability": {
            "frequency": "Hour",
            "interval":  1
        }
    }
}

himpunan data output Azure Blob:

Data ditulis ke blob baru setiap jam (frekuensi: jam, interval: 1). Jalur folder untuk blob dievaluasi secara dinamis berdasarkan waktu mulai irisan yang sedang diproses. Jalur folder menggunakan bagian tahun, bulan, hari, dan jam dari waktu mulai.

{
    "name": "OutputDataset",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/hdfs/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
            "format": {
                "type": "TextFormat",
                "rowDelimiter": "\n",
                "columnDelimiter": "\t"
            },
            "partitionedBy": [
                {
                    "name": "Year",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "yyyy"
                    }
                },
                {
                    "name": "Month",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "MM"
                    }
                },
                {
                    "name": "Day",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "dd"
                    }
                },
                {
                    "name": "Hour",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "HH"
                    }
                }
            ]
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Aktivitas salin dalam alur dengan sumber Sistem File dan Blob sink:

Alur berisi Aktivitas Salin yang dikonfigurasi untuk menggunakan himpunan data input dan output dan dijadwalkan untuk berjalan setiap jam. Dalam definisi alur JSON, jenis sumber diatur ke FileSystemSource dan jenis sink diatur ke BlobSink. Kueri SQL yang ditentukan untuk properti kueri memilih data dalam satu jam terakhir untuk disalin.

{
    "name": "pipeline",
    "properties":
    {
        "activities":
        [
            {
                "name": "HdfsToBlobCopy",
                "inputs": [ {"name": "InputDataset"} ],
                "outputs": [ {"name": "OutputDataset"} ],
                "type": "Copy",
                "typeProperties":
                {
                    "source":
                    {
                        "type": "FileSystemSource"
                    },
                    "sink":
                    {
                        "type": "BlobSink"
                    }
                },
                "policy":
                {
                    "concurrency": 1,
                    "executionPriorityOrder": "NewestFirst",
                    "retry": 1,
                    "timeout": "00:05:00"
                }
            }
        ],
        "start": "2014-06-01T18:00:00Z",
        "end": "2014-06-01T19:00:00Z"
    }
}

Gunakan autentikasi Kerberos untuk konektor HDFS

Ada dua opsi untuk mengatur lingkungan lokal ketika menggunakan autentikasi Kerberos untuk konektor HDFS. Anda dapat memilih yang lebih cocok dengan kasus Anda.

Opsi 1: Bergabung dengan mesin gateway di realm Kerberos

Persyaratan:

  • Mesin gateway perlu bergabung dengan realm Kerberos dan tidak dapat bergabung dengan domain Windows apa pun.

Cara mengonfigurasi:

Pada mesin gateway:

  1. Jalankan utilitas Ksetup untuk mengonfigurasi server dan realm KDC Kerberos.

    Mesin harus dikonfigurasi sebagai anggota grup kerja karena realm Kerberos berbeda dari domain Windows. Ini dapat dicapai dengan mengatur realm Kerberos dan menambahkan server KDC sebagai berikut. Ganti REALM.COM dengan realm masing-masing sesuai kebutuhan.

    Ksetup /setdomain REALM.COM
    Ksetup /addkdc REALM.COM <your_kdc_server_address>
    

    Mulai ulang mesin setelah menjalankan 2 perintah ini.

  2. Verifikasi konfigurasi dengan perintah Ksetup. Output akan terlihat seperti:

    Ksetup
    default realm = REALM.COM (external)
    REALM.com:
       kdc = <your_kdc_server_address>
    

Di Azure Data Factory:

  • Konfigurasikan konektor HDFS menggunakan autentikasi Windows bersama-sama dengan nama utama dan kata sandi Kerberos Anda untuk menyambungkan ke sumber data HDFS. Periksa bagian properti Layanan Tertaut HDFS pada detail konfigurasi.

Opsi 2: Aktifkan saling percaya antara domain Windows dan realm Kerberos

Persyaratan:

  • Mesin gateway harus bergabung dengan domain Windows.
  • Anda memerlukan izin untuk memperbarui pengaturan pengendali domain.

Cara mengonfigurasi:

Catatan

Ganti REALM.COM dan AD.COM dalam tutorial berikut dengan nama dan pengendali domain milik Anda.

Pada server KDC:

  1. Edit konfigurasi KDC dalam file krb5.conf agar KDC dapat mempercayai domain Windows dengan merujuk ke template konfigurasi berikut. Secara default, konfigurasi terletak di /etc/krb5.conf.

    [logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
    default_realm = REALM.COM
    dns_lookup_realm = false
    dns_lookup_kdc = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    
    [realms]
    REALM.COM = {
        kdc = node.REALM.COM
        admin_server = node.REALM.COM
    }
    AD.COM = {
    kdc = windc.ad.com
    admin_server = windc.ad.com
    }
    
    [domain_realm]
    .REALM.COM = REALM.COM
    REALM.COM = REALM.COM
    .ad.com = AD.COM
    ad.com = AD.COM
    
    [capaths]
    AD.COM = {
        REALM.COM = .
    }
    

    Mulai ulang layanan KDC setelah konfigurasi.

  2. Siapkan prinsipal bernama krbtgt/REALM.COM@AD.COM di server KDC dengan perintah berikut:

    Kadmin> addprinc krbtgt/REALM.COM@AD.COM
    
  3. Dalam hadoop.security.auth_to_local file konfigurasi layanan HDFS, tambahkan RULE:[1:$1@$0](.*\@AD.COM)s/\@.*//.

Di pengontrol domain:

  1. Jalankan perintah Ksetup berikut untuk menambahkan entri realm:

    Ksetup /addkdc REALM.COM <your_kdc_server_address>
    ksetup /addhosttorealmmap HDFS-service-FQDN REALM.COM
    
  2. Membangun kepercayaan dari domain Windows ke Realm Kerberos. [kata sandi] adalah kata sandi untuk krbtgt/REALM.COM@AD.COM prinsipal.

    netdom trust REALM.COM /Domain: AD.COM /add /realm /passwordt:[password]
    
  3. Pilih algoritma enkripsi yang digunakan di Kerberos.

    1. Masuk ke Manajer Server > Manajemen Kebijakan Grup > Domain > Objek Kebijakan Grup > Default atau Kebijakan Domain Aktif, dan Edit.

    2. Di jendela popup Group Policy Management Editor, buka Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options, dan konfigurasikan Keamanan jaringan: Konfigurasikan jenis Enkripsi yang diizinkan untuk Kerberos.

    3. Pilih algoritma enkripsi yang ingin Anda gunakan ketika Anda tersambung ke server KDC. Umumnya, Anda cukup memilih semua opsi.

      Config Encryption Types for Kerberos

    4. Gunakan perintah Ksetup untuk menentukan algoritma enkripsi yang akan digunakan pada REALM tertentu.

      ksetup /SetEncTypeAttr REALM.COM DES-CBC-CRC DES-CBC-MD5 RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96
      
  4. Buat pemetaan antara akun domain dan prinsipal Kerberos, untuk menggunakan prinsipal Kerberos di Windows Domain.

    1. Mulai alat Administratif >Pengguna dan Komputer Active Directory.

    2. Konfigurasikan fitur tingkat lanjut dengan mengeklik Tampilkan>Fitur Tingkat Lanjut.

    3. Cari akun tempat Anda ingin membuat pemetaan, dan klik kanan untuk menampilkan Pemetaan Nama> klik tab Nama Kerberos.

    4. Tambahkan prinsipal dari realm.

      Map Security Identity

Pada mesin gateway:

  • Jalankan perintah Ksetup berikut ini untuk menambahkan entri realm.

    Ksetup /addkdc REALM.COM <your_kdc_server_address>
    ksetup /addhosttorealmmap HDFS-service-FQDN REALM.COM
    

Di Azure Data Factory:

  • Konfigurasikan konektor HDFS menggunakan autentikasi Windows bersama-sama dengan Akun Domain atau Prinsipal Kerberos Anda untuk menyambungkan ke sumber data HDFS. Periksa bagian properti Layanan Tertaut HDFS pada detail konfigurasi.

Catatan

Untuk memetakan kolom dari set data sumber ke kolom dari set data sink, lihat Memetakan kolom set data di Azure Data Factory.

Kinerja dan Penyetelan

Lihat Performa Aktivitas Penyalinan & Panduan Pengaturan untuk mempelajari tentang faktor utama yang memengaruhi performa perpindahan data (Aktivitas Penyalinan) di Azure Data Factory dan berbagai cara untuk mengoptimalkannya.