280 likes | 363 Views
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: http://eszakigrid109.inf.elte.hu:50030 http://eszakigrid109.inf.elte.hu:50070. Emlékeztető.
E N D
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: • http://eszakigrid109.inf.elte.hu:50030 • http://eszakigrid109.inf.elte.hu:50070
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
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-1.0.4.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<LongWritable, Text, Text, IntWritable> { 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<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> 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’, ‘(283300321072140290,15)’) • Reduce • összegzi a szavakhoz tartozó információkat • pl: (‘hello’, ‘(283300321072140290,15), (2833003210721404568,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 1..10 000 000 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/2012 00:09:00")) dateStr.before(formatter.parse("12/24/2012 00: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)
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) I.
Feladat7 (Csoportosítás) II. • Map(kulcs, érték): • (user, szó) • Reducer: • Init • H = HashMap<String, Integer> • 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)