Bermigrasi dari penyimpanan HDFS lokal ke Azure Storage dengan Azure Data Box

Anda dapat melakukan migrasi data dari penyimpanan HDFS lokal kluster Hadoop Anda ke Azure Storage (penyimpanan blob atau Data Lake Storage Gen2) dengan perangkat Data Box. Anda dapat memilih dari Data Box Disk, Data Box 80 TB, atau Data Box Heavy 770 TB.

Artikel ini membantu Anda menyelesaikan tugas-tugas berikut:

  • Bersiap untuk memigrasikan data Anda
  • Menyalin data Anda ke Data Box Disk, Data Box, atau perangkat Data Box Heavy
  • Kirim perangkat kembali ke Microsoft
  • Menerapkan izin akses ke file dan direktori (hanya Data Lake Storage Gen2)

Prasyarat

Anda memerlukan hal berikut untuk menyelesaikan migrasi.

Jika Anda siap, mari kita mulai.

Menyalin data Anda ke perangkat Data Box

Jika data Anda cocok dengan satu perangkat Data Box, maka Anda menyalin data ke perangkat Data Box.

Jika ukuran data Anda melebihi kapasitas perangkat Data Box, maka gunakan prosedur opsional untuk membagi data di beberapa perangkat Data Box lalu lakukan langkah ini.

Untuk menyalin data dari penyimpanan HDFS lokal Anda ke perangkat Data Box, Anda mengatur beberapa hal, lalu menggunakan alat DistCp .

Ikuti langkah-langkah ini untuk menyalin data melalui REST API penyimpanan Blob/Objek ke perangkat Data Box Anda. Antarmuka REST API membuat perangkat muncul sebagai penyimpanan HDFS ke kluster Anda.

  1. Sebelum Anda menyalin data melalui REST, identifikasi primitif keamanan dan koneksi untuk menyambungkan ke antarmuka REST pada Data Box atau Data Box Heavy. Masuk ke UI web lokal Data Box lalu masuk ke halaman Sambungkan dan salin. Terhadap akun penyimpanan Azure untuk perangkat Anda, di bawah Pengaturan akses, temukan, dan pilih REST.

  2. Dalam dialog Akses akun penyimpanan dan unggah data, salin titik akhir Blob service dan Kunci akun penyimpanan. Dari titik akhir blob service, hilangkan https:// dan garis miring akhir.

    Dalam hal ini, titik akhirnya adalah: https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/. Bagian host dari URI yang Anda gunakan adalah: mystorageaccount.blob.mydataboxno.microsoftdatabox.com. Misalnya, lihat cara Menyambungkan ke REST melalui http.

  3. Tambahkan titik akhir dan alamat IP simpul Data Box atau Data Box Heavy ke /etc/hosts pada setiap simpul.

    10.128.5.42  mystorageaccount.blob.mydataboxno.microsoftdatabox.com
    

    Jika Anda menggunakan beberapa mekanisme lain untuk DNS, Anda harus memastikan bahwa titik akhir Data Box dapat diselesaikan.

  4. Atur variabel shell azjars ke lokasi file jar hadoop-azure dan azure-storage. Anda dapat menemukan file-file ini pada direktori instalasi Hadoop.

    Untuk menentukan apakah file tersebut ada, gunakan perintah berikut: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure. Ganti tempat penampung <hadoop_install_dir> dengan jalur ke direktori tempat Anda menginstal Hadoop. Pastikan untuk menggunakan jalur yang sepenuhnya memenuhi syarat.

    Contoh:

    azjars=$hadoop_install_dir/share/hadoop/tools/lib/hadoop-azure-2.6.0-cdh5.14.0.jar azjars=$azjars,$hadoop_install_dir/share/hadoop/tools/lib/microsoft-windowsazure-storage-sdk-0.6.0.jar

  5. Buat kontainer penyimpanan yang ingin Anda gunakan untuk salinan data. Anda juga harus menentukan direktori tujuan sebagai bagian dari perintah ini. Ini dapat menjadi direktori tujuan dummy untuk saat ini.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -mkdir -p  wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Ganti tempat penampung <blob_service_endpoint> dengan nama titik akhir blob service Anda.

    • Ganti tempat penampung <account_key> dengan kunci akses akun Anda.

    • Ganti tempat penampung <container-name> dengan nama kontainer Anda.

    • Ganti tempat penampung <destination_directory> dengan nama direktori tempat Anda ingin menyalin data.

  6. Jalankan perintah daftar untuk memastikan bahwa kontainer dan direktori Anda dibuat.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -ls -R  wasb://<container_name>@<blob_service_endpoint>/
    
    • Ganti tempat penampung <blob_service_endpoint> dengan nama titik akhir blob service Anda.

    • Ganti tempat penampung <account_key> dengan kunci akses akun Anda.

    • Ganti tempat penampung <container-name> dengan nama kontainer Anda.

  7. Salin data dari HDFS Hadoop ke penyimpanan Blob Data Box, ke dalam kontainer yang Anda buat sebelumnya. Jika direktori yang Anda salin tidak ditemukan, perintah akan membuatnya secara otomatis.

    hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint<>=<account_key> \
    -filters <exclusion_filelist_file> \
    [-f filelist_file | /<source_directory> \
           wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Ganti tempat penampung <blob_service_endpoint> dengan nama titik akhir blob service Anda.

    • Ganti tempat penampung <account_key> dengan kunci akses akun Anda.

    • Ganti tempat penampung <container-name> dengan nama kontainer Anda.

    • Ganti tempat penampung <exlusion_filelist_file> dengan nama file yang berisi daftar pengecualian file Anda.

    • Ganti tempat penampung <source_directory> dengan nama direktori yang berisi data yang ingin Anda salin.

    • Ganti tempat penampung <destination_directory> dengan nama direktori tempat Anda ingin menyalin data.

    Opsi -libjars ini digunakan untuk menyediakan file hadoop-azure*.jar dan azure-storage*.jar dependen untuk distcp. Ini mungkin sudah terjadi untuk beberapa kluster.

    Contoh berikut menunjukkan bagaimana perintah distcp digunakan untuk menyalin data.

     hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.mystorageaccount.blob.mydataboxno.microsoftdatabox.com=myaccountkey \
    -filter ./exclusions.lst -f /tmp/copylist1 -m 4 \
    /data/testfiles \
    wasb://hdfscontainer@mystorageaccount.blob.mydataboxno.microsoftdatabox.com/data
    

    Untuk meningkatkan kecepatan penyalinan:

    • Cobalah untuk mengubah jumlah pemeta. (Jumlah default pemeta adalah 20. Contoh di atas menggunakan m = 4 pemeta.)

    • Coba -D fs.azure.concurrentRequestCount.out=<thread_number>. Ganti <thread_number> dengan jumlah utas per pemeta. Produk dari jumlah pemeta dan jumlah utas per pemeta, m*<thread_number>, tidak boleh melebihi 32.

    • Coba jalankan beberapa distcp secara paralel.

    • Ingat bahwa file besar memiliki performa lebih baik daripada file kecil.

    • Jika Anda memiliki file yang lebih besar dari 200 GB, sebaiknya ubah ukuran blok menjadi 100 MB dengan parameter berikut:

    hadoop distcp \ 
    -libjars $azjars \ 
    -Dfs.azure.write.request.size= 104857600 \ 
    -Dfs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ 
    -Dfs.azure.account.key.<blob_service_endpoint<>=<account_key> \ 
    -strategy dynamic \ 
    -Dmapreduce.map.memory.mb=16384 \ 
    -Dfs.azure.concurrentRequestCount.out=8 \ 
    -Dmapreduce.map.java.opts=-Xmx8196m \ 
    -m 4 \ 
    -update \ 
    /data/bigfile wasb://hadoop@mystorageaccount.blob.core.windows.net/bigfile
    

Mengirim Data Box ke Microsoft

Ikuti langkah-langkah ini untuk mempersiapkan dan mengirimkan perangkat Data Box ke Microsoft.

  1. Pertama, Mempersiapkan untuk mengirim Data Box atau Data Box Heavy Anda.

  2. Setelah persiapan perangkat selesai, unduh file BOM. Anda menggunakan BOM atau file manifes ini nanti untuk memverifikasi data yang diunggah ke Azure.

  3. Matikan perangkat lalu lepaskan kabelnya.

  4. Jadwalkan penjemputan dengan UPS.

  5. Setelah Microsoft menerima perangkat Anda, perangkat tersambung ke jaringan pusat data, dan data diunggah ke akun penyimpanan yang Anda tentukan saat Anda melakukan pemesanan perangkat. Pastikan terhadap file BOM bahwa semua data Anda diunggah ke Azure.

Menerapkan izin akses ke file dan direktori (hanya Data Lake Storage Gen2)

Anda sudah memiliki data ke akun Azure Storage Anda. Sekarang Anda menerapkan izin akses ke file dan direktori.

Catatan

Langkah ini diperlukan hanya jika Anda menggunakan Azure Data Lake Storage Gen2 sebagai penyimpanan data Anda. Jika Anda hanya menggunakan akun penyimpanan blob tanpa namespace hierarki sebagai penyimpanan data, Anda dapat melewati bagian ini.

Membuat perwakilan layanan untuk akun yang diaktifkan Azure Data Lake Storage Gen2 Anda

Untuk membuat perwakilan layanan, lihat Cara: Menggunakan portal untuk membuat aplikasi Microsoft Entra dan perwakilan layanan yang dapat mengakses sumber daya.

  • Ketika melakukan langkah-langkah dalam bagian artikel menetapkan aplikasi ke peran, pastikan untuk menetapkan peran Kontributor Data Blob Penyimpanan ke perwakilan layanan.

  • Saat melakukan langkah-langkah di bagian Dapatkan nilai untuk masuk dari artikel, simpan ID aplikasi, dan nilai rahasia klien ke dalam file teks. Kau membutuhkannya segera.

Membuat daftar file yang disalin dengan izinnya

Dari kluster Hadoop lokal, jalankan perintah ini:


sudo -u hdfs ./copy-acls.sh -s /{hdfs_path} > ./filelist.json

Perintah ini menghasilkan daftar file yang disalin dengan izinnya.

Catatan

Bergantung pada jumlah file dalam HDFS, perintah ini dapat membutuhkan waktu lama untuk eksekusi.

Membuat daftar identitas dan memetakannya ke identitas Microsoft Entra

  1. Unduh skrip copy-acls.py. Lihat bagian Mengunduh skrip pembantu dan menyiapkan simpul tepi Anda untuk menjalankannya dari artikel ini.

  2. Jalankan perintah ini untuk menghasilkan daftar identitas unik.

    
    ./copy-acls.py -s ./filelist.json -i ./id_map.json -g
    

    Skrip ini menghasilkan file bernama id_map.json yang memuat identitas yang perlu Anda petakan ke identitas berbasis ADD.

  3. Buka file id_map.json di editor teks.

  4. Untuk setiap objek JSON yang muncul dalam file, perbarui target atribut Nama Prinsipal (UPN) pengguna Microsoft Entra atau ObjectId (OID), dengan identitas yang dipetakan yang sesuai. Setelah selesai, simpan file. Anda akan membutuhkan file ini di langkah selanjutnya.

Menerapkan izin ke file yang disalin dan menerapkan pemetaan identitas

Jalankan perintah ini untuk menerapkan izin ke data yang Anda salin ke akun yang diaktifkan Data Lake Storage Gen2:

./copy-acls.py -s ./filelist.json -i ./id_map.json  -A <storage-account-name> -C <container-name> --dest-spn-id <application-id>  --dest-spn-secret <client-secret>
  • Ganti <storage-account-name> placeholder dengan nama akun penyimpanan.

  • Ganti tempat penampung <container-name> dengan nama kontainer Anda.

  • Ganti tempat penampung <application-id> dan <client-secret> dengan ID aplikasi dan rahasia klien yang Anda kumpulkan saat Anda membuat perwakilan layanan.

Lampiran: Membagi data di beberapa perangkat Data Box

Sebelum memindahkan data ke perangkat Data Box, Anda perlu mengunduh beberapa skrip pembantu, memastikan bahwa data Anda diatur agar pas ke perangkat Data Box, dan mengecualikan file yang tidak perlu.

Mengunduh skrip pembantu dan menyiapkan simpul tepi Anda untuk menjalankannya

  1. Dari simpul tepi atau kepala kluster Hadoop lokal Anda, jalankan perintah ini:

    
    git clone https://github.com/jamesbak/databox-adls-loader.git
    cd databox-adls-loader
    

    Perintah ini mengkloning repositori GitHub yang berisi skrip pembantu.

  2. Pastikan bahwa paket jq terinstal di komputer lokal Anda.

    
    sudo apt-get install jq
    
  3. Instal paket python Permintaan.

    
    pip install requests
    
  4. Atur izin eksekusi pada skrip yang diperlukan.

    
    chmod +x *.py *.sh
    
    

Memastikan data Anda teratur agar pas ke dalam perangkat Data Box

Jika ukuran data Anda melebihi ukuran satu perangkat Data Box, Anda dapat membagi file menjadi grup yang dapat Anda simpan ke beberapa perangkat Data Box.

Jika data Anda tidak melebihi ukuran satu perangkat Data Box, Anda dapat melanjutkan ke bagian berikutnya.

  1. Dengan izin yang ditingkatkan, jalankan skrip generate-file-list yang Anda unduh dengan mengikuti panduan di bagian sebelumnya.

    Berikut adalah deskripsi parameter perintah:

    sudo -u hdfs ./generate-file-list.py [-h] [-s DATABOX_SIZE] [-b FILELIST_BASENAME]
                     [-f LOG_CONFIG] [-l LOG_FILE]
                     [-v {DEBUG,INFO,WARNING,ERROR}]
                     path
    
    where:
    positional arguments:
    path                  The base HDFS path to process.
    
    optional arguments:
    -h, --help            show this help message and exit
    -s DATABOX_SIZE, --databox-size DATABOX_SIZE
                         The size of each Data Box in bytes.
    -b FILELIST_BASENAME, --filelist-basename FILELIST_BASENAME
                         The base name for the output filelists. Lists will be
                         named basename1, basename2, ... .
    -f LOG_CONFIG, --log-config LOG_CONFIG
                         The name of a configuration file for logging.
    -l LOG_FILE, --log-file LOG_FILE
                         Name of file to have log output written to (default is
                         stdout/stderr)
    -v {DEBUG,INFO,WARNING,ERROR}, --log-level {DEBUG,INFO,WARNING,ERROR}
                         Level of log information to output. Default is 'INFO'.
    
  2. Salin daftar file yang dihasilkan ke HDFS sehingga dapat diakses oleh pekerjaan DistCp .

    hadoop fs -copyFromLocal {filelist_pattern} /[hdfs directory]
    

Mengecualikan kunci yang tidak perlu

Anda perlu mengecualikan beberapa direktori dari pekerjaan DisCp. Misalnya, kecualikan direktori yang berisi informasi status yang menjaga kluster tetap berjalan.

Pada kluster Hadoop lokal tempat Anda berencana untuk memulai pekerjaan DistCp, buat file yang menentukan daftar direktori yang ingin Anda kecualikan.

Berikut contohnya:

.*ranger/audit.*
.*/hbase/data/WALs.*

Langkah berikutnya

Pelajari cara kerja Data Lake Storage Gen2 dengan kluster HDInsight. Untuk informasi selengkapnya, lihat Menggunakan Azure Data Lake Storage Gen2 dengan kluster Azure HDInsight.