ฉันพยายามที่จะเข้าใจความสัมพันธ์ของจำนวนคอร์และจำนวนผู้บริหารเมื่อทำการรันงาน Spark บน YARN
สภาพแวดล้อมการทดสอบมีดังนี้:
- จำนวนโหนดข้อมูล: 3
- ข้อมูลจำเพาะของเครื่องโหนดข้อมูล:
- CPU: Core i7-4790 (จำนวนแกน: 4, จำนวนเธรด: 8)
- RAM: 32GB (8GB x 4)
- HDD: 8TB (2TB x 4)
เครือข่าย: 1Gb
รุ่น Spark: 1.0.0
รุ่น Hadoop: 2.4.0 (Hortonworks HDP 2.1)
Spark job flow: sc.textFile -> filter -> map -> filter -> mapToPair -> ลดByKey -> map -> saveAsTextFile
ป้อนข้อมูล
- ประเภท: ไฟล์ข้อความเดียว
- ขนาด: 165GB
- จำนวนบรรทัด: 454,568,833
เอาท์พุต
- จำนวนบรรทัดหลังจากตัวกรองที่สอง: 310,640,717
- จำนวนบรรทัดของไฟล์ผลลัพธ์: 99,848,268
- ขนาดของไฟล์ผลลัพธ์: 41GB
งานถูกรันด้วยคอนฟิกูเรชันต่อไปนี้:
--master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3
(ตัวเรียกใช้งานต่อโหนดข้อมูลใช้มากที่สุดเท่าที่แกน)--master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3
(จำนวนแกนลดลง)--master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12
(คอร์น้อยกว่าตัวจัดการเพิ่มเติม)
เวลาที่ผ่านไป:
50 นาที 15 วินาที
55 นาที 48 วินาที
31 นาที 23 วินาที
ฉันประหลาดใจมาก (3) เร็วขึ้นมาก
ฉันคิดว่า (1) จะเร็วขึ้นเนื่องจากจะมีการสื่อสารระหว่างผู้ปฏิบัติการน้อยลงเมื่อสับ
แม้ว่า # ของแกนของ (1) น้อยกว่า (3) แต่ #of แกนไม่ใช่ปัจจัยสำคัญเนื่องจาก 2) ทำงานได้ดี
(มีการเพิ่มสิ่งต่อไปนี้หลังจากคำตอบของ pwilmot)
สำหรับข้อมูลการจับภาพหน้าจอมอนิเตอร์ประสิทธิภาพมีดังนี้:
- สรุปโหนดข้อมูล Ganglia สำหรับ (1) - งานเริ่มต้นที่ 04:37
- สรุปโหนดข้อมูล Ganglia สำหรับ (3) - งานเริ่มต้นที่ 19:47 โปรดละเว้นกราฟก่อนหน้านั้น
กราฟแบ่งออกเป็น 2 ส่วนโดยประมาณ:
- ก่อน: ตั้งแต่เริ่มต้นจนถึงลด ByYey: CPU เข้มข้นไม่มีกิจกรรมเครือข่าย
- ที่สอง: หลังจากลดโดย ByKey: CPU ลดลง I / O เครือข่ายจะทำ
ดังที่กราฟแสดงให้เห็นว่า (1) สามารถใช้พลังงาน CPU ได้มากเท่าที่ได้รับ ดังนั้นอาจไม่ใช่ปัญหาของจำนวนเธรด
จะอธิบายผลลัพธ์นี้อย่างไร?