Hadoop Partitioner: เรียนรู้เกี่ยวกับบทนำ ไวยากรณ์ การนำไปใช้
เผยแพร่แล้ว: 2020-05-14วัตถุประสงค์พื้นฐานของบทช่วยสอน Hadoop Partitioner นี้คือการให้คำจำกัดความแบบจุดต่อจุดของทุกส่วนที่ใช้ใน Hadoop ในบทความนี้ เราจะมาพูดถึงความหมายของ Hadoop Partitioner ความจำเป็นของ Partitioner ใน Hadoop และกรณีที่ไม่ดีของการแบ่งพาร์ติชั่น Hadoop
ให้เราเข้าใจว่า Hadoop Partitioner คืออะไร
สารบัญ
Partitioner ใน Hadoop คืออะไร?
ตัวแบ่งพาร์ติชั่นอนุญาตให้เผยแพร่วิธีที่เอาท์พุตจากสเตจของแผนที่ไปยังตัวลดขนาด
Partitioner ควบคุมส่วนสำคัญของเอาต์พุตแผนที่กลาง คีย์หรือชุดย่อยของคีย์ใช้เพื่ออนุมานพาร์ติชั่นโดยใช้ฟังก์ชันแฮช
ตามความเป็นจริง โครงสร้าง Hadoop เป็นตัวแบ่งพาร์ติชันแบบแฮช ฟังก์ชันแฮชนี้ใน Hadoop ช่วยให้ได้พาร์ติชั่น
พาร์ติชันทำงานบนเอาต์พุตของ mapper ขึ้นอยู่กับค่าคีย์ ค่าคีย์เดียวกันจะเข้าไปในพาร์ติชั่นเดียวกันภายในแต่ละ mapper หลังจากกระบวนการนี้ พาร์ติชันสุดท้ายจะถูกส่งไปยังตัวลดขนาด

คลาสของพาร์ติชั่นเป็นตัวกำหนดว่าคู่ของคีย์และค่าจะไปที่ใด ระยะการแบ่งชั้นจะอยู่ตรงกลางของแผนที่และลดขั้นตอน
มาดูกันว่าทำไมถึงต้องมี Hadoop Partitioner
ความต้องการ Hadoop Partitioner คืออะไร?
มีการใช้ชุดข้อมูลอินพุต และรายการคู่คีย์และค่าถูกสร้างขึ้นในขั้นตอนงานสถาปัตยกรรม MapReduce คู่คีย์และค่าเหล่านี้ถูกสร้างขึ้นในเฟสของแผนที่ สิ่งนี้เกิดขึ้นเมื่อข้อมูลอินพุตถูกแยกออก ซึ่งจากนั้นจะถูกประมวลผลโดยงานและแผนที่แต่ละรายการ ทำให้เกิดรายการคู่คีย์และค่า
อย่างไรก็ตาม พาร์ติชั่น map out จะเกิดขึ้นก่อนเฟสลด โดยพิจารณาจากคีย์และค่า ด้วยวิธีนี้ คีย์ทั้งหมดของค่าเดียวกันจะถูกจัดกลุ่มเข้าด้วยกัน และไปที่ตัวลดเดียวกัน ดังนั้น แม้แต่การกระจายเอาต์พุตจากแผนที่บนตัวลดก็ยังมั่นใจ
การแบ่งพาร์ติชั่น Hadoop MapReduce ช่วยให้สามารถกระจายเอาต์พุตของ mapper บนตัวลดขนาดได้โดยทำให้แน่ใจว่าคีย์ที่ถูกต้องจะไปที่ตัวลดที่ถูกต้อง
อ่าน : Hadoop Developer เงินเดือนในอินเดีย
ไวยากรณ์ของ Hash Partitioner ใน Hadoop
นี่คือไวยากรณ์เริ่มต้นของตัวแบ่งแฮชใน Hadoop
int getPartition สาธารณะ (คีย์ K, ค่า V
จำนวน intReduceTasks)
{
return(key.hashCode() & Integer.MAX_VALUE) % numRedudeTasks;
}
การใช้งาน Hadoop Partitioner
เพื่อดูตัวอย่างการใช้งาน Hadoop Partitioner ในการใช้งานจริง ให้เราดูตารางด้านล่างที่มีข้อมูลสำหรับผู้อยู่อาศัยในตึกในอาคาร
หมายเลขแบน | ชื่อ | เพศ | สมาชิกในครอบครัว | ค่าไฟ | |
1101 | มานิสา | หญิง | 3 | 1500 | |
1102 | ดีพัค | ชาย | 4 | 2000 | |
1103 | ซันเจย์ | ชาย | 3 | 1100 | |
1104 | นิธิ | หญิง | 2 | 900 | |
1105 | ประทีก | ชาย | 1 | 650 | |
1106 | Gopal | ชาย | 4 | 1800 | |
1107 | สามก๊ก | หญิง | 2 | 1300 |
ตอนนี้เรามาเขียนโปรแกรมหาค่าไฟฟ้าสูงสุดตามเพศในกลุ่มสมาชิกในครอบครัวที่แตกต่างกัน – 2 ถึง 3 และต่ำกว่า 4

ข้อมูลที่ได้รับจะถูกบันทึกเป็น input.txt ในไดเร็กทอรี “/home/Hadoop/HadoopPartitioner”
คีย์ตามรูปแบบ – คีย์พิเศษ + ชื่อไฟล์ + หมายเลขบรรทัด ตัวอย่างเช่น,
คีย์ = อินพุต@1
สำหรับสิ่งนี้ ค่าจะเป็น
ค่า = 1101 \t Manisha \t ตัวเมีย \t 3 \t 1500
นี่คือวิธีดำเนินการ:
- อ่านค่า
- ใช้ฟังก์ชัน split เพื่อแยกเพศและเก็บไว้ในตัวแปรสตริง
สตริง[] str = value.toString().split(“\t”, -2);
เพศสตริง = str[2];
- ตอนนี้ส่งข้อมูลเพศและบันทึกค่าข้อมูลเป็นเลย์และคู่ค่าไปยังภารกิจพาร์ติชั่น
Context.write (ข้อความใหม่ (เพศ) ข้อความใหม่ (ค่า));
- ทำซ้ำสำหรับบันทึกทั้งหมด
จากผลลัพธ์ คุณจะได้รับข้อมูลเพศที่จัดเรียงและค่าข้อมูลเป็นคู่คีย์และค่า
นี่คือวิธีที่งานตัวแบ่งพาร์ทิชันจะไป
ขั้นแรก ตัวแบ่งพาร์ติชั่นจะนำคู่คีย์และค่าที่ส่งไปเป็นอินพุต ตอนนี้จะแบ่งข้อมูลออกเป็นส่วนต่างๆ
ป้อนข้อมูล
คีย์ = ค่าฟิลด์เพศ
มูลค่า = มูลค่าบันทึกของเพศนั้น
นี่คือวิธีการที่จะปฏิบัติตาม
- อ่านค่าสมาชิกครอบครัวจากคู่ค่าคีย์
สตริง[] str = value.toString().split(“\t”);
อายุ int = Integer.parseInt(str[3]);
- ตรวจสอบค่าสมาชิกครอบครัวโดยมีเงื่อนไขดังนี้
- สมาชิกในครอบครัวตั้งแต่ 2 ถึง 3
- สมาชิกในครอบครัวน้อยกว่า4
ถ้า(สมาชิกในครอบครัว<4)
{
กลับ 0;
}
อื่น ๆ ถ้า (สมาชิกในครอบครัว>=2 && สมาชิกในครอบครัว<=3)
{
ส่งคืน 1% numReduceTasks;
}
อื่น
{
ส่งคืน 2% numReduceTasks;
}
เอาท์พุต
ข้อมูลของคู่คีย์และค่าจะถูกแบ่งออกเป็นสามคอลเล็กชันที่กำหนด
เรียนรู้เพิ่มเติม: เครื่องมือ Hadoop ที่ดีที่สุดที่คุณควรรู้
การแบ่งพาร์ติชันที่ไม่ดีและการเอาชนะมัน
สมมติว่าคุณสามารถคาดเดาได้ว่าคีย์ใดคีย์หนึ่งในข้อมูลที่ป้อนของคุณจะแสดงมากกว่าคีย์อื่นๆ ดังนั้น คุณอาจต้องส่งคีย์ทั้งหมดของคุณ (จำนวนมาก) ไปยังพาร์ติชั่นหนึ่ง และหลังจากนั้น แจกจ่ายคีย์ที่เหลือไปยังพาร์ติชั่นอื่นทั้งหมดโดยใช้ hashCode()
ดังนั้น ตอนนี้ คุณมีกลไกสองอย่างในการส่งข้อมูลไปยังพาร์ติชั่น:
- ขั้นแรก คีย์ที่แสดงเพิ่มเติมจะถูกส่งไปยังหนึ่งพาร์ติชั่น
- ประการที่สอง คีย์ที่เหลือทั้งหมดจะถูกส่งไปยังพาร์ติชั่นตาม hashCode()
ในตอนนี้ สมมติว่าเทคนิค hashCode() ของคุณไม่สามารถกระจายคีย์อื่นๆ ผ่านพาร์ติชั่นได้อย่างเหมาะสม ดังนั้น ข้อมูลจึงไม่หมุนเวียนในพาร์ติชั่นและรีดิวเซอร์เท่าๆ กัน เนื่องจากแต่ละพาร์ติชั่นเป็นสัดส่วนกับตัวลดขนาด

ดังนั้นตัวลดบางตัวจะมีข้อมูลจำนวนมากกว่าตัวลดแบบอื่น ดังนั้นตัวลดที่เหลือจะต้องรอตัวลดหนึ่งตัว (อันที่มีคีย์ที่ผู้ใช้กำหนด) เนื่องจากการโหลดในมือ
ในกรณีนี้ คุณควรปฏิบัติตามวิธีการที่จะแบ่งปันข้อมูลระหว่างตัวลดขนาดต่างๆ เรียนรู้เพิ่มเติมเกี่ยวกับ Hadoop ด้วยบทแนะนำขั้นสูงสุดของ Hadoop
บทสรุป
เราหวังว่าคู่มือนี้เกี่ยวกับ Hadoop Partitioners จะเป็นประโยชน์กับคุณ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ โปรดติดต่อผู้เชี่ยวชาญที่ upGrad และเราจะช่วยให้คุณผ่านพ้นไปได้
หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติมเกี่ยวกับ Big Data โปรดดูที่ PG Diploma in Software Development Specialization in Big Data program ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีกรณีศึกษาและโครงการมากกว่า 7 กรณี ครอบคลุมภาษาและเครื่องมือในการเขียนโปรแกรม 14 รายการ เวิร์กช็อป ความช่วยเหลือด้านการเรียนรู้และจัดหางานอย่างเข้มงวดมากกว่า 400 ชั่วโมงกับบริษัทชั้นนำ
เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม Executive PG โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
