MapReduce - API
ในบทนี้เราจะมาดูคลาสและวิธีการที่เกี่ยวข้องกับการทำงานของโปรแกรม MapReduce เราจะให้ความสำคัญกับสิ่งต่อไปนี้เป็นหลัก -
- อินเทอร์เฟซ JobContext
- ชั้นงาน
- คลาส Mapper
- คลาสลด
อินเทอร์เฟซ JobContext
อินเทอร์เฟซ JobContext เป็นอินเทอร์เฟซขั้นสูงสำหรับคลาสทั้งหมดซึ่งกำหนดงานต่างๆใน MapReduce ช่วยให้คุณมีมุมมองแบบอ่านอย่างเดียวของงานที่จัดเตรียมให้กับงานในขณะที่ทำงาน
ต่อไปนี้เป็นอินเทอร์เฟซย่อยของอินเทอร์เฟซ JobContext
ส. | คำอธิบาย Subinterface |
---|---|
1. | MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> กำหนดบริบทที่กำหนดให้กับ Mapper |
2. | ReduceContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> กำหนดบริบทที่ส่งผ่านไปยัง Reducer |
คลาสงานเป็นคลาสหลักที่ใช้อินเทอร์เฟซ JobContext
ชั้นงาน
คลาส Job เป็นคลาสที่สำคัญที่สุดใน MapReduce API ช่วยให้ผู้ใช้กำหนดค่างานส่งงานควบคุมการดำเนินการและสอบถามสถานะ วิธีการตั้งค่าจะใช้ได้เฉพาะจนกว่างานจะถูกส่งหลังจากนั้นพวกเขาจะโยน IllegalStateException
โดยปกติผู้ใช้จะสร้างแอปพลิเคชันอธิบายแง่มุมต่างๆของงานจากนั้นส่งงานและตรวจสอบความคืบหน้า
นี่คือตัวอย่างวิธีการส่งงาน -
// Create a new Job
Job job = new Job(new Configuration());
job.setJarByClass(MyJob.class);
// Specify various job-specific parameters
job.setJobName("myjob");
job.setInputPath(new Path("in"));
job.setOutputPath(new Path("out"));
job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class);
// Submit the job, then poll for progress until the job is complete
job.waitForCompletion(true);
ตัวสร้าง
ต่อไปนี้เป็นสรุปตัวสร้างของคลาส Job
ส. เลขที่ | สรุปตัวสร้าง |
---|---|
1 | Job() |
2 | Job(การกำหนดค่าคอนฟิก) |
3 | Job(Configuration Configuration, String jobName) |
วิธีการ
วิธีการที่สำคัญบางประการของ Job class มีดังนี้ -
ส. เลขที่ | คำอธิบายวิธีการ |
---|---|
1 | getJobName() ชื่องานที่ผู้ใช้ระบุ |
2 | getJobState() ส่งคืนสถานะปัจจุบันของงาน |
3 | isComplete() ตรวจสอบว่างานเสร็จสิ้นหรือไม่ |
4 | setInputFormatClass() ตั้งค่า InputFormat สำหรับงาน |
5 | setJobName(String name) ตั้งชื่องานที่ผู้ใช้ระบุ |
6 | setOutputFormatClass() ตั้งค่ารูปแบบเอาต์พุตสำหรับงาน |
7 | setMapperClass(Class) ตั้งค่า Mapper สำหรับงาน |
8 | setReducerClass(Class) ตั้งค่าตัวลดสำหรับงาน |
9 | setPartitionerClass(Class) ตั้งค่า Partitioner สำหรับงาน |
10 | setCombinerClass(Class) ตั้งค่า Combiner สำหรับงาน |
คลาส Mapper
คลาส Mapper กำหนดงานแผนที่ จับคู่คีย์ - ค่าป้อนข้อมูลให้กับชุดของคู่คีย์ - ค่าระดับกลาง แผนที่เป็นงานแต่ละรายการที่เปลี่ยนบันทึกข้อมูลเข้าเป็นระเบียนระดับกลาง เร็กคอร์ดระดับกลางที่แปลงแล้วไม่จำเป็นต้องเป็นประเภทเดียวกันกับเร็กคอร์ดอินพุต คู่อินพุตที่ระบุอาจแมปเป็นศูนย์หรือคู่เอาต์พุตหลายคู่
วิธี
mapเป็นวิธีที่โดดเด่นที่สุดของคลาส Mapper ไวยากรณ์ถูกกำหนดไว้ด้านล่าง -
map(KEYIN key, VALUEIN value, org.apache.hadoop.mapreduce.Mapper.Context context)
วิธีนี้เรียกครั้งเดียวสำหรับแต่ละคู่คีย์ - ค่าในการแยกอินพุต
คลาสลด
คลาส Reducer กำหนดงานลดใน MapReduce ลดชุดของค่ากลางที่แบ่งคีย์ไปยังชุดค่าที่เล็กกว่า การใช้งานตัวลดสามารถเข้าถึงการกำหนดค่าสำหรับงานผ่านวิธี JobContext.getConfiguration () ตัวลดมีสามขั้นตอนหลัก - สุ่มเรียงลำดับและลด
Shuffle - Reducer คัดลอกเอาต์พุตที่เรียงลำดับจาก Mapper แต่ละตัวโดยใช้ HTTP ผ่านเครือข่าย
Sort- เฟรมเวิร์กผสาน - จัดเรียงอินพุต Reducer ด้วยคีย์ (เนื่องจาก Mappers ที่แตกต่างกันอาจมีเอาต์พุตคีย์เดียวกัน) ขั้นตอนการสับเปลี่ยนและการเรียงลำดับเกิดขึ้นพร้อมกันกล่าวคือในขณะที่กำลังดึงข้อมูลเอาต์พุตจะรวมเข้าด้วยกัน
Reduce - ในขั้นตอนนี้วิธีการลด (Object, Iterable, Context) ถูกเรียกใช้สำหรับแต่ละ <key, (collection of values)> ในอินพุตที่เรียงลำดับ
วิธี
reduceเป็นวิธีที่โดดเด่นที่สุดของคลาสลด ไวยากรณ์ถูกกำหนดไว้ด้านล่าง -
reduce(KEYIN key, Iterable<VALUEIN> values, org.apache.hadoop.mapreduce.Reducer.Context context)
วิธีนี้เรียกหนึ่งครั้งสำหรับแต่ละคีย์บนคอลเลกชันของคู่คีย์ - ค่า