Demystifying Partitioning dalam Spark



Blog ini memberitahu anda semua yang perlu anda ketahui mengenai partition di Spark, jenis partition & bagaimana ia meningkatkan kelajuan pelaksanaan untuk transformasi berdasarkan kunci.

Disumbangkan oleh Prithviraj Bose

Spark's Set Data Teragih yang berdaya tahan (pengabstrakan pengaturcaraan) dinilai dengan malas dan transformasinya disimpan sebagai graf asiklik yang diarahkan (DAG). Oleh itu, setiap tindakan pada RDD akan menjadikan Spark mengira DAG. Ini adalah bagaimana ketahanan dicapai di Spark kerana jika ada node pekerja gagal maka DAG hanya perlu dikira semula.





Ia juga wajib cache (bertahan dengan tahap penyimpanan yang sesuai) RDD sehingga tindakan yang sering dilakukan pada RDD tidak memaksa Spark untuk mengira DAG.Topik yang dibahas dalam blog ini pada dasarnya diperlukan untuk Pensijilan Apache Spark dan Scala. Topik yang dibahas dalam blog ini pada dasarnya diperlukan untuk .

Mengapa Menggunakan Partitioner?

Dalam pengkomputeran kluster, cabaran utama adalah untuk meminimumkan lalu lintas rangkaian. Apabila data berorientasikan nilai-kunci, pemisahan menjadi sangat mustahak kerana untuk transformasi berikutnya pada RDD, terdapat sejumlah besar perombakan data di seluruh rangkaian. Sekiranya kunci atau julat kunci serupa disimpan dalam partisi yang sama maka pengacakan dikurangkan dan pemprosesan menjadi cepat.



Transformasi yang memerlukan pengalihan data merentasi nod pekerja sangat berfaedah daripada pembahagian. Transformasi seperti itu cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, mengurangkanByKey, menggabungkanByKey dan mencari .

cara memasang hadoop pada linux
Partisi boleh dikonfigurasi dengan syarat RDD berdasarkan nilai-kunci.

Sifat Pembahagian

  1. Tuples dalam partisi yang sama dijamin berada di mesin yang sama.
  2. Setiap nod dalam kluster boleh mengandungi lebih dari satu partisi.
  3. Jumlah partisi boleh dikonfigurasi, secara lalai ia ditetapkan kepada jumlah teras pada semua nod pelaksana.

Jenis Pemisahan di Spark

Spark menyokong dua jenis partition,

  • Pemisahan Hash : Menggunakan Java Object.hashCode kaedah untuk menentukan partisi sebagai partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Pemisahan Julat : Menggunakan julat untuk menyebarkan ke bahagian masing-masing kunci yang berada dalam julat. Kaedah ini sesuai jika terdapat urutan semula jadi pada kunci dan kuncinya tidak negatif. Coretan kod di bawah menunjukkan penggunaan range partitioner.

Contoh Kod

Mari kita lihat contoh cara membahagi data di seluruh nod pekerja. Kod Scala penuh ada di sini .

Berikut adalah beberapa data ujian 12 koordinat (sebagai tupel),

Buat sebuah org.apache.spark.HashPartitioner dari saiz 2, di mana kunci akan dibahagi dua bahagian ini berdasarkan kod hash kunci.

Kemudian kita dapat memeriksa pasangan dan melakukan pelbagai transformasi berdasarkan kunci seperti lipatByKey dan mengurangkanByKey.

Meringkaskan, membuat partition meningkatkan kelajuan pelaksanaan untuk transformasi berdasarkan kunci.

Ada soalan untuk kami? Sila sebutkan di bahagian komen dan kami akan menghubungi anda.

Catatan berkaitan:

Mengapa Anda Perlu Belajar Berkilau Setelah Menguasai Hadoop

Apache Spark Vs Hadoop MapReduce