1. เริ่มคลัสเตอร์ Spark ซึ่งคือการเรียกใช้ SBIN/Start-all.sh เริ่มต้น Master และโหนดคนงานหลายคน ต้นแบบส่วนใหญ่จะใช้เป็นการจัดการและการตรวจสอบของคลัสเตอร์และโหนดคนงานส่วนใหญ่รับผิดชอบในการใช้งานแอปพลิเคชันต่างๆ โหนดหลักจำเป็นต้องให้โหนดผู้ปฏิบัติงานรายงานสถานะของตัวเองเช่น CPU และหน่วยความจำมีขนาดใหญ่แค่ไหน กระบวนการนี้เสร็จสมบูรณ์ผ่านกลไกการเต้นของหัวใจ
2. หลังจากต้นแบบได้รับข้อมูลรายงานของคนงานแล้วมันจะให้ข้อมูลผู้ปฏิบัติงาน
3. ไดรเวอร์ส่งงานไปยังกลุ่มประกาย [การสื่อสารระหว่างคนขับและต้นแบบทำได้ผ่าน Akkaactor นั่นคือ Master เป็นแบบจำลองนักแสดงในรูปแบบการสื่อสารแบบอะซิงโครนัส Akkaactor และไดร์เวอร์เหมือนกัน ไดรเวอร์แบบอะซิงโครนัสส่งข้อมูลการลงทะเบียน (การลงทะเบียน) แบบอะซิงโครนัสเพื่อมาสเตอร์]
4. โหนดหลักประมาณการแอปพลิเคชัน 7 กรัมของหน่วยความจำเสร็จสิ้นงานจัดสรรงานและโหนดคนงานแต่ละคนจะจัดสรรหน่วยความจำ 3.5 กรัมเพื่อดำเนินการงาน ในอาจารย์งานของคนงานแต่ละคนจะได้รับการตรวจสอบและกำหนดเวลาโดยรวม
5. โหนดคนงานได้รับงานและเริ่มดำเนินการ เริ่มกระบวนการดำเนินการที่สอดคล้องกันบนโหนดคนงานเพื่อดำเนินการ ผู้บริหารแต่ละคนมีแนวคิดพูลเธรดซึ่งมีหลายเธรดงาน
6. ผู้ดำเนินการจะนำงานออกจากพูลเธรดเพื่อคำนวณข้อมูลใน RDDPatition การแปลงการดำเนินการและการดำเนินการ
7. โหนดคนงานรายงานสถานะการคำนวณไปยังโหนดไดรเวอร์
สร้าง RDD ด้วยคอลเลกชันขนานในท้องถิ่น
คลาสสาธารณะ Javalocalsumapp {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {SparkConf conf = new SparkConf (). setAppName ("JavalocalsumApp"); javasparkContext Sc = new JavasparkContext (conf); <teger> listrdd = sc.parallelize (รายการ); // ผลรวมจำนวนเต็ม sum = listrdd.Reduce (ฟังก์ชั่นใหม่ 2 <จำนวนเต็ม, จำนวนเต็ม, จำนวนเต็ม, จำนวนเต็ม> () {@override การโทรสาธารณะ (integer v1, integer v2) การเขียนโปรแกรมใน Java ต้องตั้งค่าคอมไพเลอร์เป็น 1.8listrdd.Reduce ((v1, v2) => v1+v2)SparkTransformation และการดำเนินการ
RDD: ชุดข้อมูลแบบกระจายแบบยืดหยุ่นเป็นคอลเลกชันที่รองรับหลายแหล่งมีกลไกที่ทนต่อความผิดพลาดสามารถแคชและรองรับการดำเนินการแบบขนาน RDD แสดงถึงชุดข้อมูลในพาร์ติชัน
RDD มีผู้ให้บริการปฏิบัติการสองราย:
การแปลง: การแปลงเป็นการคำนวณล่าช้า เมื่อ RDD หนึ่งถูกแปลงเป็น RDD อื่นมันจะไม่แปลงทันที มันจำการดำเนินการเชิงตรรกะของชุดข้อมูล
การดำเนินการ: ทริกเกอร์การดำเนินงานของ Spark Jobs และกระตุ้นให้เกิดการคำนวณตัวดำเนินการแปลง
บทบาทของผู้ดำเนินการ Spark
รูปนี้อธิบาย Spark แปลง RDD ผ่านตัวดำเนินการในระหว่างการแปลง ตัวดำเนินการเป็นฟังก์ชั่นที่กำหนดไว้ใน RDD ซึ่งสามารถแปลงและใช้งานข้อมูลใน RDD
อินพุต: ในระหว่างการทำงานของโปรแกรม Spark ข้อมูลจะเป็นจุดประกายจากพื้นที่ข้อมูลภายนอก (เช่นที่เก็บข้อมูลแบบกระจาย: TextFile เพื่ออ่าน HDFs ฯลฯ และวิธีการขนานจะเข้าสู่การรวบรวมหรือข้อมูล Scala) และข้อมูลจะเข้าสู่พื้นที่ข้อมูลรันไทม์ของ Spark
Run: หลังจากอินพุตข้อมูล Spark เป็นอินพุตเป็นรูปแบบ RDD สามารถส่งผ่านตัวดำเนินการแปลงเช่นตัวกรอง ฯลฯ ใช้ข้อมูลและแปลง RDD เป็น RDD ใหม่ ผ่านตัวดำเนินการแอ็คชั่น Spark ส่งงาน หากข้อมูลจำเป็นต้องมีมัลติเพล็กซ์ข้อมูลสามารถแคชไปยังหน่วยความจำผ่านตัวดำเนินการแคช
เอาท์พุท: ข้อมูลหลังจากโปรแกรมรันจะถูกส่งออกไปยัง Spark Space Runtime และเก็บไว้ในที่เก็บข้อมูลแบบกระจาย (เช่น SaveAsTextFile เอาต์พุตไปยัง HDFs) หรือข้อมูล Scala หรือการรวบรวม (รวบรวมเอาต์พุตไปยัง Scala Collection
ภาพรวมการเปลี่ยนแปลงและการดำเนินการ
การเปลี่ยนแปลง
MAP (FUNC): ส่งคืนชุดข้อมูลแบบกระจายใหม่ซึ่งประกอบด้วยองค์ประกอบดั้งเดิมแต่ละองค์ประกอบหลังจากถูกแปลงโดยฟังก์ชั่น func
ตัวกรอง (func): ส่งคืนชุดข้อมูลใหม่ผ่านฟังก์ชั่น func
FlatMap (FUNC): คล้ายกับแผนที่ แต่องค์ประกอบอินพุตแต่ละรายการจะถูกแมปกับ 0 กับองค์ประกอบเอาต์พุตหลายรายการ (ดังนั้นค่าส่งคืนของฟังก์ชั่น func คือ SEQ ไม่ใช่องค์ประกอบเดียว)
ตัวอย่าง (withreplacement, frac, เมล็ด): ตามเมล็ดสุ่มที่กำหนดข้อมูลที่มีจำนวนของ FRAC จำนวนมากถูกสุ่มตัวอย่าง
Union (OtherDataset): ส่งคืนชุดข้อมูลใหม่ซึ่งประกอบด้วยชุดข้อมูลและพารามิเตอร์ดั้งเดิม
roupbykey ([numtasks]): เรียกในชุดข้อมูลที่ประกอบด้วยคู่ (k, v), ส่งคืนชุดข้อมูลของคู่ (k, seq [v]) หมายเหตุ: โดยค่าเริ่มต้น 8 งานขนานจะใช้สำหรับการจัดกลุ่ม คุณสามารถส่งผ่านพารามิเตอร์ทางเลือกของ NumTask และตั้งจำนวนงานที่แตกต่างกันตามจำนวนข้อมูล
RownByKey (func, [numtasks]): ใช้กับชุดข้อมูลคู่ (k, v), คืนข้อมูลคู่ (k, v), ค่าเดียวกันของคีย์ถูกรวมเข้าด้วยกันโดยใช้ฟังก์ชั่นลดที่ระบุ เช่นเดียวกับ GroupByKey จำนวนงานสามารถกำหนดค่าได้ด้วยพารามิเตอร์ตัวเลือกที่สอง
เข้าร่วม (OtherDataset, [numtasks]): เรียกใช้ชุดข้อมูลประเภท (k, v) และ (k, w), คืน (k, (v, w)) และองค์ประกอบทั้งหมดในแต่ละคีย์จะอยู่ด้วยกัน
groupwith (otherdataset, [numtasks]): เรียกในชุดข้อมูลประเภท (k, v) และ (k, w) และส่งคืนชุดข้อมูลด้วยส่วนประกอบ (k, seq [v], seq [w]) tuples การดำเนินการนี้อยู่ในกรอบอื่น ๆ ที่เรียกว่า Cogroup
CARTESIAN (OtherDataset): ผลิตภัณฑ์คาร์ทีเซียน แต่เมื่อเรียกใช้ชุดข้อมูล t และ u ชุดข้อมูลของคู่ (t, u) จะถูกส่งคืนและองค์ประกอบทั้งหมดโต้ตอบกับผลิตภัณฑ์คาร์ทีเซียน
การกระทำ
ลด (func): รวมองค์ประกอบทั้งหมดในชุดข้อมูลผ่านฟังก์ชั่น func ฟังก์ชั่น func ยอมรับพารามิเตอร์ 2 ตัวและส่งคืนค่า ฟังก์ชั่นนี้จะต้องเชื่อมโยงเพื่อให้แน่ใจว่าสามารถดำเนินการได้อย่างถูกต้องและพร้อมกัน
รวบรวม (): ในโปรแกรมไดรเวอร์ให้ส่งคืนองค์ประกอบทั้งหมดของชุดข้อมูลเป็นอาร์เรย์ สิ่งนี้มักจะส่งคืนชุดย่อยข้อมูลขนาดเล็กพอหลังจากใช้ตัวกรองหรือการดำเนินการอื่น ๆ และส่งคืนชุดสะสม RDD ทั้งหมดโดยตรงซึ่งน่าจะทำให้โปรแกรมไดรเวอร์ oom
นับ (): ส่งคืนจำนวนองค์ประกอบในชุดข้อมูล
ใช้ (n): ส่งคืนอาร์เรย์ซึ่งประกอบด้วยองค์ประกอบ N แรกของชุดข้อมูล โปรดทราบว่าการดำเนินการนี้ไม่ได้ดำเนินการในแบบขนานในหลายโหนด แต่เป็นเครื่องที่ตั้งอยู่โปรแกรมไดรเวอร์และองค์ประกอบทั้งหมดจะถูกคำนวณโดยเครื่องเดียว (ความดันหน่วยความจำของเกตเวย์จะเพิ่มขึ้นและต้องใช้ด้วยความระมัดระวัง)
ครั้งแรก (): ส่งคืนองค์ประกอบแรกของชุดข้อมูล (คล้ายกับ (1))
SaveAsTextFile (PATH): บันทึกองค์ประกอบของชุดข้อมูลในรูปแบบของ TextFile ไปยังระบบไฟล์ท้องถิ่น HDF หรือระบบไฟล์อื่น ๆ ที่สนับสนุนโดย Hadoop Spark จะเรียกวิธีการ toString ของแต่ละองค์ประกอบและแปลงเป็นบรรทัดของข้อความในไฟล์
SaveasequenceFile (PATH): บันทึกองค์ประกอบของชุดข้อมูลในรูปแบบของ SequenceFile ไปยังไดเรกทอรีที่ระบุระบบท้องถิ่น HDFS หรือระบบไฟล์อื่น ๆ ที่สนับสนุนโดย Hadoop องค์ประกอบของ RDD จะต้องประกอบด้วยคู่คีย์-ค่าและพวกเขาทั้งหมดใช้อินเทอร์เฟซที่เขียนได้ของ Hadoop หรือพวกเขาสามารถแปลงเป็นเขียนได้โดยปริยาย (Spark รวมถึงการแปลงประเภทพื้นฐานเช่น int, double, ฯลฯ )
foreach (func): เรียกใช้ฟังก์ชั่น func ในแต่ละองค์ประกอบของชุดข้อมูล โดยปกติจะใช้เพื่ออัปเดตตัวแปรสะสมหรือโต้ตอบกับระบบจัดเก็บข้อมูลภายนอก
กระบวนการดำเนินการ WordCount
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับหลักการของสถาปัตยกรรมการจัดตารางเวลา Spark ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!