Mari kita asumsikan sebagai berikut bahwa hanya satu tugas Spark yang berjalan di setiap titik waktu.
Apa yang saya dapatkan sejauh ini
Inilah yang saya pahami tentang apa yang terjadi di Spark:
- Saat a
SparkContext
dibuat, setiap node pekerja memulai eksekutor. Pelaksana adalah proses terpisah (JVM), yang menghubungkan kembali ke program driver. Setiap pelaksana memiliki toples program driver. Keluar dari pengemudi, matikan pelaksana. Setiap pelaksana dapat menampung beberapa partisi. - Ketika sebuah pekerjaan dijalankan, rencana eksekusi dibuat sesuai dengan grafik garis keturunan.
- Pekerjaan eksekusi dibagi menjadi beberapa tahap, di mana tahapan yang berisi transformasi dan tindakan tetangga (dalam grafik garis keturunan) sebanyak mungkin, tetapi tidak ada pengacakan. Jadi tahapan dipisahkan oleh pengocokan.
aku mengerti itu
- Tugas adalah perintah yang dikirim dari driver ke eksekutor dengan membuat serial objek Fungsi.
- Eksekutor deserializes (dengan driver jar) perintah (tugas) dan mengeksekusinya di partisi.
tapi
Pertanyaan
Bagaimana cara membagi tahapan menjadi tugas-tugas itu?
Secara khusus:
- Apakah tugas ditentukan oleh transformasi dan tindakan atau dapatkah beberapa transformasi / tindakan menjadi tugas?
- Apakah tugas ditentukan oleh partisi (misalnya satu tugas per tahap per partisi).
- Apakah tugas ditentukan oleh node (misalnya satu tugas per tahap per node)?
Apa yang saya pikirkan (hanya jawaban parsial, meskipun benar)
Di https://0x0fff.com/spark-architecture-shuffle , pengocokan dijelaskan dengan gambar
dan saya mendapat kesan bahwa aturannya adalah
setiap tahap dibagi menjadi # tugas jumlah partisi, tanpa memperhatikan jumlah node
Untuk gambar pertama saya, saya akan mengatakan bahwa saya memiliki 3 tugas peta dan 3 tugas pengurangan.
Untuk gambar dari 0x0fff, saya akan mengatakan ada 8 tugas peta dan 3 tugas pengurangan (dengan asumsi bahwa hanya ada tiga file oranye dan tiga file hijau tua).
Pertanyaan terbuka dalam hal apa pun
Apakah itu benar? Tetapi meskipun itu benar, pertanyaan saya di atas tidak semuanya terjawab, karena masih terbuka, apakah beberapa operasi (mis. Beberapa peta) berada dalam satu tugas atau dipisahkan menjadi satu tugas per operasi.
Apa yang dikatakan orang lain
Apa tugas di Spark? Bagaimana cara pekerja Spark mengeksekusi file jar? dan Bagaimana penjadwal Apache Spark membagi file menjadi tugas? mirip, tetapi saya tidak merasa pertanyaan saya dijawab dengan jelas di sana.