

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

# Konfigurasi Spark
<a name="emr-spark-configure"></a>

Anda dapat mengonfigurasi [Spark di Amazon EMR](https://aws.amazon.com/elasticmapreduce/details/spark/) dengan klasifikasi konfigurasi. Untuk informasi selengkapnya tentang klasifikasi konfigurasi, lihat[Konfigurasikan aplikasi](emr-configure-apps.md).

klasifikasi konfigurasi untuk Spark di Amazon EMR meliputi berikut ini:
+ **`spark`**— Menetapkan `maximizeResourceAllocation` properti ke benar atau salah. Bila benar, Amazon EMR secara otomatis mengkonfigurasi `spark-defaults` properti yang didasarkan pada konfigurasi perangkat keras cluster. Untuk informasi selengkapnya, lihat [Menggunakan `maximizeResourceAllocation`](#emr-spark-maximizeresourceallocation).
+ **`spark-defaults`**— Menetapkan nilai dalam `spark-defaults.conf` file. Untuk informasi lebih lanjut, lihat [Konfigurasi percikan](https://spark.apache.org/docs/latest/configuration.html) dalam dokumentasi Spark.
+ **`spark-env`**— Menetapkan nilai dalam `spark-env.sh` file. Untuk informasi lebih lanjut, lihat [Variabel lingkungan](https://spark.apache.org/docs/latest/configuration.html#environment-variables) dalam dokumentasi Spark.
+ **`spark-hive-site`**— Menetapkan nilai dalam `hive-site.xml` untuk Spark.
+ **`spark-log4j`**— (Amazon EMR merilis 6.7.x dan lebih rendah) Menetapkan nilai dalam file. `log4j.properties` Untuk informasi lebih lanjut, lihat file [log4j.properties.template](https://github.com/apache/spark/blob/branch-3.2/conf/log4j.properties.template) di Github.
+ **`spark-log4j2`**— (Amazon EMR merilis 6.8.0 dan lebih tinggi) Menetapkan nilai dalam file. `log4j2.properties` Untuk informasi lebih lanjut, lihat file [log4j2.properties.template](https://github.com/apache/spark/blob/v3.3.0/conf/log4j2.properties.template) di Github.
+ **`spark-metrics`**— Menetapkan nilai dalam `metrics.properties` file. Untuk pengaturan dan informasi selengkapnya, lihat file [metrics.properties.template](https://github.com/apache/spark/blob/master/conf/metrics.properties.template) di Github, dan [Metrik](https://spark.apache.org/docs/latest/monitoring.html#metrics) dalam dokumentasi Spark.

**catatan**  
Jika Anda memigrasikan beban kerja Spark ke Amazon EMR dari platform lain, kami sarankan Anda menguji beban kerja Anda dengan sebelum menambahkan konfigurasi khusus. [Default Spark ditetapkan oleh Amazon EMR](#spark-defaults) Sebagian besar pelanggan melihat peningkatan kinerja dengan pengaturan default kami.

**Topics**
+ [Default Spark ditetapkan oleh Amazon EMR](#spark-defaults)
+ [Mengkonfigurasi pengumpulan sampah Spark di Amazon EMR 6.1.0](#spark-gc-config)
+ [Menggunakan `maximizeResourceAllocation`](#emr-spark-maximizeresourceallocation)
+ [Mengkonfigurasi perilaku dekomisioning node](#spark-decommissioning)
+ [Variabel ThriftServer lingkungan percikan](#spark-thriftserver)
+ [Mengubah pengaturan default Spark](#spark-change-defaults)
+ [Migrasi dari Apache Log4j 1.x ke Log4j 2.x](#spark-migrate-logj42)

## Default Spark ditetapkan oleh Amazon EMR
<a name="spark-defaults"></a>

Tabel berikut menunjukkan bagaimana Amazon EMR menetapkan nilai default di `spark-defaults` yang mempengaruhi aplikasi.


**Default Spark ditetapkan oleh Amazon EMR**  

| Pengaturan | Deskripsi | Nilai default | 
| --- | --- | --- | 
| spark.executor.memory | Jumlah memori yang digunakan per proses pelaksana. Misalnya: `1g`, `2g`. |  Pengaturan ini ditentukan oleh jenis instance inti dan tugas di cluster.   | 
| spark.executor.cores | Bilangan teras untuk digunakan pada setiap pelaksana. | Pengaturan ini ditentukan oleh jenis instance inti dan tugas di cluster. | 
| spark.dynamicAllocation.enabled | Jika benar, gunakan alokasi sumber daya dinamis untuk menskalakan jumlah pelaksana yang terdaftar dengan aplikasi naik dan turun berdasarkan beban kerja. |  `true`(dengan Amazon EMR 4.4.0 dan lebih tinggi)  Layanan shuffle percikan secara otomatis dikonfigurasi oleh Amazon EMR.   | 
| spark.sql.hive.advancedPartitionPredicatePushdown.enabled | Ketika benar, predikat partisi lanjutan pushdown ke Hive metastore diaktifkan. | true | 
| spark.sql.hive.stringLikePartitionPredicatePushdown.enabled | Mendorong ke bawah`startsWith`,`contains`, dan `endsWith` menyaring ke hive metastore.  Glue tidak mendukung predikat push down untuk`startsWith`,`contains`, atau`endsWith`. Jika Anda menggunakan Glue metastore dan Anda menemukan kesalahan karena predikat pushdown untuk fungsi-fungsi ini, atur konfigurasi ini ke. `false`   | true | 

## Mengkonfigurasi pengumpulan sampah Spark di Amazon EMR 6.1.0
<a name="spark-gc-config"></a>

Menetapkan konfigurasi pengumpulan sampah kustom dengan `spark.driver.extraJavaOptions` dan `spark.executor.extraJavaOptions` hasil dalam driver atau pelaksana peluncuran kegagalan dengan Amazon EMR 6.1 karena konflik konfigurasi pengumpulan sampah dengan Amazon EMR 6.1.0. Untuk Amazon EMR 6.1.0, konfigurasi pengumpulan sampah default diatur melalui dan. `spark.driver.defaultJavaOptions` `spark.executor.defaultJavaOptions` Konfigurasi ini hanya berlaku untuk Amazon EMR 6.1.0. Pilihan JVM tidak berhubungan dengan pengumpulan sampah, seperti yang untuk mengkonfigurasi pencatatan (`-verbose:class`), masih dapat diatur melalui`extraJavaOptions`. Untuk informasi lebih lanjut, lihat [sifat aplikasi Spark.](https://spark.apache.org/docs/latest/configuration.html#application-properties) 

## Menggunakan `maximizeResourceAllocation`
<a name="emr-spark-maximizeresourceallocation"></a>

Untuk mengkonfigurasi pelaksana Anda untuk menggunakan sumber daya maksimum yang mungkin pada setiap node dalam sebuah cluster, mengatur `maximizeResourceAllocation` ke `true` di `spark` klasifikasi konfigurasi. Parameter `maximizeResourceAllocation` adalah khusus untuk Amazon EMR. Saat Anda mengaktifkan`maximizeResourceAllocation`, Amazon EMR menghitung sumber daya komputasi dan memori maksimum yang tersedia untuk eksekutor pada instance dalam grup instans inti. Ini kemudian menetapkan sesuai `spark-defaults` tetapan berdasarkan nilai maksimum yang dikira.

Amazon EMR menghitung sumber daya komputasi dan memori maksimum yang tersedia untuk eksekutor berdasarkan jenis instans dari armada instans inti. Karena setiap armada instans dapat memiliki tipe dan ukuran instans yang berbeda dalam armada, konfigurasi pelaksana yang digunakan Amazon EMR mungkin bukan yang terbaik untuk klaster Anda, jadi kami tidak menyarankan menggunakan pengaturan default saat menggunakan alokasi sumber daya maksimum. Konfigurasikan setelan khusus untuk cluster armada instans Anda.

**catatan**  
Anda tidak boleh menggunakan `maximizeResourceAllocation` opsi pada cluster dengan aplikasi terdistribusi lainnya seperti HBase. Amazon EMR menggunakan konfigurasi BEARN khusus untuk aplikasi terdistribusi, yang dapat bertentangan dengan `maximizeResourceAllocation` dan menyebabkan aplikasi Spark gagal.

Berikut ini adalah contoh klasifikasi konfigurasi Spark dengan `maximizeResourceAllocation` set ke`true`.

```
[
  {
    "Classification": "spark",
    "Properties": {
      "maximizeResourceAllocation": "true"
    }
  }
]
```


**Pengaturan dikonfigurasi dalam `spark-defaults` Saat `maximizeResourceAllocation` diaktifkan**  

| Pengaturan | Deskripsi | Nilai | 
| --- | --- | --- | 
| spark.default.paralelisme | Jumlah partisi default yang RDDs dikembalikan oleh transformasi seperti bergabung, reduceByKey, dan paralel saat tidak disetel oleh pengguna. |  2X jumlah core CPU yang tersedia untuk kontainer BEARN.  | 
| spark.driver.memory | Jumlah memori yang digunakan untuk proses driver, yaitu di mana SparkContext diinisialisasi. (misalnya, 1g, 2g). |  Pengaturan dikonfigurasi berdasarkan jenis contoh dalam gugus. Namun, karena aplikasi driver Spark dapat berjalan pada instance utama atau salah satu instance inti (misalnya, masing-masing dalam mode klien dan cluster YARN), ini diatur berdasarkan tipe instance yang lebih kecil dalam dua grup instance ini.  | 
| spark.executor.memory | Jumlah memori untuk digunakan per proses pelaksana. (misalnya, 1g, 2g) |  Pengaturan dikonfigurasi berdasarkan inti dan tugas jenis contoh di cluster.   | 
| spark.executor.cores | Bilangan teras untuk digunakan pada setiap pelaksana.  | Pengaturan dikonfigurasi berdasarkan inti dan tugas jenis contoh di cluster.  | 
| spark.executor.instances |  Jumlah pelaksana. |  Pengaturan dikonfigurasi berdasarkan inti dan tugas jenis contoh di cluster. Set kecuali `spark.dynamicAllocation.enabled` Secara eksplisit diatur ke true pada saat yang sama.  | 

## Mengkonfigurasi perilaku dekomisioning node
<a name="spark-decommissioning"></a>

Dengan Amazon EMR rilis 5.9.0 dan yang lebih tinggi, Spark di Amazon EMR menyertakan serangkaian fitur untuk membantu memastikan bahwa Spark menangani penghentian node dengan anggun karena pengubahan ukuran manual atau permintaan kebijakan penskalaan otomatis. Amazon EMR mengimplementasikan mekanisme daftar penolakan di Spark yang dibangun di atas mekanisme penonaktifan YARN. Mekanisme ini membantu memastikan bahwa tidak ada tugas baru dijadwalkan pada node yang menonaktifkan, sementara pada saat yang sama memungkinkan tugas-tugas yang sudah berjalan untuk menyelesaikan. Selain itu, ada fitur untuk membantu memulihkan pekerjaan Spark lebih cepat jika blok shuffle hilang ketika node berakhir. Proses recomputation dipicu cepat dan dioptimalkan untuk recompute lebih cepat dengan lebih sedikit tahap retries, dan pekerjaan dapat dicegah dari gagal karena mengambil kegagalan yang disebabkan oleh hilang mengoyak blok.

**penting**  
`spark.decommissioning.timeout.threshold`Setelan ditambahkan di Amazon EMR rilis 5.11.0 untuk meningkatkan ketahanan Spark saat Anda menggunakan instans Spot. Dalam rilis sebelumnya, ketika sebuah node menggunakan instance Spot, dan instance dihentikan karena harga bid, Spark mungkin tidak dapat menangani penghentian dengan anggun. Pekerjaan mungkin gagal, dan shuffle recomputations bisa mengambil sejumlah besar waktu. Untuk alasan ini, sebaiknya gunakan rilis 5.11.0 atau yang lebih baru jika Anda menggunakan instance Spot.


**Pengaturan dekomisioning simpul percikan**  

| Pengaturan | Deskripsi | Nilai default | 
| --- | --- | --- | 
|  `spark.blacklist.decommissioning.enabled`  |  Saat disetel ke`true`, Spark menolak daftar node yang berada dalam `decommissioning` status di YARN. Spark tidak menjadwalkan tugas baru pada pelaksana berjalan pada node itu. Tugas yang sudah berjalan diperbolehkan untuk diselesaikan.  |  `true`  | 
|  `spark.blacklist.decommissioning.timeout`  |  Jumlah waktu node dalam `decommissioning` status ditolak terdaftar. Secara default, nilai ini diatur ke satu jam, yang juga merupakan default untuk `yarn.resourcemanager.decommissioning.timeout`. Untuk memastikan bahwa sebuah node ditolak terdaftar untuk seluruh periode penonaktifan, tetapkan nilai ini sama dengan atau lebih besar dari. `yarn.resourcemanager.decommissioning.timeout` Setelah timeout dekomisioning berakhir, node transisi ke `decommissioned` negara, dan Amazon EMR dapat mengakhiri contoh EC2 node. Jika ada tugas yang masih berjalan setelah batas waktu berakhir, mereka akan hilang atau dibunuh dan dijadwal ulang pada pelaksana yang berjalan di node lain.  |  `1h`  | 
|  `spark.decommissioning.timeout.threshold`  |  Tersedia di Amazon EMR rilis 5.11.0 atau yang lebih baru. Ditentukan dalam detik. Ketika node bertransisi ke status dekomisioning, jika host akan dinonaktifkan dalam periode waktu yang sama dengan atau kurang dari nilai ini, Amazon EMR tidak hanya menolak daftar node, tetapi juga membersihkan status host (seperti yang ditentukan oleh`spark.resourceManager.cleanupExpiredHost`) tanpa menunggu node untuk transisi ke status dinonaktifkan. Hal ini memungkinkan Spark untuk menangani Spot misalnya terminasi lebih baik karena Spot contoh dekommisi dalam timeout 20 detik terlepas dari nilai `yarn.resourcemager.decommissioning.timeout`, yang mungkin tidak menyediakan node lain cukup waktu untuk membaca file shuffle.  |  `20s`  | 
|  `spark.resourceManager.cleanupExpiredHost`  |  Ketika diatur ke `true`, Spark unregisters semua data cache dan blok shuffle yang disimpan dalam pelaksana pada node yang berada di `decommissioned` negara bagian. Ini mempercepat proses pemulihan.  |  `true`  | 
|  `spark.stage.attempt.ignoreOnDecommissionFetchFailure`  |  Ketika diatur ke `true`, membantu mencegah Spark dari tahap gagal dan akhirnya gagal pekerjaan karena terlalu banyak gagal menjemput dari node dinonaktifkan. Gagal mengambil dari blok shuffle dari sebuah node di `decommissioned` tidak akan dihitung ke arah jumlah maksimum dari kegagalan pengambilan berturut-turut.  | true | 

## Variabel ThriftServer lingkungan percikan
<a name="spark-thriftserver"></a>

Spark menetapkan variabel lingkungan Hive Thrift Server Port, `HIVE_SERVER2_THRIFT_PORT`, untuk 10001.

## Mengubah pengaturan default Spark
<a name="spark-change-defaults"></a>

Anda mengubah default di `spark-defaults.conf` menggunakan `spark-defaults` konfigurasi klasifikasi atau `maximizeResourceAllocation` pengaturan `spark` klasifikasi konfigurasi.

Prosedur berikut menunjukkan cara mengubah pengaturan menggunakan CLI atau konsol.

**Untuk membuat cluster dengan spark.executor.memory diatur ke 2g menggunakan CLI**
+ Buat kluster dengan Spark yang terinstal dan tetapkan `spark.executor.memory` ke 2g, menggunakan perintah berikut, yang merujuk suatu file,`myConfig.json` disimpan di Amazon S3.

  ```
  aws emr create-cluster --release-label emr-7.12.0 --applications Name=Spark \
  --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
  ```
**catatan**  
Karakter kelanjutan baris Linux (\$1) disertakan untuk memudahkan pembacaan. Karakter ini bisa dihapus atau digunakan dalam perintah Linux. Untuk Windows, hapus atau ganti dengan tanda sisipan (^).

  `myConfig.json`:

  ```
  [
      {
        "Classification": "spark-defaults",
        "Properties": {
          "spark.executor.memory": "2G"
        }
      }
    ]
  ```

**Untuk membuat cluster dengan spark.executor.memory diatur ke 2g menggunakan konsol**

1. Arahkan ke konsol EMR Amazon baru dan pilih **Beralih ke konsol lama** dari navigasi samping. Untuk informasi selengkapnya tentang apa yang diharapkan saat beralih ke konsol lama, lihat [Menggunakan konsol lama](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in).

1. Pilih **Buat Kluster**, **Buka opsi tingkat lanjut**.

1. Pilih **Spark**. 

1. Di bawah **Mengedit setelan perangkat lunak**, meninggalkan **Masukkan konfigurasi** dipilih dan masukkan konfigurasi berikut:

   ```
   classification=spark-defaults,properties=[spark.executor.memory=2G]
   ```

1. Pilih opsi lain, pilih **** lalu pilih **Buat gugus**.

**Untuk mengatur maximizeResourceAllocation**
+ Buat cluster dengan Spark diinstal dan `maximizeResourceAllocation` atur ke true menggunakan AWS CLI, referensi file`myConfig.json`, disimpan di Amazon S3.

  ```
  aws emr create-cluster --release-label emr-7.12.0 --applications Name=Spark \
  --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
  ```
**catatan**  
Karakter lanjutan baris Linux (\$1) disertakan agar mudah dibaca Karakter ini bisa dihapus atau digunakan dalam perintah Linux. Untuk Windows, hapus atau ganti dengan tanda sisipan (^).

  `myConfig.json`:

  ```
  [
    {
      "Classification": "spark",
      "Properties": {
        "maximizeResourceAllocation": "true"
      }
    }
  ]
  ```

**catatan**  
Dengan Amazon EMR versi 5.21.0 dan yang lebih baru, Anda dapat mengganti konfigurasi klaster dan menentukan klasifikasi konfigurasi tambahan untuk setiap grup instans dalam klaster berjalan. Anda melakukannya dengan menggunakan konsol EMR Amazon, AWS Command Line Interface (AWS CLI), atau SDK AWS . Untuk informasi selengkapnya, lihat [Menyediakan Konfigurasi untuk Grup Instans dalam Klaster Berjalan](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html).

## Migrasi dari Apache Log4j 1.x ke Log4j 2.x
<a name="spark-migrate-logj42"></a>

[Apache Spark](https://aws.amazon.com/emr/features/spark/) merilis 3.2.x dan sebelumnya menggunakan Apache Log4j 1.x lama dan file untuk mengkonfigurasi Log4j dalam proses Spark. `log4j.properties` Apache Spark merilis 3.3.0 dan kemudian menggunakan Apache Log4j 2.x dan `log4j2.properties` file untuk mengkonfigurasi Log4j dalam proses Spark.

Jika Anda telah mengonfigurasi Apache Spark Log4j menggunakan rilis EMR Amazon yang lebih rendah dari 6.8.0, maka Anda harus menghapus klasifikasi `spark-log4j` konfigurasi lama dan bermigrasi ke klasifikasi `spark-log4j2` konfigurasi dan format kunci sebelum Anda dapat meningkatkan ke Amazon EMR 6.8.0 atau yang lebih baru. `spark-log4j`Klasifikasi lama menyebabkan pembuatan klaster gagal dengan `ValidationException` kesalahan di Amazon EMR rilis 6.8.0 dan yang lebih baru. Anda tidak akan dikenakan biaya atas kegagalan yang terkait dengan ketidakcocokan Log4j, tetapi Anda harus menghapus klasifikasi konfigurasi yang tidak berfungsi `spark-log4j` untuk melanjutkan.

[Untuk informasi selengkapnya tentang migrasi dari Apache Log4j 1.x ke Log4j 2.x, lihat Panduan Migrasi [Apache Log4j dan Template Spark Log4j](https://logging.apache.org/log4j/2.x/manual/migration.html) 2 di Github.](https://github.com/apache/spark/blob/master/conf/log4j2.properties.template) 

**catatan**  
[Dengan Amazon EMR, Apache Spark menggunakan `log4j2.properties` file daripada file.xml. dijelaskan dalam Panduan Migrasi Apache Log4j.](https://logging.apache.org/log4j/2.x/manual/migration.html) Selain itu, kami tidak menyarankan menggunakan metode jembatan Log4j 1.x untuk mengonversi ke Log4j 2.x. 