All Products
Search
Document Center

E-MapReduce:Gunakan Jindo DistCp

Last Updated:Jul 02, 2025

Topik ini menjelaskan cara menggunakan Jindo DistCp.

Apa itu Jindo DistCp?

Jindo DistCp adalah alat salin terdistribusi yang dikembangkan oleh tim penyimpanan data lake Alibaba Cloud untuk menyalin file di dalam atau antar kluster berskala besar. Alat ini menggunakan MapReduce untuk mendistribusikan file, menangani kesalahan, dan memulihkan data. File dan direktori digunakan sebagai input tugas map, dengan setiap tugas menyalin sebagian dari file dan direktori dalam daftar input. Jindo DistCp mendukung penyalinan data penuh antara Hadoop Distributed File System (HDFS), OSS-HDFS, Object Storage Service (OSS), dan Amazon Simple Storage Service (Amazon S3). Jindo DistCp juga menyediakan berbagai parameter dan kebijakan salinan. Saat menyalin data dari HDFS ke OSS-HDFS, Anda dapat menggunakan CopyCommitter kustom untuk menyalin file tanpa mengganti nama file, memastikan konsistensi dengan file sumber. Jindo DistCp mendukung semua fitur yang disediakan oleh Amazon S3 DistCp dan HDFS DistCp, serta meningkatkan efisiensi, stabilitas, dan keamanan penyalinan data secara signifikan dibandingkan dengan HDFS DistCp.

Persyaratan lingkungan

  • Anda perlu menginstal Java Development Kit (JDK) 1.8.0.

  • Jika Anda menggunakan Hadoop 2.3 atau versi lebih baru, unduh paket JAR terbaru Jindo DistCp. Paket jindosdk-${version}.tar.gz terbaru dapat diunduh dari tautan ini. Ekstrak paket yang diunduh dan temukan file jindo-distcp-tool-x.x.x.jar di folder /tools.

    Catatan

    Jindo DistCp diterapkan di kluster E-MapReduce (EMR) V5.6.0 atau versi minor lebih baru, serta kluster EMR V3.40.0 atau versi minor lebih baru. File jindo-distcp-tool-x.x.x.jar dapat ditemukan di direktori /opt/apps/JINDOSDK/jindosdk-current/tools.

Parameter

Jindo DistCp menyediakan paket JAR. Anda dapat menggunakan perintah hadoop jar dengan serangkaian parameter untuk menyalin file.

Parameter

Diperlukan

Deskripsi

Nilai default

Versi

OSS

OSS-HDFS

--src

Ya

Menentukan direktori sumber. Awalan berikut didukung:

  • hdfs://

  • oss://

  • s3://

  • cos://

  • obs://

Tidak ada nilai default

4.3.0 dan lebih baru

Didukung

Didukung

--dest

Ya

Menentukan direktori tujuan. Awalan berikut didukung:

  • hdfs://

  • oss://

  • s3://

  • cos://

  • obs://

Tidak ada nilai default

4.3.0 dan lebih baru

Didukung

Didukung

--bandWidth

Tidak

Menentukan bandwidth yang dapat digunakan oleh pekerjaan DistCp. Satuan: MB.

-1

4.3.0 dan lebih baru

Didukung

Didukung

--codec

Tidak

Menentukan codec yang digunakan untuk mengompres dan mendekompres file. Codec berikut didukung: gzip, gz, lzo, lzop, dan snappy.

keep (Nilai tersebut menunjukkan bahwa file sumber disalin tanpa mengompres atau mendekompres file.)

4.3.0 dan lebih baru

Didukung

Didukung

--policy

Tidak

Kelas penyimpanan file yang disalin ke OSS. Kelas penyimpanan berikut didukung: Standard, Infrequent Access (IA), Archive, dan Cold Archive.

Standard

4.3.0 dan lebih baru

Didukung

Tidak didukung

--filters

Tidak

Menentukan file yang berisi kondisi filter.

Tidak ada nilai default

4.3.0 dan lebih baru

Didukung

Didukung

--srcPrefixesFile

Tidak

Menentukan file yang berisi kondisi pencocokan.

Tidak ada nilai default

4.3.0 dan lebih baru

Didukung

Didukung

--parallelism

Tidak

Menentukan paralelisme pekerjaan DistCp. Parameter ini setara dengan parameter mapreduce.job.maps untuk pekerjaan MapReduce.

10

4.3.0 dan lebih baru

Didukung

Didukung

--jobBatch

Tidak

Menentukan jumlah file yang dapat diproses oleh pekerjaan DistCp.

10000

4.5.1 atau lebih baru

Didukung

Didukung

--taskBatch

Tidak

Menentukan jumlah file yang dapat diproses oleh tugas DistCp.

1

4.3.0 dan lebih baru

Didukung

Didukung

--tmp

Tidak

Menentukan direktori sementara HDFS yang digunakan untuk menyimpan data sementara.

/tmp

4.3.0 dan lebih baru

Didukung

Didukung

--hadoopConf <key=value>

Tidak

Menentukan pasangan AccessKey yang digunakan untuk mengakses OSS atau OSS-HDFS.

Tidak ada nilai default

4.3.0 dan lebih baru

Didukung

Didukung

--disableChecksum

Tidak

Menentukan apakah akan menonaktifkan fitur checksum file.

false

4.3.0 dan lebih baru

Didukung

Didukung

--deleteOnSuccess

Tidak

Menentukan apakah akan menghapus file sumber setelah file disalin.

false

4.3.0 dan lebih baru

Didukung

Didukung

--enableTransaction

Tidak

Menentukan apakah akan mengaktifkan pekerjaan DistCp untuk mendukung transaksi guna memastikan atomicitas pekerjaan.

false

4.3.0 dan lebih baru

Didukung

Didukung

--ignore

Tidak

Menentukan apakah akan mengabaikan pengecualian yang terjadi selama proses penyalinan data untuk mencegah pengecualian mengganggu pekerjaan yang sedang berlangsung.

false

4.3.0 dan lebih baru

Didukung

Didukung

--enableCMS

Tidak

Menentukan apakah akan mengaktifkan fitur pemantauan dan peringatan CloudMonitor.

false

4.5.1 atau lebih baru

Didukung

Didukung

--diff

Tidak

Menentukan apakah akan menggunakan mode DIF. Dalam mode DIF, file dihasilkan untuk mencatat perbedaan antara file sumber dan tujuan.

DistCpMode.COPY

4.3.0 dan lebih baru

Didukung

Didukung

--update

Tidak

Menentukan apakah akan menggunakan mode UPDATE. Dalam mode UPDATE, hanya file sumber tambahan yang disalin, seperti file sumber yang tidak ada di direktori tujuan atau file sumber yang berbeda dari file tujuan.

DistCpMode.COPY

4.3.0 dan lebih baru

Didukung

Didukung

--preserveMeta

Tidak

Menentukan apakah akan menyalin metadata.

false

4.4.0 atau lebih baru

Tidak didukung

Didukung

--src dan --dest (Diperlukan)

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

  • --src: Menentukan direktori file sumber.

  • --dest: Menentukan direktori file tujuan.

Contoh perintah:

hadoop jar jindo-distcp-tool-${version}.jar --src /data/hourly_table  --dest oss://example-oss-bucket/hourly_table

Gunakan parameter --dest untuk menentukan direktori tujuan. Contoh perintah di atas menyalin file dari direktori /data/hourly_table ke direktori /hourly_table di bucket OSS bernama example-oss-bucket. Berbeda dengan HDFS DistCp, Jindo DistCp secara default hanya menyalin file di direktori sumber ke direktori tujuan yang ditentukan, tanpa menyalin direktori. Untuk mengatasi hal ini, tentukan direktori dalam parameter --dest. Jika direktori tidak ada di direktori tujuan, Jindo DistCp akan membuatnya.

Untuk menyalin satu file, tentukan direktori dalam parameter --dest. Contoh perintah:

hadoop jar jindo-distcp-tool-${version}.jar --src /test.txt --dest oss://example-oss-bucket/tmp

--bandWidth

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--bandWidth: Menentukan bandwidth yang digunakan oleh tugas DistCp. Satuan: MB. Parameter ini mencegah satu tugas DistCp menggunakan terlalu banyak sumber daya bandwidth.

Contoh perintah:

jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --bandWidth 6

--codec

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

File tujuan di OSS atau OSS-HDFS biasanya adalah file teks yang tidak dikompres. File teks tidak ideal untuk pengendalian biaya penyimpanan atau analisis data. Jindo DistCp memungkinkan Anda mengonfigurasi parameter --codec untuk mengompres file tujuan secara online, membantu menghemat sumber daya penyimpanan.

Parameter --codec menentukan codec yang digunakan untuk mengompres dan mendekompres file. Nilai valid: gzip, gz, lzo, lzop, snappy, none, dan keep. Nilai default: keep. Deskripsi untuk none dan keep:

  • none: Menyalin file sumber tanpa kompresi. Jika file sumber dikompres, Jindo DistCp mendekompres file tersebut.

  • keep: Menyalin file sumber tanpa mengompres atau mendekompres file.

Contoh perintah:

jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --codec gz

Setelah perintah dijalankan, Anda dapat memeriksa file di direktori tujuan. Output menunjukkan bahwa file dikompres menggunakan codec gz.

[root@emr-header-1 opt]# hdfs dfs -ls oss://example-oss-bucket/hourly_table/2017-02-01/03
Ditemukan 6 item
-rw-rw-rw-   1        938 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/000151.sst.gz
-rw-rw-rw-   1       1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/1.log.gz
-rw-rw-rw-   1       1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/2.log.gz
-rw-rw-rw-   1       1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/OPTIONS-000109.gz
-rw-rw-rw-   1        506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp01.txt.gz
-rw-rw-rw-   1        506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp06.txt.gz
Catatan

Jika Anda ingin menggunakan codec lzo di kluster Hadoop open source, Anda harus menginstal pustaka native gplcompression dan paket hadoop-lzo. Jika Anda tidak memiliki kluster Hadoop, kami sarankan Anda menggunakan codec lain.

--filters

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--filters: Menentukan file yang berisi kondisi filter.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --filters filter.txt

Sebagai contoh, file filter.txt berisi string .*test.*. Dalam hal ini, file yang jalurnya mengandung string test tidak disalin ke OSS.

-srcPrefixesFile

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--srcPrefixesFile: Menentukan file yang berisi kondisi pencocokan.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --srcPrefixesFile prefixes.txt

Sebagai contoh, file prefixes.txt berisi string .*test.*. Dalam hal ini, hanya file yang jalurnya mengandung string test yang disalin ke OSS.

--parallelism

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--parallelism: Menentukan paralelisme pekerjaan DistCp. Parameter ini setara dengan parameter mapreduce.job.maps untuk pekerjaan MapReduce. Nilai default dari parameter mapreduce.job.maps adalah 10 di EMR. Tentukan nilai parameter --parallelism berdasarkan penggunaan sumber daya kluster.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /opt/tmp --dest oss://example-oss-bucket/tmp --parallelism 20

--taskBatch

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--taskBatch: Menentukan jumlah file yang dapat diproses oleh tugas DistCp. Nilai default: 1.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --taskBatch 1

--tmp

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--tmp: Menentukan direktori sementara HDFS yang digunakan untuk menyimpan data sementara. Nilai default adalah /tmp, yang menunjukkan hdfs:///tmp/.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table  --tmp /tmp

--hadoopConf

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--hadoopConf: Menentukan pasangan AccessKey yang digunakan untuk mengakses OSS atau OSS-HDFS dalam lingkungan non-EMR atau skenario di mana akses tanpa AccessKey tidak didukung. Gunakan parameter --hadoopConf untuk menentukan pasangan AccessKey.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret

Anda juga dapat menambahkan pasangan AccessKey yang digunakan untuk mengakses OSS atau OSS-HDFS ke file core-site.xml Hadoop. Ini menghemat Anda dari kebutuhan untuk memasukkan pasangan AccessKey setiap kali. Sebagai contoh, tambahkan informasi berikut ke file core-site.xml layanan Hadoop-Common di konsol EMR:

<configuration>
    <property>
        <name>fs.oss.accessKeyId</name>
        <value>xxx</value>
    </property>

    <property>
        <name>fs.oss.accessKeySecret</name>
        <value>xxx</value>
    </property>
</configuration>

-disableChecksum

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--disableChecksum: Menentukan apakah akan menonaktifkan fitur checksum file.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --disableChecksum

-deleteOnSuccess

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--deleteOnSuccess: Menentukan apakah akan memigrasi data alih-alih menyalin data. Saat mengonfigurasi parameter ini, operasi salinan mirip dengan operasi mv. Jindo DistCp menyalin file sumber dan kemudian menghapus file sumber dari direktori sumber.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --deleteOnSuccess

--enableTransaction

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--enableTransaction: Menentukan apakah akan mengaktifkan transaksi untuk pekerjaan. Transaksi membantu memastikan integritas data pada tingkat pekerjaan. Secara default, Jindo DistCp memastikan integritas data pada tingkat tugas.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --enableTransaction

--ignore

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--ignore: Menentukan apakah akan mengabaikan pengecualian yang terjadi selama proses penyalinan data untuk mencegah pengecualian mengganggu pekerjaan yang sedang berlangsung. Pengecualian tersebut ditampilkan di counter Jindo DistCp. Jika fitur pemantauan dan peringatan CloudMonitor diaktifkan, sistem akan mengirimkan notifikasi kepada Anda menggunakan metode yang ditentukan saat pengecualian terjadi.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --ignore

--diff

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--diff: Menentukan apakah akan menggunakan mode DIF. Dalam mode DIF, file dihasilkan untuk mencatat perbedaan antara file sumber dan tujuan. Jika file sumber gagal disalin ke direktori tujuan, file dihasilkan di direktori tempat perintah dijalankan untuk mencatat perbedaan antara file sumber dan tujuan. Jika Jindo DistCp telah melakukan operasi kompresi atau dekompresi selama proses salinan, --diff tidak mengembalikan perbedaan ukuran file yang akurat.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff

Jika file tujuan berbeda dari file sumber, file dihasilkan di direktori tempat perintah dijalankan untuk mencatat perbedaan file dan informasi berikut ditampilkan:

JindoCounter
DIFF_FILES=1

Jika direktori tujuan adalah direktori HDFS, Anda dapat menentukan direktori dalam format /path, hdfs://hostname:ip/path, atau hdfs://headerIp:ip/path. Format lainnya, seperti hdfs:///path dan hdfs:/path, tidak didukung.

Jika Anda ingin melihat perbedaan metadata antara file sumber dan tujuan, konfigurasikan parameter --diff dan --preserveMeta. Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff --preserveMeta

--update

Versi

OSS

OSS-HDFS

4.3.0 dan lebih baru

Didukung

Didukung

--update: Menentukan apakah akan menggunakan mode UPDATE. Dalam mode UPDATE, hanya file sumber tambahan yang disalin, seperti file sumber yang tidak ada di direktori tujuan atau file sumber yang berbeda dari file tujuan.

Jika pekerjaan Jindo DistCp terganggu dan file gagal disalin ke direktori tujuan, gunakan parameter --update untuk menyalin file-file tersebut. Jika file tertentu ditambahkan ke direktori sumber, Anda juga dapat menggunakan parameter --update untuk menyalin file tambahan ke direktori tujuan.

Contoh perintah:

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --update

--policy

Versi

OSS

OSS-HDFS

4.3.0 dan yang lebih baru

Didukung

Tidak didukung

--policy: Menentukan kelas penyimpanan file yang disalin ke OSS, seperti Cold Archive, Archive, atau IA. Jika parameter ini tidak dikonfigurasi, kelas penyimpanan Standard digunakan secara default.

  • Cold Archive

    Hanya wilayah tertentu yang mendukung kelas penyimpanan ini. Untuk informasi lebih lanjut, lihat Ikhtisar. Contoh perintah:

     jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy coldArchive --parallelism 20
  • Archive

     jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy archive --parallelism 20
  • IA

     jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy ia --parallelism 20

--preserveMeta

Versi

OSS

OSS-HDFS

4.4.0 dan lebih baru

Tidak didukung

Didukung

--preserveMeta: Menentukan apakah akan menyalin metadata selama proses penyalinan data, termasuk Owner, Group, Permission, Atime, Mtime, Replication, BlockSize, XAttrs, dan ACL metadata.

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --preserveMeta

--jobBatch

Versi

OSS

OSS-HDFS

4.5.1 dan lebih baru

Didukung

Didukung

--jobBatch: Menentukan jumlah file yang dapat diproses oleh pekerjaan DistCp saat menyalin data ke OSS. Nilai default: 10000.

 jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --jobBatch 50000

--enableCMS

Versi

OSS

OSS-HDFS

4.5.1 dan lebih baru

Didukung

Didukung

--enableCMS: Menentukan apakah akan mengaktifkan fitur pemantauan dan peringatan CloudMonitor.

Counter Jindo DistCp

Counter Jindo DistCp menjelaskan hasil eksekusi pekerjaan Jindo DistCp. Tabel berikut menjelaskan counter spesifik.

Counter

Deskripsi

COPY_FAILED

Jumlah file yang gagal disalin.

CHECKSUM_DIFF

Jumlah file yang gagal melewati verifikasi checksum. Jumlah tersebut ditambahkan ke nilai COPY_FAILED.

FILES_EXPECTED

Jumlah file yang diharapkan untuk disalin.

BYTES_EXPECTED

Jumlah byte yang diharapkan untuk disalin.

FILES_COPIED

Jumlah file yang disalin.

BYTES_COPIED

Jumlah byte yang disalin.

FILES_SKIPPED

Jumlah file yang dilewati selama pembaruan tambahan.

BYTES_SKIPPED

Jumlah byte yang dilewati selama pembaruan tambahan.

DIFF_FILES

Jumlah file yang berbeda di direktori sumber dan tujuan.

SAME_FILES

Jumlah file yang identik di direktori sumber dan tujuan.

DST_MISS

Jumlah file yang tidak ada di direktori tujuan. Jumlah tersebut ditambahkan ke nilai DIFF_FILES.

LENGTH_DIFF

Jumlah file yang memiliki ukuran berbeda di direktori sumber dan tujuan. Jumlah tersebut ditambahkan ke nilai DIFF_FILES.

CHECKSUM_DIFF

Jumlah file yang gagal melewati verifikasi checksum. Jumlah tersebut ditambahkan ke nilai DIFF_FILES.

DIFF_FAILED

Jumlah file yang tidak dibandingkan dengan benar.