全部产品
Search
文档中心

Object Storage Service:Migrasi Data HDFS ke OSS

更新时间:Nov 09, 2025

Topik ini menggunakan kluster Alibaba Cloud EMR sebagai contoh untuk menjelaskan cara memigrasikan data dari Sistem File Terdistribusi Hadoop (HDFS) ke Object Storage Service (OSS) menggunakan Alibaba Cloud Jindo DistCp.

Informasi latar belakang

Dalam lingkungan big data tradisional, HDFS sering digunakan sebagai penyimpanan dasar untuk data berskala besar. Alat paling umum untuk migrasi dan penyalinan data adalah alat DistCp yang disertakan dengan Hadoop. Namun, alat ini tidak dapat sepenuhnya memanfaatkan fitur-fitur OSS, mengakibatkan efisiensi rendah dan gagal menjamin konsistensi data. Selain itu, alat ini hanya menyediakan beberapa opsi fungsional dan tidak dapat memenuhi kebutuhan pengguna.

Alibaba Cloud Jindo DistCp adalah alat salin file terdistribusi yang menyalin file di dalam atau antar kluster berskala besar. Jindo DistCp menggunakan MapReduce untuk distribusi file, penanganan kesalahan, dan pemulihan. Alat ini menggunakan daftar file dan direktori sebagai input untuk tugas MapReduce. Setiap tugas menyalin sebagian file dari daftar sumber. Alat ini sepenuhnya mendukung skenario penyalinan data antar kluster HDFS, antara HDFS dan OSS, serta antara bucket OSS. Alat ini juga menyediakan berbagai parameter dan strategi penyalinan kustom.

Dibandingkan dengan Hadoop DistCp, menggunakan Alibaba Cloud Jindo DistCp untuk memigrasikan data dari HDFS ke OSS memiliki keunggulan berikut:

  • Efisiensi tinggi. Dapat mencapai hingga 1,59 kali kecepatan dalam skenario pengujian.

  • Fitur dasar yang kaya. Menyediakan berbagai metode penyalinan dan strategi optimasi berbasis skenario.

  • Integrasi mendalam dengan OSS. Menyediakan operasi seperti pengarsipan data dan kompresi file.

  • Penyalinan tanpa-Rename. Ini memastikan konsistensi data.

  • Skenario komprehensif. Dapat sepenuhnya menggantikan Hadoop DistCp dan saat ini mendukung Hadoop 2.7+ dan Hadoop 3.x.

Prasyarat

Anda telah membuat kluster EMR yang menjalankan EMR V3.28.0 atau versi lebih baru. Untuk informasi lebih lanjut, lihat Buat Kluster.

Untuk kluster EMR yang menjalankan EMR V3.28.0 atau versi lebih baru, Anda dapat menggunakan Jindo DistCp melalui perintah Shell. Untuk informasi lebih lanjut, lihat Panduan Penggunaan Jindo DistCp. Untuk kluster EMR yang menjalankan versi lebih lama dari EMR V3.28.0, masalah kompatibilitas mungkin terjadi. Anda dapat menyelesaikannya dengan mengirimkan tiket.

Jika Anda menggunakan kluster ECS yang dikelola sendiri, Anda harus memiliki lingkungan Hadoop 2.7+ atau Hadoop 3.x dan kemampuan untuk menjalankan pekerjaan MapReduce.

Langkah 1: Unduh paket JAR

  1. Masuk ke kluster EMR.

    1. Masuk ke Konsol EMR pada ECS.

    2. Klik kluster EMR yang Anda buat.

    3. Klik tab Node Management, lalu klik p480359.jpg di sebelah kiri grup node.

    4. Klik ID ECS. Pada halaman instance ECS, klik Remote Connection di sebelah kanan ID instance.

    Jika Anda ingin masuk ke kluster dari lingkungan Windows atau Linux menggunakan protokol Secure Shell (SSH) dengan pasangan kunci atau kata sandi, lihat Masuk ke Kluster.

  2. Unduh dan ekstrak versi terbaru paket Jindosdk-${version}.tar.gz. Untuk tautan unduhan, lihat Unduh JindoData.

Langkah 2: Konfigurasikan OSS AccessKey

Anda dapat mengonfigurasi OSS AccessKey dengan salah satu cara berikut.

Konfigurasikan AccessKey dalam perintah contoh

hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --parallelism 10

Prakonfigurasikan AccessKey dalam file konfigurasi

  1. Pergi ke direktori tempat file konfigurasi Hadoop core-site.xml berada.

    cd /etc/emr/hadoop-conf/

    Untuk informasi lebih lanjut tentang jalur file umum di EMR, lihat Jalur File Umum.

  2. Buka file core-site.xml.

    vim core-site.xml
  3. Tambahkan konfigurasi berikut ke file core-site.xml.

    <configuration>
        <property>
            <name>fs.oss.accessKeyId</name>
            <value>LTAI****************</value>
        </property>
    
        <property>
            <name>fs.oss.accessKeySecret</name>
            <value>yourAccessKeySecret</value>
        </property>
    
        <property>
            <name>fs.oss.endpoint</name>
            <!-- Kami sarankan Anda menggunakan Titik akhir OSS internal dalam lingkungan ECS Alibaba Cloud, seperti oss-cn-xxx-internal.aliyuncs.com -->
            <value>oss-cn-xxx.aliyuncs.com</value>
        </property>
    </configuration>

Konfigurasikan logon tanpa kata sandi

Anda dapat mengonfigurasi logon tanpa kata sandi untuk menghindari penyimpanan AccessKey dalam teks biasa dan meningkatkan keamanan. Untuk informasi lebih lanjut, lihat Gunakan Fitur Tanpa Kata Sandi JindoFS SDK.

Langkah 3: Migrasikan atau salin data

  1. Jalankan perintah berikut untuk melihat data di HDFS.

    hdfs dfs -ls /

    Hasil berikut dikembalikan:

    Ditemukan 8 item
    drwxrwxrwx   - admin  supergroup          0 2023-10-26 10:55 /.sysinfo
    drwxrwxrwx   - hadoop supergroup          0 2023-10-26 10:55 /apps
    drwxrwxrwx   - root   supergroup          0 2022-08-03 15:54 /data
    -rw-r-----   1 root   supergroup         13 2022-08-25 11:45 /examplefile.txt
    drwxrwxrwx   - spark  supergroup          0 2023-10-26 14:49 /spark-history
    drwx-wx-wx   - hive   supergroup          0 2023-10-26 13:35 /tmp
    drwxrwxrwx   - hive   supergroup          0 2023-10-26 14:48 /user
    drwxrwxrwx   - hadoop supergroup          0 2023-10-26 14:48 /yarn
  2. Beralihlah ke direktori tempat paket jindo-distjob-tool-${version}.jar berada.

    cd /opt/apps/JINDOSDK/jindosdk-current/tools
  3. Migrasikan data dari HDFS ke OSS.

    Migrasi atau salinan data penuh

    Untuk melakukan migrasi atau salinan penuh data dari direktori HDFS yang ditentukan /tmp ke jalur tujuan OSS oss://examplebucket, jalankan perintah contoh berikut:

    hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --parallelism 10

    Tabel berikut menjelaskan parameter dan opsi dalam perintah contoh.

    Parameter dan opsi

    Deskripsi

    Contoh

    --src

    Jalur sumber data HDFS yang akan dimigrasikan atau disalin.

    /tmp/

    --dest

    Jalur tujuan di OSS untuk menyimpan data yang dimigrasikan atau disalin.

    oss://examplebucket/

    --hadoopConf

    Menentukan ID AccessKey, rahasia AccessKey, dan titik akhir yang memiliki izin untuk mengakses OSS.

    • Untuk informasi tentang cara mendapatkan ID AccessKey dan rahasia AccessKey, lihat Buat AccessKey.

    • Untuk daftar wilayah yang didukung oleh OSS dan titik akhir yang sesuai, lihat Titik akhir dan pusat data.

      Penting

      Dalam lingkungan ECS, kami sarankan Anda menggunakan titik akhir OSS internal, seperti oss-cn-xxx-internal.aliyuncs.com.

    --hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com

    --parallelism

    Menyesuaikan konkurensi tugas berdasarkan sumber daya kluster.

    10

    Migrasi atau salinan data inkremental

    Jika Anda ingin menyalin hanya data baru di jalur sumber setelah migrasi atau salinan penuh terakhir, Anda dapat menggunakan opsi --update untuk melakukan migrasi atau salinan data inkremental.

    Perintah contoh berikut melakukan migrasi atau salinan inkremental data dari direktori HDFS yang ditentukan /tmp ke jalur tujuan OSS oss://examplebucket/:

    hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --update --parallelism 10

    Saat Anda menggunakan opsi --update, checksum diaktifkan secara default. Setelah checksum diaktifkan, DistCp membandingkan nama file, ukuran file, dan checksum file di jalur sumber dan tujuan. Jika nama file, ukuran file, atau checksum file di jalur sumber berbeda dari yang ada di jalur tujuan, tugas migrasi atau salinan inkremental secara otomatis dipicu.

    Jika Anda tidak perlu membandingkan checksum file di jalur sumber dan tujuan, Anda dapat menambahkan opsi --disableChecksum untuk menonaktifkan verifikasi checksum. Berikut adalah perintah contoh:

    hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --update --disableChecksum --parallelism 10

Lampiran 1: Parameter dan opsi yang didukung oleh Jindo DistCp

Jindo DistCp menyediakan serangkaian parameter dan opsi. Anda dapat menjalankan perintah berikut untuk mendapatkan penggunaan spesifik dari setiap parameter dan opsi.

hadoop jar jindo-distcp-tool-${version}.jar --help

Tabel berikut menjelaskan parameter, opsi, dan nilai contohnya.

Parameter dan opsi

Deskripsi

Nilai contoh

--src

Menentukan jalur sumber untuk penyalinan.

--src oss://examplebucket/sourcedir

--dest

Menentukan jalur tujuan untuk penyalinan.

--dest oss://examplebucket/destdir

--bandWidth

Menentukan bandwidth untuk mesin tunggal yang digunakan oleh tugas DistCp. Satuan: MB.

--bandWidth 6

--codec

Menentukan metode kompresi file. Versi saat ini mendukung kodek gzip, gz, lzo, lzop, dan snappy, serta kata kunci none dan keep. Kata kunci tersebut dijelaskan sebagai berikut:

  • none: Menyimpan file sebagai file yang tidak dikompresi. Jika file sudah dikompresi, Jindo DistCp mendekompresinya.

  • keep (default): Tidak mengubah status kompresi file.

Catatan

Untuk menggunakan metode kompresi lzo dalam lingkungan kluster Hadoop open source, pastikan bahwa pustaka native gplcompression dan paket hadoop-lzo terinstal. Jika lingkungan yang diperlukan tidak tersedia, kami sarankan Anda menggunakan metode kompresi lainnya.

--codec gz

--policy

Menentukan kelas penyimpanan file setelah disalin ke OSS. Nilai valid:

  • ia: Akses Jarang

  • archive: Penyimpanan Arsip

  • coldArchive: Penyimpanan Arsip Dingin

--policy coldArchive

--filters

Menentukan jalur file. Setiap baris dalam file ini mengonfigurasi ekspresi reguler yang sesuai dengan file yang tidak perlu disalin atau dibandingkan dalam tugas DistCp.

--filters test.txt

--srcPrefixesFile

Menentukan daftar file yang akan disalin. File dalam daftar diawali dengan jalur src.

--srcPrefixesFile prefixes.txt

--parallelism

Menentukan parameter mapreduce.job.reduces dalam tugas MapReduce. Anda dapat menyesuaikan nilai parallelism berdasarkan sumber daya kluster Anda untuk mengontrol konkurensi tugas distcp.

Catatan

Nilai default parameter ini dalam lingkungan EMR adalah 7.

--parallelism 20

--tmp

Menentukan direktori untuk menyimpan file sementara saat menggunakan alat DistCp.

--tmp /tmp

--hadoopConf

Menentukan AccessKey dan titik akhir yang memiliki izin untuk mengakses OSS.

--hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-xxx.aliyuncs.com

--disableChecksum

Menonaktifkan verifikasi checksum.

--disableChecksum

--deleteOnSuccess

Menentukan bahwa file di jalur sumber dihapus setelah tugas salin selesai.

--deleteOnSuccess

--enableTransaction

Secara default, JindoDistCp menggunakan integritas tingkat tugas. Untuk memastikan integritas tingkat pekerjaan dan dukungan transaksi antar pekerjaan, Anda dapat menggunakan parameter --enableTransaction.

--enableTransaction

--ignore

Mengabaikan pengecualian yang terjadi selama migrasi data. Kesalahan terkait tidak mengganggu tugas dan akhirnya diekspos sebagai DistCp Counters. Jika --enableCMS digunakan, notifikasi juga dikirim dengan cara yang ditentukan.

-ignore

--diff

Memeriksa apakah semua file telah disalin dalam tugas salin saat ini dan menghasilkan daftar file yang belum disalin.

--diff

--update

Menggunakan fitur sinkronisasi inkremental. Ini berarti hanya data baru yang ditambahkan ke jalur sumber setelah migrasi atau salinan penuh terakhir yang disinkronkan ke jalur tujuan.

--update

--preserveMeta

Migrasikan metadata seperti Owner, Group, Permission, Atime, Mtime, Replication, BlockSize, XAttrs, dan ACL bersama dengan data.

--preserveMeta

--jobBatch

Menentukan jumlah file yang diproses oleh setiap tugas distcp. Nilai defaultnya adalah 1000.

--jobBatch 1000

--taskBatch

Menentukan jumlah file yang diproses oleh setiap subtugas distcp. Nilai defaultnya adalah 10.

--taskBatch 10

Lampiran 2: Contoh skenario

Skenario 1: Setelah data berhasil ditransfer menggunakan JindoDistCp, bagaimana cara memverifikasi integritas data?

JindoDistCp menyediakan dua metode berikut untuk memverifikasi integritas data.

  • Metode 1: DistCp Counters

    Anda dapat memverifikasi integritas data menggunakan parameter seperti BYTES_EXPECTED dan FILES_EXPECTED dalam informasi DistCp Counters.

    Contoh
        JindoDistcpCounter
            BYTES_COPIED=10000
            BYTES_EXPECTED=10000
            FILES_COPIED=11
            FILES_EXPECTED=11
            ...
        Shuffle Errors
            BAD_ID=0
            CONNECTION=0
            IO_ERROR=0
            WRONG_LENGTH=0
            WRONG_MAP=0
            WRONG_REDUCE=0

    Tabel berikut menjelaskan parameter Counter yang mungkin termasuk dalam contoh.

    Parameter

    Deskripsi

    BYTES_COPIED

    Jumlah byte yang berhasil disalin.

    BYTES_EXPECTED

    Jumlah byte yang diharapkan untuk disalin.

    FILES_COPIED

    Jumlah file yang berhasil disalin.

    FILES_EXPECTED

    Jumlah file yang diharapkan untuk disalin.

    FILES_SKIPPED

    Jumlah file yang dilewati selama salinan inkremental.

    BYTES_SKIPPED

    Jumlah byte yang dilewati selama salinan inkremental.

    COPY_FAILED

    Jumlah file yang gagal disalin. Peringatan akan dipicu jika nilainya bukan 0.

    BYTES_FAILED

    Jumlah byte yang gagal disalin.

    DIFF_FILES

    Jumlah file yang berbeda antara jalur sumber dan tujuan. Peringatan akan dipicu jika nilainya bukan 0.

    DIFF_FAILED

    Jumlah file yang operasi perbandingannya abnormal. Ini termasuk dalam hitungan DIFF_FILES.

    SRC_MISS

    Jumlah file yang tidak ada di jalur sumber. Ini termasuk dalam hitungan DIFF_FILES.

    DST_MISS

    Jumlah file yang tidak ada di jalur tujuan. Ini termasuk dalam hitungan DIFF_FILES.

    LENGTH_DIFF

    Jumlah file dengan ukuran tidak konsisten antara sumber dan tujuan. Ini termasuk dalam hitungan DIFF_FILES.

    CHECKSUM_DIFF

    Jumlah file yang gagal verifikasi checksum. Ini termasuk dalam hitungan COPY_FAILED.

    SAME_FILES

    Jumlah file identik di jalur sumber dan tujuan.

  • Metode 2: Gunakan Opsi --diff

    Anda dapat menggunakan opsi --diff dalam perintah contoh untuk membandingkan nama file dan ukuran di jalur sumber dan tujuan.

    hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --diff

Skenario 2: Parameter apa yang harus saya gunakan untuk menyimpan file yang ditulis ke OSS sebagai Akses Jarang, Arsip, atau Arsip Dingin?

Anda dapat menambahkan opsi --policy dalam perintah contoh untuk menentukan kelas penyimpanan file yang ditulis ke OSS. Contoh berikut menunjukkan cara menentukan kelas penyimpanan Akses Jarang:

hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --policy ia --parallelism 10

Untuk menentukan kelas penyimpanan Arsip, ganti --policy ia dengan --policy archive. Untuk menentukan kelas penyimpanan Arsip Dingin, ganti --policy ia dengan --policy coldArchive. Selain itu, Arsip Dingin hanya didukung di beberapa wilayah. Untuk informasi lebih lanjut, lihat Arsip Dingin.

Skenario 3: Setelah tugas migrasi atau salinan selesai, parameter apa yang harus saya gunakan untuk menyimpan hanya data di jalur tujuan dan menghapus data tertentu dari jalur sumber?

Anda dapat menggunakan opsi --deleteOnSuccess untuk menyimpan hanya data di jalur tujuan OSS dan menghapus data tertentu dari jalur sumber HDFS setelah tugas migrasi atau salinan selesai.

hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI**************** --hadoopConf fs.oss.accessKeySecret=yourAccessKeySecret --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --deleteOnSuccess --parallelism 10