EPL451: Data Mining on the Web Lab 3

Σχετικά έγγραφα
EPL660: Information Retrieval and Search Engines Lab 5

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

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

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

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

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

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

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

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

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

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

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

EPL660: Information Retrieval and Search Engines Lab 5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Week 7: Java Collection Classes

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

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

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

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

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

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

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

MapReduce: Simplified Data Processing on Large Clusters

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

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

EPL451: Data Mining on the Web Lab 1

EPL 660: Lab 4 Introduction to Hadoop

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ Τμήμα Ηλεκτρονικών Μηχανικών & Μηχανικών Υπολογιστών

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

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

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

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

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

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

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

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

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

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

UNIVERSITY OF CALIFORNIA. EECS 150 Fall ) You are implementing an 4:1 Multiplexer that has the following specifications:

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

ΟΡΓΑΝΙΣΜΟΣ ΒΙΟΜΗΧΑΝΙΚΗΣ ΙΔΙΟΚΤΗΣΙΑΣ

Οπτικοποίηση με Prefuse. Δομή / Βασικά Χαρακτηριστικά / Παράδειγμα

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

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

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

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

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

Week. 6: Java Collections

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

Assalamu `alaikum wr. wb.

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

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

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

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ

14 Πρότυπα Σχεδίασης συνέχεια

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

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

Γλωσσική Τεχνολογία. Εισαγωγικό Φροντιστήριο

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

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

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

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


Big Data. CERN/LHC: 40TB/μέρα (15PB/έτος) Πολλά, πολλά ακόμα Web logs, αρχεία ομιλιών, ιατρικοί φάκελοι, κλπ. για όλους...

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

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

11α Κατασκευαστικά πρότυπα σχεδίασης

A ΜΕΡΟΣ. 1 program Puppy_Dog; 2 3 begin 4 end. 5 6 { Result of execution 7 8 (There is no output from this program ) 9 10 }

API: Applications Programming Interface

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

Posting File. D i. tf key1 [position1 position2 ] D j tf key2... D l.. tf keyl

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

department listing department name αχχουντσ ϕανε βαλικτ δδσϕηασδδη σδηφγ ασκϕηλκ τεχηνιχαλ αλαν ϕουν διξ τεχηνιχαλ ϕοην µαριανι

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ,

0 κ. Αντης Χατζηβασιλείου, Διευθυντής της Εταιρείας DATACOM παραδίδει στον κ. Σάββα Πετρίδη ένα Η.Υ. δώρο στην ΚΕΕΒ για τις μηχανογραφικές ανάγκες

Transcript:

EPL451: Data Mining on the Web Lab 3 Παύλος Αντωνίου Γραφείο: 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. Split files into chunks: 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. Divide chinks (splits) into records: 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

InputFormat responsibility InputSplit objects Data Split (chunk) #1 RecordReader objects Record1: { key, value } Record 2: { key, value } Record 3: { key, value } FILE Data Split (chunk) #2... Data Split (chunk) #N

InputFormat: Data splits 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.

InputFormat: Record reader RecordReader reads <k,v> pairs from InputSplit converts the byte-oriented view of the input, provided by the InputSplit, and presents a record-oriented view for the Mapper and Reducer tasks for processing <k,v> pair contents depend on InputFormat default InputFormat is TextInputFormat job.setinputformatclass(textinputformat.class);

InputFormat InputFormat Description Key Value TextInputFormat Default format; reads lines of text files. Splits 1 line as one split. No parsing of line. The byte offset of the line The line contents NLineInputFormat Reads lines of text files. Splits N lines as one split. No parsing of line(s). Default N = 1. The byte offset of the first line among N lines The N lines contents KeyValueInputFormat Parses lines into <key, val> pairs Everything up to the first tab character The remainder of the line SequenceFileInputFormat A Hadoop-specific highperformance binary format user-defined user-defined https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/inputformat.html

File splitting into map tasks

OutputFormat OutputFormat TextOutputFormat SequenceFileOutputFormat NullOutputFormat Description Default; writes lines in "key \t value" form Writes binary files suitable for reading into subsequent MapReduce jobs Consume all outputs and put them in /dev/null https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/outputformat.html

Διαδικασία Map Reduce word count HADOOP NODE Partitioning/ Shuffling/ Sorting Records Split 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, έχουμε ταξινομημένη λίστα <ενδ. κλειδί, (συλλογή ενδ. τιμών)> 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 (integer), 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 {}