Topik ini menjelaskan cara menggunakan JindoDistCp.
Apa itu JindoDistCp
JindoDistCp adalah alat penyalinan file terdistribusi yang dikembangkan oleh tim Alibaba Cloud Data Lake Storage untuk transfer data skala besar di dalam dan antar kluster. Alat ini memanfaatkan MapReduce untuk mendistribusikan file, menangani kesalahan, serta memulihkan diri dari kegagalan. JindoDistCp menerima daftar file dan direktori sebagai input untuk tugas MapReduce, di mana setiap tugas menyalin sebagian dari daftar sumber. Alat ini mendukung penuh skenario penyalinan data antara Hadoop Distributed File System (HDFS), OSS-HDFS, OSS, dan S3, serta menyediakan berbagai parameter dan strategi kustom untuk penyalinan. JindoDistCp dioptimalkan khusus untuk menyalin data dari HDFS ke OSS-HDFS. Dengan menggunakan CopyCommitter kustom, alat ini melakukan penyalinan tanpa operasi rename (No-Rename) dan menjamin konsistensi data setelah proses selesai. Fitur-fiturnya sepenuhnya selaras dengan S3 DistCp dan HDFS DistCp, serta menawarkan peningkatan performa signifikan dibandingkan HDFS DistCp. JindoDistCp dirancang sebagai alat penyalinan data yang efisien, stabil, dan aman.
Persyaratan lingkungan
JDK 1.8.0 atau versi lebih baru.
Hadoop 2.3 atau versi lebih baru. Anda harus mengunduh versi terbaru file `jindo-distcp-tool-x.x.x.jar`. File JAR ini termasuk dalam paket `jindosdk-${version}.tar.gz`. Setelah mengekstrak paket tersebut, Anda dapat menemukan file JAR di direktori `tools/`. Untuk informasi lebih lanjut, lihat Unduhan JindoData.
CatatanJindoDistCp diterapkan pada kluster yang menjalankan EMR V5.6.0 atau versi lebih baru dan EMR V3.40.0 atau versi lebih baru. Anda dapat menemukan file `jindo-distcp-tool-x.x.x.jar` di direktori `/opt/apps/JINDOSDK/jindosdk-current/tools`.
Parameter
JindoDistCp disediakan sebagai paket JAR. Anda dapat menggunakan perintah `hadoop jar` dengan serangkaian parameter untuk melakukan operasi migrasi.
Parameter | Jenis parameter | Deskripsi | Nilai default | Versi | OSS | OSS-HDFS |
Wajib | Menentukan direktori sumber. Awalan berikut didukung:
| Tidak ada | 4.3.0 atau versi lebih baru | Dukungan | Didukung | |
Wajib | Menentukan direktori tujuan. Awalan berikut didukung:
| Tidak ada | 4.3.0 atau versi lebih baru | Didukung | Dukungan | |
Opsional | Menentukan batas bandwidth untuk satu node. Satuan: MB. | -1 | 4.3.0 atau versi lebih baru | Dukungan | Dukungan | |
Opsional | Menentukan jenis kompresi. Kodek yang didukung meliputi gzip, gz, lzo, lzop, dan snappy. | keep (Jenis kompresi tidak diubah.) | 4.3.0 atau versi lebih baru | Dukungan | Didukung | |
Opsional | Menentukan kebijakan penyimpanan untuk tujuan. Nilai yang valid: Standard, IA, Archive, dan ColdArchive. | Standard | 4.3.0 atau versi lebih baru | Dukungan | Tidak didukung | |
Opsional | Menentukan file yang berisi aturan filter. | Tidak ada | 4.3.0 atau versi lebih baru | Dukungan | Dukungan | |
Opsional | Pengaturan berlaku untuk file yang sesuai aturan. | Tidak ada | 4.3.0 atau versi lebih baru | Didukung | Dukungan | |
Opsional | Menentukan konkurensi tugas DistCp. Ini berkorespondensi dengan parameter mapreduce.job.maps dalam tugas MapReduce. | 10 | 4.3.0 atau versi lebih baru | Dukungan | Dukungan | |
Opsional | Menentukan jumlah file yang diproses oleh setiap pekerjaan DistCp. | 10000 | 4.5.1 atau versi lebih baru | Dukungan | Didukung | |
Opsional | Menentukan jumlah file yang diproses oleh setiap tugas DistCp. | 1 | 4.3.0 atau versi lebih baru | Didukung | Dukungan | |
Opsional | Menentukan direktori temporary. | /tmp | 4.3.0 atau versi lebih baru | Didukung | Dukungan | |
Opsional | Mengatur konfigurasi. | Tidak ada | 4.3.0 atau versi lebih baru | Dukungan | Dukungan | |
Opsional | Menentukan apakah verifikasi checksum dinonaktifkan. | false | 4.3.0 atau versi lebih baru | Didukung | Dukungan | |
Opsional | Menentukan apakah file sumber dihapus. Ini digunakan untuk memindahkan data. | false | 4.3.0 atau versi lebih baru | Didukung | Didukung | |
Opsional | Menentukan apakah transaksi diaktifkan untuk menjamin atomisitas tingkat pekerjaan. | false | 4.3.0 atau versi lebih baru | Didukung | Didukung | |
Opsional | Menentukan apakah pengecualian yang terjadi selama tugas penyalinan diabaikan agar tugas tidak terganggu. | false | 4.3.0 atau versi lebih baru | Dukungan | Dukungan | |
Opsional | Menentukan apakah pemantauan dan peringatan diaktifkan. | false | 4.5.1 atau versi lebih baru | Dukungan | Dukungan | |
Opsional | Menyetel mode DistCp ke DIFF untuk melihat perbedaan antara file di sumber dan tujuan. | DistCpMode.COPY | 4.3.0 atau versi lebih baru | Didukung | Dukungan | |
Opsional | Menyetel mode DistCp ke UPDATE untuk mengaktifkan sinkronisasi inkremental. Ini melewatkan file dan direktori yang identik serta hanya menyinkronkan file dan direktori baru atau yang telah berubah dari sumber ke tujuan. | DistCpMode.COPY | 4.3.0 atau versi lebih baru | Didukung | Dukungan | |
Opsional | Menentukan apakah informasi metadata dipertahankan. | false | 4.4.0 atau versi lebih baru | Tidak didukung | Didukung |
--src dan --dest (wajib)
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Didukung | Didukung |
`--src`: Menentukan jalur file sumber.
`--dest`: Menentukan jalur file tujuan.
Perintah berikut memberikan contoh:
hadoop jar jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_tableAnda dapat menentukan direktori tujuan menggunakan jalur `dest`. Misalnya, perintah di atas menyalin file dari `/data/hourly_table` ke direktori `hourly_table` dalam bucket `example-oss-bucket`. Perilaku ini berbeda dari Hadoop DistCp. Secara default, JindoDistCp menyalin semua file dari direktori sumber ke jalur tujuan yang ditentukan tetapi tidak menyertakan direktori root sumber. Anda dapat menentukan direktori root dalam jalur tujuan. Jika direktori tersebut tidak ada, direktori tersebut akan dibuat secara otomatis.
Untuk menyalin satu file, Anda harus menentukan direktori sebagai tujuan.
hadoop jar jindo-distcp-tool-${version}.jar --src /test.txt --dest oss://example-oss-bucket/tmpGunakan --bandWidth
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Didukung | Dukungan |
`--bandWidth`: Menentukan bandwidth yang dapat digunakan oleh satu node untuk tugas DistCp, dalam satuan MB. Parameter ini mencegah satu node mengonsumsi bandwidth terlalu banyak.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --bandWidth 6Gunakan --codec
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Dukungan |
File sumber sering kali disimpan di OSS atau OSS-HDFS sebagai teks biasa yang tidak terkompresi, yang kurang ideal dari segi biaya penyimpanan maupun analisis data. Anda dapat menggunakan opsi `--codec` untuk menyimpan data secara efisien dengan mengompresi file secara online.
`--codec` menentukan kodek kompresi file. Opsi ini mendukung penyandi gzip, gz, lzo, lzop, dan snappy, serta kata kunci `none` dan `keep` (default). Kata kunci tersebut dijelaskan sebagai berikut:
`none`: Menyimpan file dalam bentuk tidak terkompresi. Jika file sumber sudah terkompresi, JindoDistCp akan mendekompresinya.
`keep` (default): Menyalin file apa adanya tanpa mengubah status kompresinya.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --codec gzSetelah perintah dijalankan, file dalam folder tujuan dikompresi menggunakan kodek gz.
[root@emr-header-1 opt]# hdfs dfs -ls oss://example-oss-bucket/hourly_table/2017-02-01/03
Found 6 items
-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.gzUntuk menggunakan kodek lzo di kluster Hadoop open source, Anda harus menginstal library native gplcompression dan paket hadoop-lzo. Jika lingkungan yang diperlukan tidak tersedia, Anda harus menggunakan metode kompresi lain.
Gunakan --filters
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Didukung | Dukungan |
`--filters`: Menentukan file yang berisi aturan filter.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --filters filter.txtMisalnya, jika file `filter.txt` berisi .*test.*, file yang jalurnya mengandung string "test" tidak akan disalin ke OSS.
Gunakan --srcPrefixesFile
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Dukungan |
`--srcPrefixesFile`: Menentukan file yang berisi aturan inklusi.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --srcPrefixesFile prefixes.txtMisalnya, jika file `prefixes.txt` berisi .*test.*, hanya file yang jalurnya mengandung string "test" yang akan disalin ke OSS.
Gunakan --parallelism
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Dukungan |
`--parallelism`: Menentukan parameter `mapreduce.job.maps` untuk tugas MapReduce. Nilai default parameter ini di lingkungan EMR adalah 10. Anda dapat menyesuaikan nilai parameter ini berdasarkan sumber daya kluster Anda untuk mengontrol konkurensi tugas DistCp.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /opt/tmp --dest oss://example-oss-bucket/tmp --parallelism 20Gunakan --taskBatch
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Didukung |
`--taskBatch`: Menentukan jumlah file yang diproses oleh setiap tugas DistCp. Nilai default-nya adalah 1.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --taskBatch 1Gunakan --tmp
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Didukung | Didukung |
`--tmp`: Menentukan direktori temporary di HDFS untuk menyimpan data sementara. Nilai default-nya adalah `/tmp`, yang berkorespondensi dengan `hdfs:///tmp/`.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --tmp /tmpKonfigurasikan AccessKey untuk mengakses OSS atau OSS-HDFS
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Dukungan |
`--hadoopConf`: Jika Anda tidak berada di lingkungan EMR atau jika layanan akses tanpa password bermasalah, Anda dapat menggunakan opsi ini untuk menentukan AccessKey guna mengakses OSS atau OSS-HDFS.
Perintah berikut memberikan contoh:
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=yoursecretUntuk menghindari memasukkan AccessKey setiap kali, Anda dapat mengonfigurasi ID AccessKey dan rahasia AccessKey untuk OSS atau OSS-HDFS di file `core-site.xml` Hadoop terlebih dahulu. Di Konsol EMR, tambahkan konfigurasi berikut pada halaman `core-site.xml` layanan Hadoop-Common.
<configuration>
<property>
<name>fs.oss.accessKeyId</name>
<value>xxx</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>xxx</value>
</property>
</configuration>Gunakan --disableChecksum
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Dukungan |
`--disableChecksum`: Menonaktifkan verifikasi checksum file.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --disableChecksumGunakan --deleteOnSuccess
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Didukung | Didukung |
`--deleteOnSuccess`: Memindahkan data alih-alih menyalinnya. Opsi ini mirip dengan operasi `mv`. Opsi ini pertama-tama menyalin file, lalu menghapusnya dari sumber.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --deleteOnSuccessGunakan --enableTransaction
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Didukung | Dukungan |
`--enableTransaction`: Secara default, JindoDistCp menjamin integritas tingkat tugas. Anda dapat menggunakan parameter ini untuk menjamin integritas tingkat pekerjaan dan mengaktifkan dukungan transaksional antar pekerjaan.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --enableTransactionGunakan --ignore
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Didukung | Dukungan |
`--ignore`: Mengabaikan pengecualian yang terjadi selama migrasi data. Error tidak menghentikan tugas. Sebaliknya, error dilaporkan sebagai nilai JindoCounter. Jika CMS diaktifkan, notifikasi juga akan dikirimkan.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --ignoreGunakan --diff
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Dukungan |
`--diff`: Membandingkan file di sumber dan tujuan. Jika file sumber belum disinkronkan ke tujuan, file yang berisi perbedaan akan dihasilkan di direktori saat ini. Jika tugas JindoDistCp Anda melibatkan kompresi atau dekompresi, `--diff` tidak dapat menunjukkan perbedaan file yang benar karena ukuran file berubah selama proses tersebut.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diffJika ditemukan perbedaan, file yang berisi perbedaan akan dihasilkan di direktori saat ini, dan pesan berikut akan ditampilkan:
JindoCounter
DIFF_FILES=1Jika `--dest` Anda adalah jalur HDFS, format `/path`, `hdfs://hostname:ip/path`, dan `hdfs://headerIp:ip/path` didukung. Format `hdfs:///path`, `hdfs:/path`, atau format kustom lainnya tidak didukung.
Untuk melihat perbedaan dalam metadata file, jalankan perintah --diff --preserveMeta:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff --preserveMetaGunakan --update
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Dukungan |
`--update`: Mengaktifkan sinkronisasi inkremental. Opsi ini melewatkan file dan direktori yang identik serta hanya menyinkronkan file dan direktori baru atau yang telah berubah dari sumber ke tujuan.
Jika tugas JindoDistCp gagal, Anda dapat menggunakan parameter ini untuk melanjutkan dari titik kegagalan dan hanya menyalin file yang tersisa. Anda juga dapat menggunakan parameter ini untuk menyalin file baru yang ditambahkan ke sumber setelah tugas JindoDistCp sebelumnya selesai.
Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --updateTulis data ke OSS dalam kelas penyimpanan Cold Archive, Archive, atau IA
Versi | OSS | OSS-HDFS |
4.3.0 atau versi lebih baru | Dukungan | Tidak didukung |
`--policy`: Menentukan kelas penyimpanan untuk data yang ditulis ke OSS. Anda dapat mengatur parameter ini ke Cold Archive, Archive, atau IA. Jika Anda tidak menentukan parameter ini, data akan ditulis ke kelas penyimpanan Standard secara default.
Tulis data ke kelas penyimpanan Cold Archive (coldArchive) di OSS
Fitur ini hanya tersedia di wilayah tertentu. Untuk informasi lebih lanjut, lihat Kelas penyimpanan OSS. Perintah berikut memberikan contoh:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy coldArchive --parallelism 20Tulis data ke kelas penyimpanan Archive (archive) di OSS
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy archive --parallelism 20Tulis data ke kelas penyimpanan IA (ia) di OSS
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy ia --parallelism 20
Gunakan --preserveMeta
Versi | OSS | OSS-HDFS |
4.4.0 atau versi lebih baru | Tidak didukung | Didukung |
`--preserveMeta`: Menentukan bahwa metadata dimigrasikan bersama data. Metadata mencakup Owner, Group, Permission, Atime, Mtime, Replication, BlockSize, XAttrs, dan ACL.
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --preserveMetaGunakan --jobBatch
Versi | OSS | OSS-HDFS |
4.5.1 atau versi lebih baru | Dukungan | Dukungan |
`--jobBatch`: Saat tugas DistCp Anda menulis data ke OSS, Anda dapat menggunakan `--jobBatch` untuk menentukan jumlah file yang diproses oleh setiap pekerjaan DistCp. Nilai default-nya adalah 10.000.
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --jobBatch 50000Gunakan --enableCMS
Versi | OSS | OSS-HDFS |
4.5.1 atau versi lebih baru | Dukungan | Dukungan |
`--enableCMS`: Mengaktifkan fitur peringatan CMS.
Counter JindoDistCp
Counter JindoDistCp merangkum hasil tugas JindoDistCp. Tabel berikut menjelaskan counter tersebut.
Parameter | Deskripsi |
COPY_FAILED | Jumlah file yang gagal disalin. |
CHECKSUM_DIFF | Jumlah file yang gagal verifikasi checksum. Ini termasuk dalam COPY_FAILED. |
FILES_EXPECTED | Jumlah file yang diharapkan disalin. |
BYTES_EXPECTED | Jumlah byte yang diharapkan disalin. |
FILES_COPIED | Jumlah file yang berhasil disalin. |
BYTES_COPIED | Jumlah byte yang berhasil disalin. |
FILES_SKIPPED | Jumlah file yang dilewati selama pembaruan inkremental. |
BYTES_SKIPPED | Jumlah byte yang dilewati selama pembaruan inkremental. |
DIFF_FILES | Jumlah file yang berbeda antara jalur sumber dan tujuan. |
SAME_FILES | Jumlah file yang identik antara jalur sumber dan tujuan. |
DST_MISS | Jumlah file yang tidak ada di jalur tujuan. Ini termasuk dalam DIFF_FILES. |
LENGTH_DIFF | Jumlah file yang ukurannya berbeda antara sumber dan tujuan. Ini termasuk dalam DIFF_FILES. |
CHECKSUM_DIFF | Jumlah file yang gagal verifikasi checksum. Ini termasuk dalam DIFF_FILES. |
DIFF_FAILED | Jumlah file yang operasi perbandingannya abnormal. |