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.
CatatanJindo 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 |
Ya | Menentukan direktori sumber. Awalan berikut didukung:
| Tidak ada nilai default | 4.3.0 dan lebih baru | Didukung | Didukung | |
Ya | Menentukan direktori tujuan. Awalan berikut didukung:
| Tidak ada nilai default | 4.3.0 dan lebih baru | Didukung | Didukung | |
Tidak | Menentukan bandwidth yang dapat digunakan oleh pekerjaan DistCp. Satuan: MB. | -1 | 4.3.0 dan lebih baru | Didukung | Didukung | |
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 | |
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 | |
Tidak | Menentukan file yang berisi kondisi filter. | Tidak ada nilai default | 4.3.0 dan lebih baru | Didukung | Didukung | |
Tidak | Menentukan file yang berisi kondisi pencocokan. | Tidak ada nilai default | 4.3.0 dan lebih baru | Didukung | Didukung | |
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 | |
Tidak | Menentukan jumlah file yang dapat diproses oleh pekerjaan DistCp. | 10000 | 4.5.1 atau lebih baru | Didukung | Didukung | |
Tidak | Menentukan jumlah file yang dapat diproses oleh tugas DistCp. | 1 | 4.3.0 dan lebih baru | Didukung | Didukung | |
Tidak | Menentukan direktori sementara HDFS yang digunakan untuk menyimpan data sementara. | /tmp | 4.3.0 dan lebih baru | Didukung | Didukung | |
Tidak | Menentukan pasangan AccessKey yang digunakan untuk mengakses OSS atau OSS-HDFS. | Tidak ada nilai default | 4.3.0 dan lebih baru | Didukung | Didukung | |
Tidak | Menentukan apakah akan menonaktifkan fitur checksum file. | false | 4.3.0 dan lebih baru | Didukung | Didukung | |
Tidak | Menentukan apakah akan menghapus file sumber setelah file disalin. | false | 4.3.0 dan lebih baru | Didukung | Didukung | |
Tidak | Menentukan apakah akan mengaktifkan pekerjaan DistCp untuk mendukung transaksi guna memastikan atomicitas pekerjaan. | false | 4.3.0 dan lebih baru | Didukung | Didukung | |
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 | |
Tidak | Menentukan apakah akan mengaktifkan fitur pemantauan dan peringatan CloudMonitor. | false | 4.5.1 atau lebih baru | Didukung | Didukung | |
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 | |
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 | |
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_tableGunakan 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 gzSetelah 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.gzJika 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.txtSebagai 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.txtSebagai 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=yoursecretAnda 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 --diffJika file tujuan berbeda dari file sumber, file dihasilkan di direktori tempat perintah dijalankan untuk mencatat perbedaan file dan informasi berikut ditampilkan:
JindoCounter
DIFF_FILES=1Jika 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 20Archive
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy archive --parallelism 20IA
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. |