EPL660: Information Retrieval and Search Engines Lab 5

Σχετικά έγγραφα
EPL451: Data Mining on the Web Lab 3

Web Data Mining ΕΡΓΑΣΤΗΡΙΟ 2 & 3. Prepared by Costantinos Costa Edited by George Nikolaides. EPL Data Mining on the Web

(Διαφάνειες Νίκου Βιδάκη)

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Εαρινό Εξάμηνο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

(C) 2010 Pearson Education, Inc. All rights reserved.

Μαζικός Παραλληλισμός λ με Map - Reduce. Μοντέλο Θέματα υλοποίησης Παραδείγματα διαχείρισης δεδομένων

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

Αντικειμενοστρεφής Προγραμματισμός

EPL660: Information Retrieval and Search Engines Lab 5

ιαδικτυακές Εφαρµογές

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Επεξεργασία Ερωτημάτων Κορυφογραμμής σε Περιβάλλον Map/Reduce

Hancock. Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος. ΕΠΛ 428 Προγραμματισμός Συστημάτων

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Βασικά Στοιχεία Python 3

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Physical DB Design. B-Trees Index files can become quite large for large main files Indices on index files are possible.

EPL451: Data Mining on the Web Lab 1

Week 7: Java Collection Classes

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Wrapper Classes, Abstract Classes and Interfaces

Week. 6: Java Collections

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης. Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 12 Σεπτεµβρίου 2002

άσκηση Hide UI Elements 7.2 Try and Catch

Υλοποίηση κατασκευής δέντρου επιθεμάτων σε Hadoop MapReduce

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Πτυχιακή Εργασία. Θέμα: Υπολογισμός ερωτημάτων κορυφογραμμής 2 διαστάσεων σε κατανεμημένο περιβάλλον με τη βοήθεια της πλατφόρμας λογισμικού Hadoop.

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Αποδοτική επεξεργασία ερωτημάτων κατάταξης στο Map/Reduce

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ακ. έτος , 9ο Εξάμηνο ΗΜ&ΜΥ Ν. Κοζύρης Εξαμηνιαία Εργασία. Εισαγωγή στο MapReduce και στις βάσεις NoSQL

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

Διαχείριση Έργων Πληροφορικής Εργαστήριο

Ενότητα 19 Πως να χειρίζεστε λίστες

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειµενοστρεφής Προγραµµατισµός

υαδικό έντρο Αναζήτησης (BSTree)

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

EPL451: Data Mining on the Web Lab 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Μεταπτυχιακή Διπλωματική Εργασία Υπολογισμός ανάστροφων ερωτημάτων κατάταξης σε κατανεμημένο περιβάλλον

ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Τοµέας Τηλεπικοινωνιών Αναπληρωτής Καθηγητής: Αλέξανδρος Ποταµιάνος

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1


ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/2006

Αντικειμενοστρεφής Προγραμματισμός

Εισαγωγή στις Σελίδες Εξυπηρετητή Java Java Server Pages (JSP)

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Ψηφιακή ανάπτυξη. Course Unit #1 : Κατανοώντας τις βασικές σύγχρονες ψηφιακές αρχές Thematic Unit #1 : Τεχνολογίες Web και CMS

EPL 660: Lab 4 Introduction to Hadoop

MapReduce: Simplified Data Processing on Large Clusters

API: Applications Programming Interface

Standard Template Library (STL) C++ library

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Βασικές Έννοιες Δοµών Δεδοµένων

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Προσομοίωση BP με το Bizagi Modeler

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

Τµήµα Πληροφορικής. Υλοποίηση LRU Cache ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ - ΕΡΓΑΣΙΑ 4. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Γενικά περί Caching

ΠΑΝΔΠΙΣΗΜΙΟ ΜΑΚΔΓΟΝΙΑ ΠΡΟΓΡΑΜΜΑ ΜΔΣΑΠΣΤΥΙΑΚΧΝ ΠΟΤΓΧΝ ΣΜΗΜΑΣΟ ΔΦΑΡΜΟΜΔΝΗ ΠΛΗΡΟΦΟΡΙΚΗ

ΚΥΠΡΙΑΚΟΣ ΣΥΝΔΕΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY 21 ος ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δεύτερος Γύρος - 30 Μαρτίου 2011

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ. Επίπεδα Αφαίρεσης Σ Β. Αποθήκευση Εγγραφών - Ευρετήρια. ρ. Βαγγελιώ Καβακλή ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ, Επίπεδο Όψεων.

Java Μέρος Ι Αντικειμενοστρεφής Προγραμματισμός - 7

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κλάσεις και Αντικείµενα

Ειδικά Θέματα Προγραμματισμού

Διάλεξη 08: ΛίστεςΙΙ Κυκλικές Λίστες. Διδάσκων: Παναγιώτης Ανδρέου

Αντικειµενοστραφής Προγραµµατισµός

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

Εισαγωγικό Φροντιστήριο

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Ευρετήρια. Βάσεις Δεδομένων. Διδάσκων: Μαρία Χαλκίδη

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #2

Transcript:

EPL660: Information Retrieval and Search Engines Lab 5 Παύλος Αντωνίου Γραφείο: B109, ΘΕΕ01 University of Cyprus Department of Computer Science

Classes in Hadoop: InputFormat Fundamental class in Hadoop Map-Reduce Defines the list of tasks that make up the mapping phase Responsible for: 1. Data splits: a) defines the size of data to be processed from individual Map tasks and splits data into chunks (see InputSplit class) b) determines execution node tasks are assigned to nodes based on where the input file chunks are physically resident 2. Record reader: a) Each split is divided into records b) RecordReader is responsible for actual reading records from the InputSplit object and submitting them (as key/value pairs) to the mapper

Java Classes in Hadoop By default the FileInputFormat and its descendants break a file up into 64 MB chunks (the same size as blocks in HDFS) control this value by setting the mapred.min.split.size parameter in hadoop-site.xml, or by overriding the parameter in the JobConf object used to submit a particular MapReduce job. FileInputFormat.addInputPath(job, new Path("hdfs://localhost:54310/user/csdeptucy/input")); Based on chunk size, one InputSplit object for each map task is created FileSplit is the default InputSplit InputSplit describes a unit of work, that comprises a single map task in MapReduce program.

Java Classes in Hadoop RecordReader reads <k,v> pairs from InputSplit instance is defined by the InputFormat default InputFormat, TextInputFormat, provides a LineRecordReader, which treats each line of the input file as a new value. job.setinputformatclass( TextInputFormat.class); CombineFileInputFormat, FixedLengthInputFormat, KeyValueTextInputFormat, NLineInputFormat, SequenceFileInputFormat, TextInputFormat

File splitting into map tasks

Διαδικασία Map Reduce word count HADOOP NODE Partitioning/ Shuffling/ Sorting Input files Splitting Mapper Reducer

Map Reduce process Mapping: Όταν η διαδικασία του mapping ολοκληρωθεί, τα ζεύγη (κλειδί, ενδιάμεση τιμή) πρέπει να ανταλλαχθούν μεταξύ των κόμβων (αν υπάρχουν πολλοί) για να σταλούν όλες οι τιμές (values) με το ίδιο κλειδί σε ένα μοναδικό reducer Partitioning: Ο κάθε partitioner καθορίζει ποιος reducer θα λάβει τα ενδιάμεσα ζεύγη key-value που προκύπτουν από κάθε mapper ζεύγη με το ίδιο key καταλήγουν στον ίδιο reducer

Map Reduce process Shuffling: διαδικασία μεταφοράς των ζευγών <κλειδί, ενδιάμεση τιμή> από κάθε mapper στον reducer το μοναδικό σημείο επικοινωνίας μεταξύ κόμβων (γίνεται πάνω από HTTP) Sorting: διαδικασία συνένωσης και ταξινόμησης ως προς το κλειδί των ζευγών <κλειδί, ενδιάμεση τιμή>. Στο τέλος του sorting, έχουμε μια ταξινομημένη λίστα με <key, (collection of values)> Reduce είναι η φάση που σε κάθε record της πιο πάνω ταξινομημένης λίστας γίνεται η συνάθροιση των values για το ίδιο κλειδί. Ένα πολύ ωραίο άρθρο για το Map Reduce: https://developer.yahoo.com/hadoop/tutorial/module4.html

Map Reduce process

Map Reduce process Combiner (optional): Μπορεί να τρέξει μετά τον Mapper (για να κάνει ένα mini-reduce) πάνω στα τοπικά δεδομένα (ενός κόμβου) Μειώνει τα ενδιάμεσα δεδομένα που ανταλλάζονται (κατά το shuffling) πάνω από το δίκτυο

Υλοποίηση Map Μέσα στην κλάση που θα δημιουργήσει ο χρήστης, πρέπει να οριστεί μια static class που κάνει extend class Mapper <KEYIN,VALUEIN,KEYOUT,VALUEOUT> Η πιο εξέχουσα μέθοδος της κλάσης Mapper είναι η μέθοδος map που ορίζεται: void map (KEYIN key, VALUEIN value, Context context) Οι τύποι KEYIN, VALUEIN, KEYOUT, VALUEOUT πρέπει να «υπακούουν» σε μια συγκεκριμένη διεπαφή (interface), που ονομάζεται Writable Ο τύπος Context χρησιμεύει για την αποθήκευση των δεδομένων που θα επιστρέψει η μέθοδος

Υλοποίηση Reduce Μέσα στην κλάση που θα δημιουργήσει ο χρήστης, πρέπει να οριστεί μια static class που κάνει extend class Reducer <KEYIN,VALUEIN,KEYOUT,VALUEOUT> Η πιο εξέχουσα μέθοδος της κλάσης Reducer είναι η reduce. Η σύνταξη της είναι: void reduce(keyin key, Iterable<VALUEIN> value, Context context) Η είσοδος της μεθόδου reduce είναι ένα ζεύγος της μορφής <key, (collection of values)>

Writable interface Όλα τα δεδομένα στο Hadoop (από/προς αρχεία, από/προς Mappers/Reducers) αποθηκεύονται σε αντικείμενα Αντικείμενα τα οποία περιέχουν πληροφορίες που διαβάζονται από αρχεία ή θα γραφούν σε αρχεία ή θα σταλούν πάνω από δίκτυο (π.χ. κατά το shuffling) πρέπει να υπακούουν σε μια συγκεκριμένη διεπαφή (interface), που ονομάζεται Writable, η οποία επιτρέπει στο Hadoop να διαβάσει και να γράψει τα δεδομένα σε διατεταγμένη (serialized) μορφή (ροή από bytes) αναγκαία για μετάδοση (transmission).

Writable interface Το Hadoop παρέχει κάποιες κλάσεις που υπακούουν στη διεπαφή Writable: Text (που αποθηκεύει δεδομένα τύπου String), IntWritable (ακέραιοι), LongWritable, FloatWritable, BooleanWritable, καθώς και άλλες που ορίζονται στο org.apache.hadoop.io package To Hadoop επιτρέπει στον προγραμματιστή να δημιουργήσει δικούς του τύπους κλειδιών/τιμών. Αυτό επιτρέπει τη χρήση άλλων τύπων πέραν των κλασσικών Text, IntWritable κτλ. Αυτοί οι τύποι πρέπει να υλοποιούν (implement) την διεπαφή Writable

Writable interface: Παράδειγμα Δίνονται log files (text files) από κάποιο server έστω ότι κάθε γραμμή έχει πολλές πληροφορίες σχετικά με ένα γεγονός που συμβαίνει στο server Θέλουμε να κρατήσουμε μόνο κάποιες πληροφορίες σχετικά με αιτήσεις (requests) που γίνονται στον server Για κάθε αίτηση θα φυλάγουμε τις πληροφορίες σε στιγμιότυπο (αντικείμενο) της κλάσης RequestInfo Χαρακτηριστικά κλάσης: requestid, requesttype, timestamp. Οι 3 αυτές τιμές μπορούν να εξαχθούν (σαν ένα αντικείμενο) από Mapper /Reducer σαν κλειδί (key) ή σαν τιμή (value). Δείτε αρχείο εδώ.

Writable interface Αν οι πληροφορίες θα εξαχθούν σαν: τιμή (value) κλάση ΝΑ υλοποιεί την διεπαφή Writable public interface Writable { void readfields(datainput in); void write(dataoutput out); } κλειδί (key) κλάση ΝΑ υλοποιεί την διεπαφή WritableComparable public interface WritableComparable extends Writable, Comparable { void readfields(datainput in); void write(dataoutput out); int compareto(writablecomparable o); }

Writable interface Η κλάση που θα υλοποιεί τη διεπαφή Writable θα πρέπει να ορίσει τουλάχιστον τις 2 μεθόδους: write(dataoutput out) Χρησιμοποιείται για να «διευθετήσει» σε σειρά (serialize) τα πεδία του αντικειμένου μέσα στο out (που είναι μια ροή από bytes, byte stream) readfields(datainput in) Χρησιμοποιείται για να κάνει deserialize τα πεδία του αντικειμένου από το byte stream in. Η κλάση που θα υλοποιεί τη διεπαφή WritableComparable θα πρέπει να ορίσει τουλάχιστον τις 2 μεθόδους + τη compareto() Η μέθοδος αυτή επιτρέπει στο Hadoop να ταξινομεί τα κλειδιά στη φάση του sort.

Task1: Inverted index Σας δίνεται ο κώδικας που κτίζει το Inverted Index (αντίστροφο ευρετήριο) για κάποια αρχεία. Ο κώδικας δημιουργεί ένα αρχείο που περιέχει τη κάθε λέξη και σε ποια αρχεία/γραμμές βρίσκεται: word filename1@lineoffset, filename2@lineoffset, Μελετήστε τον κώδικα για να καταλάβετε πώς λειτουργεί. Αλλάξτε των κώδικα ούτως ώστε να δημιουργήσετε ένα δικό σας τύπο δεδομένων για να εξάγετε από τον mapper τα records [filename@offset] και να εισάγετε στον reducer με τη μορφή IndexMapRecordWritable (σας δίδεται μισό-συμπληρωμένη η κλάση)

Task1: Inverted index Αλλάξτε των κώδικα ούτως ώστε να δημιουργήσετε ένα δικό σας τύπο δεδομένων για να εξάγετε από τον reducer το τελικό αποτέλεσμα με τη μορφή IndexRecordWritable (σας δίδεται μισό-συμπληρωμένη η κλάση) ΣΗΜΕΙΩΣΗ: Πρέπει να κάνετε override τις ακόλουθες μεθόδους: /** * Concat all the index map records */ @Override public String tostring() {} /** * Serialize the fields */ @Override public void write(dataoutput out) throws IOException {} /** * Deserialize the fields */ @Override public void readfields(datainput in) throws IOException {}