สนับสนุนโดย Prithviraj Bose
Spark’s ชุดข้อมูลแบบกระจายที่ยืดหยุ่น (สิ่งที่เป็นนามธรรมการเขียนโปรแกรม) ได้รับการประเมินอย่างเฉื่อยชาและการแปลงจะถูกจัดเก็บไว้ในรูปแบบกราฟอะไซคลิก (DAG) ดังนั้นทุกการกระทำบน RDD จะทำให้ Spark คำนวณ DAG ใหม่ นี่คือวิธีการบรรลุความยืดหยุ่นใน Spark เนื่องจากหากโหนดของผู้ปฏิบัติงานล้มเหลว DAG ก็จะต้องได้รับการคำนวณใหม่
นอกจากนี้ยังเป็น บังคับให้แคช (ยังคงมีระดับการจัดเก็บที่เหมาะสม) RDD ดังนั้นการดำเนินการบ่อยๆใน RDD จะไม่บังคับให้ Spark คำนวณ DAG ใหม่หัวข้อที่กล่าวถึงในบล็อกนี้จำเป็นสำหรับการรับรอง Apache Spark และ Scala หัวข้อที่ครอบคลุมในบล็อกนี้จำเป็นสำหรับ .
ทำไมต้องใช้ Partitioner?
ในการประมวลผลแบบคลัสเตอร์ความท้าทายหลักคือการลดปริมาณการใช้งานเครือข่าย เมื่อข้อมูลเป็นแบบเน้นคีย์ - ค่าการแบ่งพาร์ติชันจะกลายเป็นสิ่งที่จำเป็นเพราะสำหรับการเปลี่ยนแปลงในภายหลังบน RDD จะมีการสับข้อมูลจำนวนพอสมควรในเครือข่าย หากคีย์ที่คล้ายกันหรือช่วงของคีย์ถูกเก็บไว้ในพาร์ติชันเดียวกันการสับจะลดลงและการประมวลผลจะเร็วมาก
การแปลงที่ต้องการการสับข้อมูลข้ามโหนดของผู้ปฏิบัติงานจะได้รับประโยชน์อย่างมากจากการแบ่ง การเปลี่ยนแปลงดังกล่าวคือ cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combinationByKey และ ค้นหา .
พาร์ติชันสามารถกำหนดค่าได้หาก RDD เป็นคีย์ - ค่าคุณสมบัติของพาร์ติชัน
- สิ่งทอในพาร์ติชันเดียวกันรับประกันว่าจะอยู่ในเครื่องเดียวกัน
- แต่ละโหนดในคลัสเตอร์สามารถมีพาร์ติชันได้มากกว่าหนึ่งพาร์ติชัน
- จำนวนพาร์ติชันทั้งหมดสามารถกำหนดค่าได้โดยค่าเริ่มต้นจะถูกตั้งค่าเป็นจำนวนคอร์ทั้งหมดบนโหนดตัวดำเนินการทั้งหมด
ประเภทของการแบ่งพาร์ติชันใน Spark
Spark รองรับการแบ่งพาร์ติชันสองประเภท
วิธีการโคลนวัตถุใน java
- การแบ่งพาร์ติชันแฮช : ใช้ Java’s Object.hashCode วิธีการกำหนดพาร์ติชันเป็น พาร์ติชัน = key.hashCode ()% numPartitions
- การแบ่งช่วง : ใช้ช่วงเพื่อแจกจ่ายไปยังพาร์ติชันที่เกี่ยวข้องกับคีย์ที่อยู่ในช่วง วิธีนี้เหมาะสำหรับกรณีที่มีการเรียงลำดับตามปกติในคีย์และคีย์ไม่เป็นค่าลบ ข้อมูลโค้ดด้านล่างแสดงการใช้งานของ range partitioner
ตัวอย่างรหัส
มาดูตัวอย่างวิธีแบ่งข้อมูลระหว่างโหนดของผู้ปฏิบัติงาน มีรหัส Scala แบบเต็ม ที่นี่ .
ต่อไปนี้เป็นข้อมูลการทดสอบของพิกัด 12 พิกัด (เป็น tuples)
coupling ใน java คืออะไร
สร้างไฟล์ org.apache.spark.HashPartitioner ขนาด 2 ซึ่งคีย์จะถูกแบ่งพาร์ติชันทั้งสองพาร์ติชั่นนี้ตามรหัสแฮชของคีย์
จากนั้นเราสามารถตรวจสอบคู่และทำการแปลงตามคีย์ต่างๆเช่น foldByKey และ ReduceByKey
การสรุปการแบ่งพาร์ติชันช่วยเพิ่มความเร็วในการดำเนินการอย่างมากสำหรับการแปลงตามคีย์
มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป
กระทู้ที่เกี่ยวข้อง:
ซ็อกเก็ตใน java คืออะไร
ทำไมคุณควรเรียนรู้ Spark หลังจากเรียนรู้ Hadoop