MapReduce ใน Hadoop คืออะไร Archiแผนผังและไดอะแกรม
⚡ สรุปอย่างชาญฉลาด
MapReduce คือโมเดลการเขียนโปรแกรมของ Hadoop ที่แปลงชุดข้อมูลขนาดใหญ่ให้เป็นผลลัพธ์ขนาดเล็กโดยการเรียกใช้ฟังก์ชัน map กับทุกส่วนย่อยของข้อมูลขาเข้า จากนั้นจึงเรียกใช้ฟังก์ชัน reduce กับค่ากลางที่จัดกลุ่มไว้
MapReduce ใน Hadoop คืออะไร
MapReduce เป็นเฟรมเวิร์กซอฟต์แวร์และแบบจำลองการเขียนโปรแกรมที่ใช้สำหรับการประมวลผลข้อมูลจำนวนมหาศาล โปรแกรม MapReduce ทำงานในสองขั้นตอน ได้แก่ Map และ Reduce งาน Map เกี่ยวข้องกับการแบ่งและแมปข้อมูลping ของข้อมูลในขณะที่งานลดจำนวนลงจะสลับและลดขนาดข้อมูลลง
Hadoop สามารถรันโปรแกรม MapReduce ที่เขียนด้วยภาษาต่างๆ ได้: Javaทับทิม Pythonและ C++โปรแกรม MapReduce มีลักษณะการทำงานแบบขนาน ดังนั้นจึงมีประโยชน์อย่างมากสำหรับการวิเคราะห์ข้อมูลขนาดใหญ่โดยใช้เครื่องหลายเครื่องในคลัสเตอร์
ข้อมูลที่ป้อนเข้าสู่แต่ละขั้นตอนคือคู่คีย์-ค่า นอกจากนี้ โปรแกรมเมอร์ทุกคนต้องระบุฟังก์ชันสองฟังก์ชัน ได้แก่ ฟังก์ชัน map และฟังก์ชัน reduce
แผนที่ลด Archiการสอนใน Big Data อธิบายด้วยตัวอย่าง
กระบวนการทั้งหมดประกอบด้วยสี่ขั้นตอนหลัก ได้แก่ การแบ่ง การแมปpingการสับเปลี่ยน และการลดจำนวน
ในบทเรียน MapReduce นี้ เรามาทำความเข้าใจ MapReduce ด้วยตัวอย่างกันครับ
สมมติว่าคุณมีข้อมูลป้อนเข้าต่อไปนี้สำหรับ MapReduce ของคุณ ข้อมูลขนาดใหญ่ โปรแกรม:
Welcome to Hadoop Class Hadoop is good Hadoop is bad
แผนภาพด้านล่าง tracใช้เส้นสามเส้นนั้นในทุกขั้นตอน ตั้งแต่การแบ่งข้อมูลขาเข้าทางด้านซ้าย ไปจนถึงจำนวนคำสุดท้ายทางด้านขวา
ผลลัพธ์สุดท้ายของงาน MapReduce คือ
| ไม่ดี | 1 |
| ชั้น | 1 |
| ดี | 1 |
| Hadoop | 3 |
| is | 2 |
| ไปยัง | 1 |
| ยินดีต้อนรับ | 1 |
ข้อมูลจะผ่านขั้นตอนต่างๆ ของ MapReduce ใน Big Data ดังต่อไปนี้
การแบ่งอินพุต
ข้อมูลนำเข้าสำหรับงาน MapReduce ใน Big Data จะถูกแบ่งออกเป็นส่วนย่อยขนาดคงที่ที่เรียกว่า input split input split คือส่วนหนึ่งของข้อมูลนำเข้าที่จะถูกประมวลผลโดย map เดียว
แผนที่แสดงที่ตั้งบริษัทping
นี่คือขั้นตอนแรกสุดในการทำงานของโปรแกรม MapReduce ในขั้นตอนนี้ ข้อมูลในแต่ละส่วนจะถูกส่งไปยังแผนที่ (map)ping ฟังก์ชันสำหรับสร้างค่าเอาต์พุต ในตัวอย่างของเรา หน้าที่ของแผนที่คือการสร้างค่าเอาต์พุตping ขั้นตอนต่อไปคือการนับจำนวนครั้งที่แต่ละคำปรากฏจากคำที่แยกออกมา (รายละเอียดเพิ่มเติมเกี่ยวกับการแยกคำจะกล่าวถึงด้านล่าง) และจัดทำรายการในรูปแบบดังนี้ .
สับ
ขั้นตอนนี้นำเอาผลลัพธ์จากแผนที่ไปใช้ping ขั้นตอนนี้มีหน้าที่รวบรวมบันทึกที่เกี่ยวข้องจากแผนที่ping เอาต์พุตเฟส ในตัวอย่างของเรา คำเดียวกันจะถูกจัดกลุ่มเข้าด้วยกันพร้อมกับความถี่ที่เกี่ยวข้อง
ลด
ในขั้นตอนนี้ ค่าผลลัพธ์จากขั้นตอนการสุ่มสลับจะถูกรวบรวมเข้าด้วยกัน ขั้นตอนนี้จะรวมค่าจากขั้นตอนการสุ่มสลับและส่งคืนค่าผลลัพธ์เดียว กล่าวโดยสรุป ขั้นตอนนี้จะสรุปชุดข้อมูลทั้งหมด
ในตัวอย่างของเรา ขั้นตอนนี้จะรวบรวมค่าจากขั้นตอนการสุ่มสลับคำ กล่าวคือ จะคำนวณจำนวนครั้งทั้งหมดที่แต่ละคำปรากฏ
แผนที่ลด Architecture อธิบายอย่างละเอียด
หัวข้อด้านล่างนี้จะอธิบายวิธีการจัดวางและจัดเก็บงานแยกย่อย งานแมป และงานลดขนาดในคลัสเตอร์
- จะมีการสร้างงานแมปหนึ่งงานสำหรับแต่ละส่วนแบ่ง จากนั้นงานแมปจะเรียกใช้ฟังก์ชันแมปสำหรับแต่ละเรคอร์ดในส่วนแบ่งนั้น
- การแบ่งข้อมูลออกเป็นส่วนย่อยๆ หลายส่วนนั้นมีประโยชน์เสมอ เพราะเวลาที่ใช้ในการประมวลผลแต่ละส่วนย่อยนั้นน้อยกว่าเวลาที่ใช้ในการประมวลผลข้อมูลทั้งหมด การแบ่งข้อมูลให้เป็นส่วนย่อยๆ จะช่วยให้การประมวลผลมีความสมดุลมากขึ้น เนื่องจากส่วนย่อยต่างๆ จะถูกประมวลผลแบบขนานกัน
- อย่างไรก็ตาม การแบ่งงานที่เล็กเกินไปก็ไม่ใช่เรื่องที่พึงประสงค์เช่นกัน เมื่อการแบ่งงานเล็กเกินไป ค่าใช้จ่ายในการจัดการการแบ่งงานและการสร้างงานแผนที่ (map task) จะเริ่มครอบงำเวลาการทำงานโดยรวม
- สำหรับงานส่วนใหญ่ การกำหนดขนาดการแบ่งให้เท่ากับขนาดของงานจะดีกว่า เอชดีเอฟเอส บล็อกซึ่งมีค่าเริ่มต้นที่ 128 MB ตั้งแต่ Hadoop 2.x เป็นต้นไป (เดิมคือ 64 MB ใน Hadoop 1.x) และถูกควบคุมโดย
dfs.blocksizeคุณสมบัติ - การดำเนินการของงานแผนที่ส่งผลให้มีการเขียนผลลัพธ์ลงในดิสก์ภายในเครื่องของโหนดนั้นๆ ไม่ใช่ลงใน HDFS
- เหตุผลที่เลือกใช้ดิสก์ภายในเครื่องแทน HDFS ก็เพื่อหลีกเลี่ยงการจำลองข้อมูลที่เกิดขึ้นระหว่างการดำเนินการจัดเก็บข้อมูลบน HDFS
- เอาต์พุตแผนที่เป็นเอาต์พุตระดับกลางซึ่งถูกประมวลผลโดยลดงานเพื่อสร้างเอาต์พุตสุดท้าย
- เมื่องานเสร็จสมบูรณ์ เอาต์พุตแผนที่จะถูกโยนทิ้งไป ดังนั้นการจัดเก็บไว้ใน HDFS พร้อมการจำลองแบบจึงเกินความจำเป็น
- ในกรณีที่โหนดล้มเหลว ก่อนที่งานลดจะใช้เอาท์พุตแผนที่ Hadoop จะรันงานแมปบนโหนดอื่นอีกครั้ง และสร้างเอาท์พุตแมปขึ้นใหม่
- คำสั่ง Reduce ไม่ทำงานบนแนวคิดเรื่องตำแหน่งที่ตั้งของข้อมูล เอาต์พุตของคำสั่ง Map ทุกคำสั่งจะถูกส่งไปยังคำสั่ง Reduce ส่วนเอาต์พุตของคำสั่ง Map จะถูกส่งไปยังเครื่องที่คำสั่ง Reduce กำลังทำงานอยู่
- บนเครื่องนี้ เอาต์พุตจะถูกรวมเข้าด้วยกัน แล้วส่งต่อไปยังฟังก์ชันลดขนาดที่ผู้ใช้กำหนด
- ต่างจากผลลัพธ์ของคำสั่ง map ผลลัพธ์ของคำสั่ง reduce จะถูกจัดเก็บไว้ใน HDFS (สำเนาแรกจะถูกจัดเก็บไว้ในโหนดภายในเครื่อง และสำเนาอื่นๆ จะถูกจัดเก็บไว้ในโหนดภายนอก) ดังนั้น การเขียนผลลัพธ์ของคำสั่ง reduce จึงใช้แบนด์วิดท์เครือข่าย แต่ใช้เพียงเท่ากับปริมาณการเขียนข้อมูลลง HDFS ตามปกติเท่านั้น
การจัดระเบียบ MapReduce ทำงานอย่างไร
ในบทเรียน MapReduce นี้ เราจะเรียนรู้วิธีการทำงานของ MapReduce
Hadoop แบ่งงานออกเป็นงานย่อย โดยมีงานย่อยอยู่สองประเภท:
- งานแผนที่ (การแบ่งและแผนที่)ping)
- ลดจำนวนงาน (การสลับงาน การลดจำนวนงาน)
กระบวนการดำเนินการทั้งหมด ซึ่งก็คือการดำเนินการทั้งงาน Map และ Reduce นั้น ถูกควบคุมโดยเอนทิตีสองประเภทที่เรียกว่า:
- การสัมภาษณ์Tracker: ทำหน้าที่เสมือนมาสเตอร์และรับผิดชอบการดำเนินการทั้งหมดของงานที่ส่งเข้ามา
- งานหลายอย่างTracพวกเขาทำตัวเหมือนทาส แต่ละคนทำหน้าที่คนละส่วน
สำหรับทุกงานที่ส่งเข้ามาเพื่อดำเนินการในระบบ จะมีงานหนึ่งงานTracเคอร์ที่อยู่ในเนมโนด และมีงานหลายงานTrackers ซึ่งอยู่ใน DataNodes
หมายเหตุ งานTracเคอร์และงานTracker pair เป็นส่วนหนึ่งของ MapReduce เวอร์ชัน 1 (Hadoop 1.x) ตั้งแต่ Hadoop 2.x เป็นต้นไป YARN จะแบ่งหน้าที่เหล่านั้นออกเป็น ResourceManager ทั่วทั้งคลัสเตอร์, NodeManager บนทุกโหนด และ ApplicationMaster หนึ่งตัวต่อหนึ่งงาน แม้ว่าขั้นตอนการแมป การสับเปลี่ยน และการลดทอนจะยังคงไม่เปลี่ยนแปลงก็ตาม
แผนภาพด้านล่างแสดงให้เห็นว่างานที่ส่งเข้ามานั้นถูกแบ่งออกเป็นงานย่อยอย่างไร tracกระจายอยู่ทั่วคลัสเตอร์
- งานหนึ่งๆ จะถูกแบ่งออกเป็นหลายภารกิจ ซึ่งแต่ละภารกิจจะถูกประมวลผลบนโหนดข้อมูลหลายๆ โหนดในคลัสเตอร์
- นั่นเป็นความรับผิดชอบของงาน tracker ทำหน้าที่ประสานงานกิจกรรมโดยการกำหนดตารางเวลาให้งานต่างๆ ทำงานบนโหนดข้อมูลที่แตกต่างกัน
- จากนั้น การดำเนินการของแต่ละภารกิจจะได้รับการดูแลโดยภารกิจนั้นๆ tracker ซึ่งเป็นไฟล์ที่อยู่บนโหนดข้อมูลทุกโหนดที่กำลังประมวลผลส่วนหนึ่งของงาน
- งาน tracหน้าที่ของเคอร์คือการส่งรายงานความคืบหน้าไปยังผู้ที่เกี่ยวข้องในงาน tracเคอร์
- นอกจากนี้ งานดังกล่าว tracker จะส่งสัญญาณ 'หัวใจเต้น' ไปยัง Job เป็นระยะTracเพื่อแจ้งให้ทราบถึงสถานะปัจจุบันของระบบ
- ดังนั้นงานจึงเสร็จสิ้น tracเคอร์เก็บ track ของความคืบหน้าโดยรวมของแต่ละงาน ในกรณีที่งานล้มเหลว งานนั้นจะถูกยกเลิก tracker สามารถกำหนดเวลาใหม่ให้กับงานอื่นได้ tracเคอร์


