View a markdown version of this page

Percikan EMR MagicCommitProtocol - Amazon EMR

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

Percikan EMR MagicCommitProtocol

Dari EMR 6.15.0 dan seterusnya, MagicCommitProtocol menjadi default FileCommitProtocol untuk Spark saat menggunakan sistem file S3A.

MagicCommitProtocol

Ini MagicCommitProtocol adalah implementasi alternatif FileCommitProtocol yang dioptimalkan untuk menulis file dengan EMR Spark ke Amazon S3 saat menggunakan sistem file S3A. Protokol ini bertujuan untuk meningkatkan kinerja aplikasi dengan menghindari penggunaan operasi penggantian nama di Amazon S3 selama fase tugas dan tugas komit.

Ini MagicCommitProtocol adalah FileCommitProtocol implementasi default yang digunakan oleh Spark yang berjalan di Amazon Elastic Map Reduce (EMR) saat sistem file S3A digunakan. Secara MagicCommitProtocol internal menggunakan MagicV2Committer untuk melakukan penulisan file ke Amazon S3.

Untuk operasi penyisipan statis, MagicCommitProtocol menulis file di lokasi keluaran pekerjaan selama fase komit tugas. Sebaliknya, untuk operasi penggantian sisipan dinamis, file yang ditulis oleh upaya tugas hanya muncul di lokasi keluaran pekerjaan setelah komit pekerjaan. Ini dicapai dengan mengekspor metadata komit kembali ke driver Spark pada panggilan komit tugas.

Mengaktifkan MagicCommitProtocol

Ini MagicCommitProtocol diaktifkan secara default untuk Spark yang berjalan di Amazon Elastic Map Reduce (EMR) saat menggunakan sistem file S3A.

Untuk menggunakan sistem file S3A, Anda dapat:

  1. Gunakan skema file seperti s3a:// saat mendefinisikan tabel, partisi, atau direktori.

  2. Atur konfigurasi fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem di core-site.xml.

Menonaktifkan MagicCommitProtocol

  1. Anda dapat mengatur spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol ke false dengan mengkodekannya secara keras di aSparkConf, meneruskannya sebagai --conf parameter di shell Spark atau spark-submit dan spark-sql tools, atau diconf/spark-defaults.conf. Untuk informasi selengkapnya, lihat konfigurasi Spark di dokumentasi Apache Spark.

    Contoh berikut menunjukkan cara menonaktifkan MagicCommitProtocol saat menjalankan spark-sql perintah.

    spark-sql \ --conf spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol=false \ -e "INSERT OVERWRITE TABLE target_table SELECT * FROM source_table;"
  2. Gunakan klasifikasi spark-defaults konfigurasi untuk mengatur spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol properti ke false. Untuk informasi selengkapnya, lihat Meng onfigurasi aplikasi.

MagicCommitProtocol pertimbangan

  • Untuk sisipan partisi statis, Pada pelaksana Spark, MagicCommitProtocol mengkonsumsi sejumlah kecil memori untuk setiap file yang ditulis oleh upaya tugas sampai tugas diikat atau dibatalkan. Dalam kebanyakan pekerjaan, jumlah memori yang dikonsumsi dapat diabaikan. Tidak ada persyaratan memori tambahan pada driver Spark

  • Untuk sisipan partisi dinamis, pada driver Spark, MagicCommitProtocol membutuhkan memori untuk menyimpan info metadata dari setiap file yang dikomit sampai pekerjaan diikat atau dibatalkan. Di sebagian besar pekerjaan, pengaturan memori driver Spark default dapat diabaikan.

    Untuk pekerjaan yang memiliki tugas yang berjalan lama yang menulis sejumlah besar file, memori yang dikonsumsi protokol commit mungkin terlihat dan memerlukan penyesuaian pada memori yang dialokasikan untuk Spark, terutama untuk pelaksana Spark. Anda dapat menyetel memori menggunakan spark.driver.memory properti untuk driver Spark, dan spark.executor.memory properti untuk pelaksana Spark. Sebagai pedoman, satu tugas menulis 100.000 file biasanya membutuhkan tambahan 200MB memori. Untuk informasi lebih lanjut, lihat Properti aplikasi dalam dokumentasi Apache Spark Configuration.