HADOOP Korszerű Adatbázisok 2013
Elérés, Belépés Elérés: eszakigrid109.inf.elte.hu Belépés: felhasználó/jelszó: neptun-kód Manager oldalak:
Emlékeztető Map: Alakítsuk a bementi adatokat (kulcs, érték) párokra Reduce: Alakítsuk az adott kulcshoz tartozó adatokat a kimeneti formára
HADOOP folyamat
HDFS parancsok Listázás hadoop fs –ls Kiírja egy fájl tartalmát hadoop fs –cat Betöltés hadoop fs –put Könyvtár létrehozás hadoop fs –mkdir Könyvtár törlése rekurzívan hadoop fs -rmr
Adathalmaz tweet_dec24 December 24-i tweetek tweet_id, user_id, lat, lon, lang, created_at, text mentioned user_id, mentioned_user_id interval from, to
Fordítás, futtatás, eredmény Fordítás forditas.sh javac -classpath /home/hadoop/hadoop-1.0.4/hadoop-core jar -d classes/ *.java jar -cvf hadoopRun.jar -C classes/. Futtatás run.sh hadoop jar hadoopRun.jar korszeru.empty_mapred /user/hadoop/korszeru/input/dec24_tweet.txt feladatOUT1 Eredmény hadoop fs –cat feladatOUTX/* (X=1..10)
WordCount példa Map public static class Map extends Mapper { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); }
WordCount példa Reduce public static class Reduce extends Reducer { public void reduce(Text key, Iterable values, Context cont) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); }
WordCount példa Main public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = new Job(conf, "ggombos_wordcount"); job.setJarByClass(WordCount.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); //job.setMapOutputKeyClass(Text.class); //job.setMapOutputValueClass(Text.class); job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.waitForCompletion(true); }
Feladat1 (Számolás) Hány tweet volt az egyes nyelveken?
Feladat1 (Számolás) Map (kulcs, érték): (nyelv, 1)//pl: (‘en’,1) Reducer összeadja az értékeket (nyelv, szum)//pl: (‘en’, 5)
Feladat2 (Legyűjtés) Full inverted index (a szó melyik tweetben, hányadik helyen található)
Feladat2 (Legyűjtés) Map (kulcs, érték): (szó, ‘(tweet_id, sorszam)’) pl: (‘hello’, ‘( ,15)’) Reduce összegzi a szavakhoz tartozó információkat pl: (‘hello’, ‘( ,15), ( ,11) ’)
Feladat3 (Szűrés) Keressük meg a XMAS szót tartalmazó tweeteket
Feladat3 (Szűrés) Map (kulcs,érték): (‘XMAS’, tweet_szoveg) Reducer sorszámozva kiírja a szovegeket (sorszám, tweet_szoveg)
Feladat4 (Elosztott számolás) Számoljuk meg a négyzetszámokat között
Feladat4 (Elosztott számolás) Map (kulcs, érték): Összegzi a négyzetszámokat az adott intervallumba (‘szum’, db) //Math.sqrt(i) % 1.0 == 0.0 Reducer: Összegzi a részsorozatok (‘szum’, db)
Feladat5 (Rendezés) Rendezzük a 9-10 óra közötti tweeteket időrendbe
Feladat5 (Rendezés) Map (kulcs, érték): (idő, szöveg) adott intervallumon belül SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); dateStr = formatter.parse(date); dateStr.after(formatter.parse("12/24/ :09:00")) dateStr.before(formatter.parse("12/24/ :10:00")) Reducer: Összegzi az egyes tweeteket, ami ugyanabba az időpontban vannak (idő, tweetek valamivel elválasztva)
Feladat6 (Gráf feldolgozás) Ki-kit említett? Kimenő, bemenő élek egy adott user-re
Feladat6 (Gráf feldolgozás) Map(kulcs, érték): (user,”>,”+mentioned) (mentioned,”<,”+user) Reducer: Összegyűjti a bejövő/kimenő éleket (id, bejövő idk „|” kimenő idk)
Feladat7 (Csoportosítás) User-ek mely szavakat használják leggyakrabban (ditinctelve a user szavai)
Feladat7 (Csoportosítás) I. Job1 Map(kulcs, érték): („szó,user”,1) Reducer: összegezzük, max szavat kiírjuk minden user-ra (szó, user) Job2 Map(kulcs, érték): (szó, 1) Reducer: (szó, sum)
Feladat7 (Csoportosítás) II. Map(kulcs, érték): (user, szó) Reducer: Init H = HashMap Reduce H2-ba gyűjtjük a szavakat Összeszámoljuk H-ba belerakjuk, az egyes szavakhoz a sum értéket. CleanUp foreach (H.key, H.value)
Feladat8 (Korreláció keresés) Melyik szó melyik szóval áll gyakran együtt
Feladat9 (MaxKer) Keressük meg a legtöbbet tweetelt személyt (2job)
Feladat10 (lánc keresés) Említési lánc (mentioned)