S3DistCp (s3-dist-cp) - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

S3DistCp (s3-dist-cp)

Apache DistCp adalah alat sumber terbuka yang dapat Anda gunakan untuk menyalin data dalam jumlah besar. S3DistCp mirip dengan DistCp, tetapi dioptimalkan untuk bekerja denganAWS, khususnya Amazon S3. Perintah untuk S3DistCp di Amazon EMR versi 4.0 dan setelahnya adalahs3-dist-cp, yang Anda tambahkan sebagai langkah dalam sebuah klaster atau pada baris perintah. Menggunakan S3DistCp, Anda dapat menyalin secara efisien data dalam jumlah besar dari Amazon S3 ke HDFS di mana ia dapat diproses dengan langkah-langkah berikutnya dalam klaster Amazon EMR Anda. Anda juga dapat menggunakan S3DistCp untuk menyalin data antara bucket Amazon S3 atau dari HDFS ke Amazon S3. S3DistCp lebih dapat diskalakan dan efisien untuk penyalinan parallel sejumlah besar objek di seluruh bucket dan di seluruhAWS akun.

Untuk perintah khusus yang menunjukkan fleksibilitas S3DistCp dalam skenario dunia nyata, lihat Tujuh tip untuk menggunakan S3DistCp pada blogAWS Big Data.

Seperti DistCp, S3DistCp menggunakan MapReduce untuk menyalin secara terdistribusi. Ia berbagi salinan, penanganan kesalahan, pemulihan, dan pelaporan tugas di beberapa server. Untuk informasi selengkapnya tentang proyek sumber DistCp terbuka Apache, lihat DistCp panduan dalam dokumentasi Apache Hadoop.

Jika S3DistCp tidak dapat menyalin beberapa atau semua file yang ditentukan, langkah klaster tersebut gagal dan akan mengembalikan kode kesalahan non-zero. Jika hal ini terjadi, S3DistCp tidak akan membersihkan sebagian file yang disalin.

penting

S3DistCp tidak mendukung nama bucket Amazon S3 yang berisi karakter garis bawah.

S3DistCp tidak mendukung rangkaian untuk file Parquet. Gunakan PySpark sebagai gantinya. Untuk informasi selengkapnya, lihat Menggabungkan file parquet di Amazon EMR.

Untuk menghindari kesalahan penyalinan saat menggunakan s3Distcp untuk menyalin satu file (bukan direktori) dari S3 ke HDFS, gunakan Amazon EMR versi 5.33.0 atau yang lebih baru, atau Amazon EMR versi 6.3.0 atau yang lebih baru.

DistCp Opsi S3

Meskipun mirip dengan DistCp, S3DistCp mendukung serangkaian opsi yang berbeda untuk mengubah caranya menyalin dan mengkompresi data.

Ketika Anda memanggil S3DistCp, Anda dapat menentukan opsi yang dijelaskan di tabel berikut. Opsi ditambahkan pada langkah menggunakan daftar argumen. ContohDistCp argumen S3 ditunjukkan dalam tabel berikut.

Opsi Deskripsi Wajib
--src=LOCATION

Lokasi data yang akan disalin. Ini dapat berupa lokasi HDFS atau lokasi Amazon S3.

Contoh: --src=s3://DOC-EXAMPLE-BUCKET1/logs/j-3GYXXXXXX9IOJ/node

penting

S3DistCp tidak mendukung nama bucket Amazon S3 yang berisi karakter garis bawah.

Ya
--dest=LOCATION

Tujuan untuk data. Ini dapat berupa lokasi HDFS atau lokasi Amazon S3.

Contoh: --dest=hdfs:///output

penting

S3DistCp tidak mendukung nama bucket Amazon S3 yang berisi karakter garis bawah.

Ya
--srcPattern=PATTERN

ekspresi reguler yang memfilter operasi penyalinan ke data subset di --src. Jika tidak ditentukan ke --srcPattern dan juga --groupBy, maka semua data di --src akan disalin ke --dest.

Jika argumen ekspresi reguler berisi karakter khusus, seperti tanda bintang (*), maka ekspresi reguler atau seluruh string --args harus diapit menggunakan tanda kutip tunggal (').

Contoh: --srcPattern=.*daemons.*-hadoop-.*

Tidak
--groupBy=PATTERN

ekspresi reguler yang menyebabkan S3DistCp untuk menggabungkan file yang cocok dengan ekspresi. Sebagai contoh, Anda dapat menggunakan opsi ini untuk menggabungkan semua berkas log yang ditulis dalam satu jam ke dalam satu file. Nama file gabungan adalah nilai yang cocok dengan ekspresi reguler untuk pengelompokan dalam grup.

Tanda kurung menunjukkan bagaimana file harus dikelompokkan dalam grup, dengan semua item yang cocok dengan pernyataan yang ada dalam tanda kurung yang digabungkan menjadi satu file output. Jika ekspresi reguler tidak menyertakan pernyataan yang ada dalam tanda kurung, maka klaster gagal padaDistCp langkah S3 dan mengembalikan kesalahan.

Jika argumen ekspresi reguler berisi karakter khusus, seperti tanda bintang (*), maka ekspresi reguler atau seluruh string --args harus diapit menggunakan tanda kutip tunggal (').

Saat --groupBy ditentukan, hanya file yang cocok dengan pola yang ditentukan yang akan disalin. Anda tidak perlu menentukan --groupBy dan --srcPattern pada saat yang sama.

Contoh: --groupBy=.*subnetid.*([0-9]+-[0-9]+-[0-9]+-[0-9]+).*

Tidak
--targetSize=SIZE

Ukuran file yang akan dibuat, dalam mebibytes (MIB), ditentukan berdasarkan opsi --groupBy. Nilai ini harus berupa integer. Saat--targetSize diatur, S3DistCp mencoba untuk mencocokkan ukuran ini; ukuran sebenarnya dari file yang disalin mungkin lebih besar atau lebih kecil dari nilai ini. Tugas dikumpulkan berdasarkan ukuran file data, sehingga ada kemungkinan bahwa ukuran file target akan cocok dengan ukuran file data sumber.

Jika file yang dirangkai oleh --groupBy lebih besar dari nilai --targetSize, maka file akan dipecah menjadi beberapa bagian file, dan diberi nama secara berurutan dengan nilai numerik yang ditambahkan pada akhir namanya. Sebagai contoh, sebuah file digabungkan ke dalam myfile.gz akan dipecah menjadi beberapa bagian sebagai: myfile0.gz, myfile1.gz, dll.

Contoh: --targetSize=2

Tidak
--appendToLastFile

Menentukan perilaku S3DistCp saat menyalin ke file dari Amazon S3 ke HDFS yang sudah ada. Ini menambahkan data file baru ke file yang ada. Jika Anda menggunakan --appendToLastFile dengan --groupBy, data baru ditambahkan ke file yang cocok dengan kelompok yang sama. Opsi ini juga menghormati --targetSize perilaku ketika digunakan dengan --groupBy.

Tidak
--outputCodec=CODEC

Tentukan codec kompresi untuk digunakan untuk file disalin. Ini dapat mengambil nilai: gzip, gz, lzo, snappy, atau none. Anda dapat menggunakan opsi ini, misalnya, untuk mengkonversi file input yang dikompresi dengan Gzip ke file output dengan kompresi LZO, atau untuk uncompress file sebagai bagian dari operasi penyalinan. Jika Anda memilih codec output, nama file akan ditambahkan dengan ekstensi yang sesuai (misalnya untuk gz dan gzip, ekstensinya adalah .gz) Jika Anda tidak menentukan nilai untuk --outputCodec, maka file akan disalin dengan tidak ada perubahan dalam kompresinya.

Contoh: --outputCodec=lzo

Tidak
--s3ServerSideEncryption

Pastikan bahwa data target ditransfer menggunakan SSL dan dienkripsi secara otomatis di Amazon S3 menggunakan kunci sisi layanan AWS. Ketika mengambil data menggunakan S3DistCp, objek secara otomatis tidak terenkripsi. Jika Anda mencoba menyalin objek yang tidak dienkripsi ke bucket Amazon S3 yang mengharuskan enkripsi, maka operasi gagal. Untuk informasi selengkapnya, lihat Menggunakan enkripsi data.

Contoh: --s3ServerSideEncryption

Tidak
--deleteOnSuccess

Jika operasi penyalinan berhasil, maka opsi ini akanDistCp membuat S3 menghapus berkas yang disalin dari lokasi sumber. Hal ini berguna jika Anda menyalin file output, misalnya berkas log, dari satu lokasi ke lokasi lain sebagai tugas terjadwal, dan Anda tidak ingin menyalin file yang sama dua kali.

Contoh: --deleteOnSuccess

Tidak
--disableMultipartUpload

Nonaktifkan penggunaan unggahan multipart.

Contoh: --disableMultipartUpload

Tidak
--multipartUploadChunkSize=SIZE

Ukuran dari ukuran bagian unggahan multipart menggunakan MiB. Secara default, ia menggunakan unggahan multipart saat menulis ke Amazon S3. Ukuran potongan default adalah 16 MiB.

Contoh: --multipartUploadChunkSize=32

Tidak
--numberFiles

Tambahkan file output dengan nomor berurutan. Hitungannya dimulai dari 0 kecuali nilai yang berbeda ditentukan oleh --startingIndex.

Contoh: --numberFiles

Tidak
--startingIndex=INDEX

Digunakan dengan --numberFiles untuk menentukan nomor pertama dalam urutan.

Contoh: --startingIndex=1

Tidak
--outputManifest=FILENAME

Membuat file teks, yang dikompresi dengan Gzip, yang berisi daftar semua file yang disalin oleh S3DistCp.

Contoh: --outputManifest=manifest-1.gz

Tidak
--previousManifest=PATH

Baca file manifes yang dibuat selama panggilan sebelumnya untuk S3DistCp menggunakan--outputManifest bendera. Saat--previousManifest bendera diatur, S3DistCp tidak menyertakan file yang tercantum dalam manifes dari operasi penyalinan. Jika --outputManifest ditentukan bersama dengan --previousManifest, maka file yang tercantum dalam manifes sebelumnya juga akan muncul di file manifes baru, meskipun file tidak disalin.

Contoh: --previousManifest=/usr/bin/manifest-1.gz

Tidak
--requirePreviousManifest

Wajibkan manifes sebelumnya dibuat selama panggilan sebelumnya untuk S3DistCp. Jika ini diatur ke SALAH, maka tidak akan ada kesalahan yang dihasilkan ketika manifes sebelumnya tidak ditentukan. Default-nya adalah BETUL.

Tidak
--copyFromManifest

Balikkan perilaku--previousManifest untuk membuat S3DistCp menggunakan file manifes yang ditentukan sebagai daftar file yang akan disalin, bukan daftar file yang tidak akan disalin.

Contoh: --copyFromManifest --previousManifest=/usr/bin/manifest-1.gz

Tidak
--s3Endpoint=ENDPOINT

Tentukan titik akhir Amazon S3 yang akan digunakan saat mengunggah file. Opsi ini menetapkan titik akhir untuk baik untuk sumber maupun tujuan. Jika tidak diatur, maka titik akhir default-nya adalah s3.amazonaws.com. Untuk daftar titik akhir Amazon S3, lihat Wilayah dan titik akhir.

Contoh: --s3Endpoint=s3.eu-west-1.amazonaws.com

Tidak
--storageClass=CLASS

Kelas penyimpanan yang akan digunakan saat tujuannya adalah Amazon S3. Nilai yang valid adalah STANDARD dan REDUCED_REDUNDANCY. Jika opsi ini tidak ditentukan, maka S3DistCp mencoba untuk mempertahankan kelas penyimpanan.

Contoh: --storageClass=STANDARD

Tidak
--srcPrefixesFile=PATH

File teks di Amazon S3 (s3://), HDFS (hdfs:///) atau sistem file lokal (file:/) yang berisi daftar prefiks src, satu prefiks per baris.

JikasrcPrefixesFile disediakan, S3 tidakDistCp akan memasukkan path src dalam daftar. Sebaliknya, ia akan menghasilkan daftar sumber sebagai hasil gabungan dari daftar semua prefiks yang ditentukan dalam file ini. Path relatif dibandingkan dengan path src, bukan prefiks-prefiks ini, akan digunakan untuk menghasilkan path tujuan. Jika srcPattern juga ditentukan, ia akan diterapkan pada hasil daftar gabungan dari prefiks sumber untuk mem-filter input lebih lanjut. Jika copyFromManifest digunakan, objek dalam manifes akan disalin dan srcPrefixesFile akan diabaikan.

Contoh: --srcPrefixesFile=PATH

Tidak

Selain opsi-opsi di atas, S3DistCp mengimplementasikan Antarmuka alat yang berarti bahwa ia mendukung pilihan generik.

Menambahkan S3DistCp sebagai langkah dalam sebuah klaster

Anda dapat memanggil S3DistCp dengan menambahkannya sebagai langkah dalam klaster Anda. Langkah-langkah dapat ditambahkan ke klaster saat peluncuran atau ke kluster yang sedang berjalan menggunakan konsol tersebut, CLI, atau API. Contoh berikut menunjukkan penambahanDistCp langkah S3 ke klaster yang sedang berjalan. Untuk informasi selengkapnya tentang menambahkan langkah-langkah ke klaster, lihat Mengirim tugas ke klaster dalam Panduan Pengelolaan Amazon EMR.

Untuk menambahkanDistCp langkah S3 ke klaster yang sedang berjalan dengan menggunakanAWS CLI

Untuk informasi selengkapnya tentang menggunakan perintah Amazon EMR dalamAWS CLI, lihat Refensi AWS CLIPerintah.

  • Untuk menambahkan langkah ke sebuah klaster yang memanggil S3DistCp, berikan parameter yang menentukan bagaimana S3DistCp harus melakukan operasi penyalinan sebagai argumen.

    Contoh berikut adalah penyalinan daemon log dari Amazon S3 ke hdfs:///output. Dalam perintah berikut:

    • --cluster-id menentukan klaster

    • Jaradalah lokasi fileDistCp JAR S3. Untuk contoh cara menjalankan perintah pada cluster menggunakan command-runner.jar, lihat Kirim langkah JAR khusus untuk menjalankan skrip atau perintah.

    • Argsadalah daftar dipisahkan koma dari opsi pasangan nama-nilai yang akan diberikan ke S3DistCp. Untuk daftar lengkap opsi yang tersedia, lihat DistCp Opsi S3.

    Untuk menambahkan langkahDistCp salinan S3 ke klaster yang sedang berjalan, letakkan berikut ini dalam file JSON yang disimpan di Amazon S3 atau sistem file lokal Anda sepertimyStep.json untuk contoh ini. Ganti j-3GYXXXXXX9IOK dengan ID klaster Anda dan ganti mybucket dengan nama bucket Amazon S3 Anda.

    [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com","--src=s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","--dest=hdfs:///output","--srcPattern=.*[a-zA-Z,]+"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]
    aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps file://./myStep.json
contoh Salin berkas log dari Amazon S3 ke HDFS

Contoh ini juga menggambarkan cara menyalin berkas log yang disimpan dalam bucket Amazon S3 ke HDFS dengan menambahkan langkah ke klaster yang sedang berjalan. Dalam contoh ini opsi --srcPattern digunakan untuk membatasi data yang disalin ke log daemon.

Untuk menyalin berkas log dari Amazon S3 ke HDFS menggunakan opsi --srcPattern, letakkan berikut ini dalam file JSON yang disimpan di Amazon S3 atau sistem file lokal Anda sebagai myStep.json untuk contoh ini. Ganti j-3GYXXXXXX9IOK dengan ID klaster Anda dan ganti mybucket dengan nama bucket Amazon S3 Anda.

[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com","--src=s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","--dest=hdfs:///output","--srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]