Bagikan melalui


Menggunakan DistCp untuk menyalin data antara Azure Storage Blobs dan Azure Data Lake Storage Gen2

Anda dapat menggunakan DistCp untuk menyalin data antara akun penyimpanan V2 serbaguna dan akun penyimpanan V2 serbaguna dengan namespace hierarki diaktifkan. Artikel ini memberikan petunjuk tentang cara menggunakan alat DistCp.

DistCp menyediakan berbagai parameter baris perintah dan kami sangat mendorong Anda untuk membaca artikel ini guna mengoptimalkan penggunaannya. Artikel ini menunjukkan fungsi dasar saat berfokus pada penggunaannya untuk menyalin data ke akun yang diaktifkan namespace hierarki.

Prasyarat

  • Langganan Azure. Untuk informasi selengkapnya, lihat Dapatkan uji coba gratis Azure.
  • Akun Azure Storage yang ada tanpa kemampuan Data Lake Storage Gen2 (namespace hierarki) diaktifkan.
  • Akun Azure Storage yang ada tanpa kemampuan Data Lake Storage Gen2 (namespace hierarki) diaktifkan. Untuk petunjuk tentang cara pembuatannya, lihat Membuat akun Azure Storage
  • Kontainer yang telah dibuat di akun penyimpanan dengan namespace hierarki diaktifkan.
  • Klaster Azure HDInsight dengan akses ke akun penyimpanan dengan fitur namespace hierarki diaktifkan. Untuk informasi selengkapnya, lihat Menggunakan Azure Data Lake Storage Gen2 dengan kluster Azure HDInsight. Pastikan Anda mengaktifkan Desktop Jauh untuk klaster tersebut.

Menggunakan DistCp dari klaster Linux HDInsight

Kluster HDInsight dilengkapi dengan utilitas DistCp, yang dapat digunakan untuk menyalin data dari sumber yang berbeda ke dalam klaster HDInsight. Jika Anda telah mengonfigurasi klaster HDInsight untuk menggunakan Azure Blob Storage dan Azure Data Lake Storage bersama-sama, utilitas DistCp juga dapat digunakan di luar cara biasa untuk menyalin data. Di bagian ini, kami melihat cara menggunakan utilitas DistCp.

  1. Buat sesi SSH ke klaster HDI Anda. Untuk informasi selengkapnya, lihat Menyambungkan ke kluster HDInsight berbasis Linux.

  2. Pastikan apakah Anda dapat mengakses akun V2 serbaguna yang ada (tanpa namespace hierarki diaktifkan).

    hdfs dfs -ls wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/
    

    Output harus menyediakan daftar isi dalam kontainer.

  3. Demikian pula, pastikan apakah Anda dapat mengakses akun penyimpanan dengan namespace hierarki yang diaktifkan dari klaster tersebut. Jalankan perintah berikut:

    hdfs dfs -ls abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/
    

    Output harus menyediakan daftar file/folder di akun penyimpanan Data Lake.

  4. Gunakan DistCp untuk menyalin data dari WASB ke akun Data Lake Storage.

    hadoop distcp wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder
    

    Perintah menyalin konten folder /example/data/gutenberg/ dalam penyimpanan Blob ke /myfolder di akun Data Lake Storage.

  5. Demikian pula, gunakan DistCp untuk menyalin data dari akun Data Lake Storage ke Blob Storage (WASB).

    hadoop distcp abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg
    

    Perintah menyalin konten /myfolder di akun Data Lake Store ke folder /example/data/gutenberg/ di WASB.

Pertimbangan performa saat menggunakan DistCp

Karena granularitas terendah DistCp adalah satu file, pengaturan jumlah maksimum salinan simultan adalah parameter terpenting untuk mengoptimalkannya terhadap Data Lake Storage. Jumlah salinan simultan sama dengan jumlah parameter pemeta (m) pada baris perintah. Parameter ini menentukan jumlah maksimum pemeta yang digunakan untuk menyalin data. Nilai default adalah 20.

Contoh

hadoop distcp -m 100 wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder

Bagaimana cara menentukan jumlah pemeta yang akan digunakan?

Berikut adalah beberapa panduan yang dapat Anda gunakan.

  • Langkah 1: Tentukan total memori yang tersedia untuk antrean aplikasi YARN 'default' - Langkah pertamanya adalah menentukan memori yang tersedia untuk antrean aplikasi YARN 'default'. Informasi ini tersedia di portal Ambari yang terkait dengan klaster. Navigasi ke YARN dan lihat tab Konfigurasi untuk melihat memori YARN yang tersedia untuk antrean aplikasi 'default'. Ini adalah total memori yang tersedia untuk pekerjaan DistCp Anda (yang sebenarnya merupakan pekerjaan MapReduce).

  • Langkah 2: Hitung jumlah pemeta - Nilai m sama dengan quotient total memori YARN yang dibagi dengan ukuran kontainer YARN. Informasi ukuran kontainer YARN juga tersedia di portal Ambari. Navigasi ke YARN dan lihat tab Konfigurasi. Ukuran kontainer YARN ditampilkan di jendela ini. Persamaan untuk sampai pada jumlah pemeta (m) adalah

    m = (jumlah node * memori YARN untuk setiap node) / ukuran kontainer YARN

Contoh

Mari kita anggap bahwa Anda memiliki klaster 4x D14v2s dan Anda mencoba mentransfer 10 TB data dari 10 folder yang berbeda. Masing-masing folder berisi beragam jumlah data dan ukuran file dalam setiap folder berbeda.

  • Total memori YARN: Dari portal Ambari Anda menentukan bahwa memori YARN adalah 96 GB untuk simpul D14. Jadi, total memori YARN untuk empat klaster simpul adalah:

    Memori YARN = 4 * 96GB = 384GB

  • Jumlah pemeta: Dari portal Ambari Anda menentukan bahwa ukuran kontainer YARN adalah 3.072 MB untuk simpul kluster D14. Jadi, jumlah pemeta adalah:

    m = (4 node * 96GB) / 3072MB = 128 pemeta

Jika aplikasi lain menggunakan memori, maka Anda dapat memilih untuk menggunakan hanya sebagian memori YARN kluster Anda untuk DistCp.

Menyalin himpunan data besar

Jika ukuran himpunan data yang akan dipindahkan besar (misalnya, >1 TB) atau jika Anda memiliki banyak folder yang berbeda, Anda harus mempertimbangkan penggunaan beberapa pekerjaan DistCp. Kemungkinan tidak ada perolehan performa, tetapi ini akan menyebarkan pekerjaan sehingga jika ada pekerjaan yang gagal, Anda hanya perlu memulai ulang pekerjaan tertentu tersebut, bukan seluruh pekerjaan.

Batasan

  • DistCp mencoba membuat pemeta yang ukurannya mirip untuk mengoptimalkan performa. Meningkatkan jumlah pemeta mungkin tidak selalu meningkatkan performa.

  • DistCp hanya terbatas pada satu pemeta per file. Oleh karena itu, Anda tidak boleh memiliki lebih banyak pemeta daripada file yang dimiliki. Karena DistCp hanya dapat menetapkan satu pemeta ke suatu file, ini membatasi jumlah konkurensi yang dapat digunakan untuk menyalin file besar.

  • Jika Anda memiliki sedikit file besar, maka Anda harus membaginya menjadi gugus file 256 MB guna memberi Anda potensi konkurensi lebih besar.