2. O czym dziś będzie?
Co to jest Hadoop?
Użytkowanie Hadoopa
Hadoop i okolice
Do czego się to nadaje
Przykład
Podsumowanie
3. Zbyt dużo danych
Facebook 2TB/dzień
CERN: 40TB/dzień
(15PB/rok)
gdzie to składować?
brakuje miejsca
brakuje sprzętu na takie
ilości danych
skalowania wszerz
4. Co to jest Hadoop?
Google i GFS
Nutch i Lucene
własna chmura
Map-Reduce
14. HDFS
rozproszony system plików
replikacja fragmentów (konfigurowalna)
funkcjonalność kosza
pozwala na usuwanie węzłów w trakcie działania
brak zabezpieczeń - jedynie system uprawnień POSIX
1 $ hadoop fs −l s /
2 $ hadoop f s −c a t / o u t p u t . f i l e . 1
3 $ hadoop f s −m k d i r / o u t p u t . d i r
4 $ hadoop f s −c o p y F r o m L o c a l ˜ mcl / h a d o o p i n p u t d a t a
5 / output . d i r /
15. Java API
1 p u b l i c c l a s s WordcountJob e x t e n d s C o n f i g u r e d i m p l e m e n t s T o o l {
2 p r i v a t e f i n a l s t a t i c I n t W r i t a b l e one = new I n t W r i t a b l e ( 1 ) ;
3
4 p u b l i c v o i d map ( L o n g W r i t a b l e key , Text v a l u e ,
5 O u t p u t C o l l e c t o r <Text , I n t W r i t a b l e > o u t p u t ,
6 Repor ter r e p o r t e r ) throws IOException {
7 String l i n e = value . toString () ;
8 S t r i n g T o k e n i z e r t o k e n i z e r = new S t r i n g T o k e n i z e r ( l i n e ) ;
9
10 w h i l e ( t o k e n i z e r . hasMoreTokens ( ) ) {
11 Text word = new Text ( t o k e n i z e r . n e x t T o k e n ( ) . t o L o w e r C a s e ( ) ;
12 o u t p u t . c o l l e c t ( word , one ) ;
13 }
14
15 }
16 ....
16. Java API cd
1 p u b l i c s t a t i c c l a s s Reduce e x t e n d s MapReduceBase
2 i m p l e m e n t s Red ucer<Text , I n t W r i t a b l e , Text , I n t W r i t a b l e > {
3 p u b l i c v o i d r e d u c e ( Text key , I t e r a t o r <I n t W r i t a b l e > v a l u e s ,
4 O u t p u t C o l l e c t o r <Text , I n t W r i t a b l e > o u t p u t ,
5 Reporter r e p o r t e r ) throws IOException {
6 i n t accumulator = 0;
7 while ( v a l u e s . hasNext ( ) )
8 a c c u m u l a t o r += v a l u e s . n e x t ( ) . g e t ( ) ;
9 o u t p u t . c o l l e c t ( key , new I n t W r i t a b l e ( a c c u m u l a t o r ) ) ;
10 }
11 }
12 ....
17. Java API cd
1 p u b l i c i n t run ( S t r i n g [ ] a r g s ) throws Exception {
2 C o n f i g u r a t i o n conf = getConf ( ) ;
3 J obConf j o b = new JobConf ( c o n f , MapJob . c l a s s ) ;
4 Path i n = new Path ( a r g s [ 0 ] ) ;
5 Path o u t = new Path ( a r g s [ 1 ] ) ;
6 F i l e I n p u t F o r m a t . s e t I n p u t P a t h s ( job , i n ) ;
7 FileOutputFormat . setOutputPath ( job , out ) ;
8 j o b . setJobName ( ”MyJob” ) ;
9 j o b . s e t M a p p e r C l a s s ( MapClass . c l a s s ) ;
10 j o b . s e t R e d u c e r C l a s s ( Reduce . c l a s s ) ;
11 job . setInputFormat ( TextInputFormat . c l a s s ) ;
12
13 j o b . s e t O u t p u t F o r m a t ( TextOutputFormat . c l a s s ) ;
14 j o b . s e t O u t p u t K e y C l a s s ( Text . c l a s s ) ;
15 job . setOutputValueClass ( IntWritable . c l a s s ) ;
16 J o b C l i e n t . runJob ( job ) ;
17 return 0;
18 }
19
20 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) t h r o w s E x c e p t i o n {
21 i n t r e s = T o o l R u n n e r . r u n ( new C o n f i g u r a t i o n ( ) , new MapJob ( ) , a r g s ) ;
22 System . e x i t ( r e s ) ;
23 }
24 }
18. Integracja innych języków
nie tylko Java
Hadoop streaming
1 $ hadoop j a r
2 mapred / c o n t r i b / s t r e a m i n g / hadoop −0.21.0 − s t r e a m i n g . j a r
3 −i n p u t i n p u t / c i t e 7 5 9 9 . t x t −o u t p u t o u t p u t −s t r e a m i n g
4 −mapper ’ c u t −f 2 −d , ’ −r e d u c e r ’ u n i q ’
5
6 $ hadoop j a r
7 mapred / c o n t r i b / s t r e a m i n g / hadoop −0.21.0 − s t r e a m i n g . j a r
8 − f i l e s AvgByAttrMapper . py , A v g B y A t t r R e d u c e r . py
9 −i n p u t i n p u t / a p a t 6 3 9 9 . t x t −o u t p u t o u t p u t −python−avg
10 −mapper ’ AvgByAttrMapper . py ’
11 −r e d u c e r ’ A v g B y A t t r R e d u c e r . py ’
19. Przyległości Hadoopa
To głównie projekty poboczne.
Dzięki nim Hadoop jest znacznie
wygodniejszy w użyciu.
Pig
Hive
Hbase
Zookeeper, Mahout, ...
20. Pig
język wyższego poziomu do opisu jobów MapReduce data flow
programming
oferuje użytkownikowi zdefiniowane funkcje (count, sum), ale
pozwala na własne rozszerzenia
dane wejściowe mogą pochodzić skąd się chce - można
napisać odpowiednie funkcje ładujące
trochę podobny do SQLa (Pig Latin)
21. 1 l o g = LOAD ’ h d f s : / / l o c a l h o s t : 9 0 0 0 / i n p u t / ex−s m a l l . l o g ’
2 AS ( u s e r , time , q u e r y ) ;
3 g r p d = group l o g by u s e r ;
4 c n t d = f o r e a c h g r p d GENERATE group , COUNT( l o g ) ;
5 STORE c n t d INTO ’ h d f s : / / l o c a l h o s t : 9 0 0 0 / i n p u t / o u t p u t ’ ;
22. Hive
pakiet data warehousing nadbudowany na Hadoop
zaimplementowane przez ludzi z Facebook’a
HiveQL pozwala swobodniej operować danymi
Ułatwia łączenie danych (outer i inner joiny)
od 2009 roku 29% pracowników FB używa Hive, tylko połowa
z nich to inżynierowie
23. 1 h i v e > CREATE TABLE c i t e ( c i t i n g INT , c i t e d INT ) ROW
2 FORMAT DELIMITED FIELDS TERMINATED BY ’ , ’ STORED
3 AS TEXTFILE ;
4 h i v e > LOAD DATA LOCAL INPATH ’ c i t e 7 5 9 9 . t x t ’ OVERWRITE
5 INTO TABLE c i t e ;
6 h i v e > SELECT COUNT( 1 ) FROM c i t e ;
24. Czy ktoś tego używa?
Pewnie!
Twitter
Facebook
China Mobile
inni... http://wiki.apache.org/hadoop/PoweredBy
25. Używa tego
Zliczanie:
ile tweetów, ile requestów, jak dużo logowań, częstotliwość
wysyłki SMSów, itp
Powiązania:
specyfika użytkowników mobilnych, grafy połączeń
użytkowników, zmiany ilości tweetów w czasie, co robią
popularni użytkownicy
Eksperymenty:
co mówią tweety użytkowników, i ich przyjaciół, analiza grafów
połączeń
26. ...
podsumowania - dzienne /tygodniowe agregacje kliknięć,
analiza
zaangażowania użytkowników
data mining
wykrywanie spamu
optymalizacja reklam
i pewnie tona innych
27. ...
500m użytkowników w Chinach
zbieranie danych Call Data Record (5TB/dzień)
analiza rekordów, billing
tunning sieci
marketing
działają na 256 węzłowym klastrze Hadoopa
zaobserwowali wzrost wydajności rzędu 12-16 razy - w
porównaniu do komercyjnych narzędzi ETL
29. Podsumowanie
łatwo zbuduj własny klaster obliczeniowy
dodatkowe języki ułatwiają programowanie
poważni użytkownicy - więc i poważne wsparcie
MapReduce nie jest łatwe
nie zawsze jest sens go używać
potrzebna masa krytyczna, żeby znaleźć dla niego
zastosowanie