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()

ดังนั้น ตอนนี้ คุณมีกลไกสองอย่างในการส่งข้อมูลไปยังพาร์ติชั่น:

  1. ขั้นแรก คีย์ที่แสดงเพิ่มเติมจะถูกส่งไปยังหนึ่งพาร์ติชั่น
  2. ประการที่สอง คีย์ที่เหลือทั้งหมดจะถูกส่งไปยังพาร์ติชั่นตาม hashCode()

ในตอนนี้ สมมติว่าเทคนิค hashCode() ของคุณไม่สามารถกระจายคีย์อื่นๆ ผ่านพาร์ติชั่นได้อย่างเหมาะสม ดังนั้น ข้อมูลจึงไม่หมุนเวียนในพาร์ติชั่นและรีดิวเซอร์เท่าๆ กัน เนื่องจากแต่ละพาร์ติชั่นเป็นสัดส่วนกับตัวลดขนาด

ดังนั้นตัวลดบางตัวจะมีข้อมูลจำนวนมากกว่าตัวลดแบบอื่น ดังนั้นตัวลดที่เหลือจะต้องรอตัวลดหนึ่งตัว (อันที่มีคีย์ที่ผู้ใช้กำหนด) เนื่องจากการโหลดในมือ

ในกรณีนี้ คุณควรปฏิบัติตามวิธีการที่จะแบ่งปันข้อมูลระหว่างตัวลดขนาดต่างๆ เรียนรู้เพิ่มเติมเกี่ยวกับ Hadoop ด้วยบทแนะนำขั้นสูงสุดของ Hadoop

บทสรุป

เราหวังว่าคู่มือนี้เกี่ยวกับ Hadoop Partitioners จะเป็นประโยชน์กับคุณ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ โปรดติดต่อผู้เชี่ยวชาญที่ upGrad และเราจะช่วยให้คุณผ่านพ้นไปได้

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

เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม Executive PG โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

ปรมาจารย์ด้านเทคโนโลยีแห่งอนาคต - Big Data

โปรแกรมประกาศนียบัตรขั้นสูงด้าน Big Data จาก IIIT Bangalore