Bagaimana saya dapat meningkatkan memori yang tersedia untuk node eksekutor percikan Apache?
Saya memiliki file 2 GB yang cocok untuk memuat ke Apache Spark. Saya menjalankan percikan apache untuk saat ini pada 1 mesin, sehingga driver dan eksekutor berada pada mesin yang sama. Mesin ini memiliki memori 8 GB.
Ketika saya mencoba menghitung baris file setelah mengatur file yang akan di-cache di memori saya mendapatkan kesalahan ini:
2014-10-25 22:25:12 WARN CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes.
Aku melihat dokumentasi di sini dan set spark.executor.memory
ke 4g
dalam$SPARK_HOME/conf/spark-defaults.conf
UI menunjukkan variabel ini diatur di Lingkungan Spark. Anda dapat menemukan tangkapan layar di sini
Namun ketika saya pergi ke tab Pelaksana batas memori untuk Pelaku tunggal saya masih diatur ke 265,4 MB. Saya juga masih mendapatkan kesalahan yang sama.
Saya mencoba berbagai hal yang disebutkan di sini tetapi saya masih mendapatkan kesalahan dan tidak memiliki ide yang jelas di mana saya harus mengubah pengaturan.
Saya menjalankan kode saya secara interaktif dari spark-shell
sumber
Juga perhatikan, bahwa untuk mode lokal Anda harus mengatur jumlah memori driver sebelum memulai jvm:
Ini akan memulai JVM dengan 2G bukannya 512M default.
Detail di sini :
sumber
Rupanya, pertanyaannya tidak pernah mengatakan untuk berjalan pada mode lokal bukan pada benang. Entah bagaimana saya tidak bisa mendapatkan perubahan percikan-default.conf untuk bekerja. Sebaliknya saya mencoba ini dan itu berhasil untuk saya
(tidak dapat meningkatkan memori pelaksana ke 8g ada batasan dari konfigurasi benang.)
sumber
executor-memory
lebih tinggi daridriver-memory
?Jawaban yang diajukan oleh Grega membantu saya untuk menyelesaikan masalah saya. Saya menjalankan Spark secara lokal dari skrip python di dalam wadah Docker. Awalnya saya mendapatkan error Java out-of-memory ketika memproses beberapa data di Spark. Namun, saya dapat menetapkan lebih banyak memori dengan menambahkan baris berikut ke skrip saya:
Berikut ini adalah contoh lengkap skrip python yang saya gunakan untuk memulai Spark:
sumber
Anda perlu menambah memori driver. Pada mac (mis. Ketika menjalankan pada master lokal), memori driver default adalah 1024M). Secara default, dengan demikian 380MB dialokasikan untuk pelaksana.
Setelah meningkatkan [ --driver-memory 2G ], memori pelaksana bertambah menjadi ~ 950Mb.
sumber
buat file bernama spark-env.sh di direktori spark / conf dan tambahkan baris ini
sumber
SPARK_WORKER_MEMORY
.Anda dapat membangun perintah menggunakan contoh berikut
sumber
Memori spark executor diperlukan untuk menjalankan tugas spark Anda berdasarkan instruksi yang diberikan oleh program driver Anda. Pada dasarnya, ini membutuhkan lebih banyak sumber daya yang tergantung pada pekerjaan yang Anda kirimkan.
Memori pelaksana mencakup memori yang diperlukan untuk menjalankan tugas-tugas ditambah memori overhead yang tidak boleh lebih besar dari ukuran JVM dan ukuran wadah maksimal benang.
Tambahkan parameter berikut di spark-defaults.conf
Jika Anda menggunakan alat manajemen cluster seperti cloudera manager atau amabari, segarkan konfigurasi cluster untuk mencerminkan konfigurasi terbaru ke semua node di cluster.
Sebagai alternatif, kita dapat melewatkan inti pelaksana dan nilai memori sebagai argumen saat menjalankan
spark-submit
perintah bersama dengan kelas dan jalur aplikasi.Contoh:
sumber
Anda menyebutkan bahwa Anda menjalankan kode Anda secara interaktif pada spark-shell demikian, sambil melakukan jika tidak ada nilai yang tepat ditetapkan untuk memori driver atau memori pelaksana kemudian memicu secara default menetapkan beberapa nilai untuk itu, yang didasarkan pada file properti itu (di mana nilai default adalah disebutkan).
Saya harap Anda menyadari fakta bahwa ada satu driver (master node) dan pekerja-node (di mana pelaksana dibuat dan diproses), jadi pada dasarnya dua jenis ruang diperlukan oleh program percikan, jadi jika Anda ingin mengatur memori driver kemudian ketika mulai spark-shell.
spark-shell --driver-memory "value Anda" dan untuk mengatur memori pelaksana: spark-shell --executor-memory "value Anda"
maka saya pikir Anda baik untuk pergi dengan nilai memori yang diinginkan yang Anda inginkan percikan-cangkang Anda untuk digunakan.
sumber
sumber
Di Windows atau Linux, Anda dapat menggunakan perintah ini:
sumber
Sejauh yang saya tahu tidak mungkin mengubah
spark.executor.memory
waktu berjalan. Jika Anda menjalankan versi yang berdiri sendiri, dengan pyspark dan graphframes, Anda dapat meluncurkan pysparkREPL
dengan menjalankan perintah berikut:Pastikan untuk mengubah
SPARK_VERSION
variabel lingkungan dengan tepat berkenaan dengan versi terbaru dari Sparksumber