SlideShare a Scribd company logo
Hadoop i okolice
...czyli Google w laptopie

        Marcin Cylke
   marcin.cylke@gmail.com


       22 lutego 2011
O czym dziś będzie?


   Co to jest Hadoop?

   Użytkowanie Hadoopa

   Hadoop i okolice

   Do czego się to nadaje

   Przykład

   Podsumowanie
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
Co to jest Hadoop?




     Google i GFS
     Nutch i Lucene
     własna chmura
     Map-Reduce
Map-Reduce


  definicja:
  map: (K1,V1) list(K2,V2)
  reduce: (K2,list(V2)) list(K3,V3)
Map-Reduce


  definicja:
  map: (K1,V1) list(K2,V2)
  reduce: (K2,list(V2)) list(K3,V3)
Map-Reduce - liczenie słów


                             (doc1,   ”Treść dokumentu 1...”)
                             (doc2,   ”Treść dokumentu 2...”)
                             (doc3,   ”Treść dokumentu 3...”)
                             (...)
                             (doc4,   ”Treść dokumentu 4...”)
Map-Reduce - liczenie słów


                             (doc1,   ”Treść dokumentu 1...”)
                             (doc2,   ”Treść dokumentu 2...”)
                             (doc3,   ”Treść dokumentu 3...”)
                             (...)
                             (doc4,   ”Treść dokumentu 4...”)
Map-Reduce - liczenie słów


                             (doc1,   ”Treść dokumentu 1...”)
                             (doc2,   ”Treść dokumentu 2...”)
                             (doc3,   ”Treść dokumentu 3...”)
                             (...)
                             (doc4,   ”Treść dokumentu 4...”)


                             (samochód, 5), (krowa, 3), (tak, 20)
                             (orka, 1), (krowa, 5), (teatr, 10)
                             (jemioła, 5), (orka, 4), (piernik, 3)
                             (...)
Map-Reduce - liczenie słów


                             (doc1,   ”Treść dokumentu 1...”)
                             (doc2,   ”Treść dokumentu 2...”)
                             (doc3,   ”Treść dokumentu 3...”)
                             (...)
                             (doc4,   ”Treść dokumentu 4...”)


                             (samochód, 5), (krowa, 3), (tak, 20)
                             (orka, 1), (krowa, 5), (teatr, 10)
                             (jemioła, 5), (orka, 4), (piernik, 3)
                             (...)


                             (krowa, 3) + (krowa, 5) → (krowa, 8)

                             (orka, 1) + (orka, 4) → (orka, 5)
Przykład
Architektura
Architektura
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 /
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   ....
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   ....
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   }
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 ’
Przyległości Hadoopa




 To głównie projekty poboczne.
 Dzięki nim Hadoop jest znacznie
 wygodniejszy w użyciu.
     Pig
     Hive
     Hbase
     Zookeeper, Mahout, ...
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)
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 ’ ;
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
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 ;
Czy ktoś tego używa?




   Pewnie!
       Twitter
       Facebook
       China Mobile
       inni... http://wiki.apache.org/hadoop/PoweredBy
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ń
...



      podsumowania - dzienne /tygodniowe agregacje kliknięć,
      analiza
      zaangażowania użytkowników
      data mining
      wykrywanie spamu
      optymalizacja reklam
      i pewnie tona innych
...



      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
Przykład
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
Zasoby




         http://hadoop.apache.org/
         http://www.umiacs.umd.edu/~jimmylin/
         MapReduce-book-final.pdf
         http://wiki.apache.org/pig/PigTutorial
         http://wiki.apache.org/hadoop/Hive/Tutorial
         http://mcl.jogger.pl
Dziękuję za uwagę.

More Related Content

Viewers also liked

Kampanie mobile display i Rich Media MT4M
Kampanie mobile display i Rich Media MT4MKampanie mobile display i Rich Media MT4M
Kampanie mobile display i Rich Media MT4M
Adrian Kielich
 
Design dla estetycznie ograniczonych
Design dla estetycznie ograniczonychDesign dla estetycznie ograniczonych
Design dla estetycznie ograniczonych
The Software House
 
TDD w iOS
TDD w iOS TDD w iOS
TDD w iOS
The Software House
 
Confd - Uszanowanko Programowanko
Confd - Uszanowanko ProgramowankoConfd - Uszanowanko Programowanko
Confd - Uszanowanko Programowanko
The Software House
 
Deploy appki na iOS, czyli magia publikacji
Deploy appki na iOS, czyli magia publikacjiDeploy appki na iOS, czyli magia publikacji
Deploy appki na iOS, czyli magia publikacji
The Software House
 
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
The Software House
 
Dependency Injection w Androidzie
Dependency Injection w AndroidzieDependency Injection w Androidzie
Dependency Injection w Androidzie
The Software House
 
Docker
DockerDocker
Gherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w ITGherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w IT
The Software House
 
e2e frameworks - czyli kij ma dwa końce
e2e frameworks - czyli kij ma dwa końcee2e frameworks - czyli kij ma dwa końce
e2e frameworks - czyli kij ma dwa końce
The Software House
 
How Big Data and Hadoop Integrated into BMC ControlM at CARFAX
How Big Data and Hadoop Integrated into BMC ControlM at CARFAXHow Big Data and Hadoop Integrated into BMC ControlM at CARFAX
How Big Data and Hadoop Integrated into BMC ControlM at CARFAX
BMC Software
 

Viewers also liked (11)

Kampanie mobile display i Rich Media MT4M
Kampanie mobile display i Rich Media MT4MKampanie mobile display i Rich Media MT4M
Kampanie mobile display i Rich Media MT4M
 
Design dla estetycznie ograniczonych
Design dla estetycznie ograniczonychDesign dla estetycznie ograniczonych
Design dla estetycznie ograniczonych
 
TDD w iOS
TDD w iOS TDD w iOS
TDD w iOS
 
Confd - Uszanowanko Programowanko
Confd - Uszanowanko ProgramowankoConfd - Uszanowanko Programowanko
Confd - Uszanowanko Programowanko
 
Deploy appki na iOS, czyli magia publikacji
Deploy appki na iOS, czyli magia publikacjiDeploy appki na iOS, czyli magia publikacji
Deploy appki na iOS, czyli magia publikacji
 
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
 
Dependency Injection w Androidzie
Dependency Injection w AndroidzieDependency Injection w Androidzie
Dependency Injection w Androidzie
 
Docker
DockerDocker
Docker
 
Gherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w ITGherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w IT
 
e2e frameworks - czyli kij ma dwa końce
e2e frameworks - czyli kij ma dwa końcee2e frameworks - czyli kij ma dwa końce
e2e frameworks - czyli kij ma dwa końce
 
How Big Data and Hadoop Integrated into BMC ControlM at CARFAX
How Big Data and Hadoop Integrated into BMC ControlM at CARFAXHow Big Data and Hadoop Integrated into BMC ControlM at CARFAX
How Big Data and Hadoop Integrated into BMC ControlM at CARFAX
 

Similar to Hadoop i okolice

Pakiet XML - Maciej Beręsewicz
Pakiet XML - Maciej BeręsewiczPakiet XML - Maciej Beręsewicz
Pakiet XML - Maciej BeręsewiczMaciej Beręsewicz
 
Programowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaProgramowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaMikołaj Olszewski
 
Programowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansProgramowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansMikołaj Olszewski
 
MapReduce w MongoDB
MapReduce w MongoDBMapReduce w MongoDB
MapReduce w MongoDB
Chris Parjaszewski
 
Pascal. Ćwiczenia praktyczne
Pascal. Ćwiczenia praktycznePascal. Ćwiczenia praktyczne
Pascal. Ćwiczenia praktyczne
Lucas Jarzembowski
 
Pascal. Ćwiczenia praktyczne
Pascal. Ćwiczenia praktycznePascal. Ćwiczenia praktyczne
Pascal. Ćwiczenia praktycznee-booksweb.pl
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
TomaszWoniakowski1
 
Pokaż kotku, co masz w środku profilowanie aplikacji z xhprof
Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprofPokaż kotku, co masz w środku   profilowanie aplikacji z xhprof
Pokaż kotku, co masz w środku profilowanie aplikacji z xhprof
Patryk Szlagowski
 
Tworzenie grafiki 3D w android
Tworzenie grafiki 3D w androidTworzenie grafiki 3D w android
Tworzenie grafiki 3D w android
Artem Shoobovych
 
System GRASS
System GRASSSystem GRASS
System GRASS
WGUG
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
Semihalf
 
Rozproszona analiza danych w Hadoop - wprowadzenie
Rozproszona analiza danych w Hadoop - wprowadzenieRozproszona analiza danych w Hadoop - wprowadzenie
Rozproszona analiza danych w Hadoop - wprowadzenie
Łukasz Król
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów Sparkowych
Marcin Jasiński
 
wprowadzenie do grass
wprowadzenie do grasswprowadzenie do grass
wprowadzenie do grass
WGUG
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
TomaszWoniakowski1
 
Programowanie Komponentowe: #D Model komponentowy OSGi
Programowanie Komponentowe: #D Model komponentowy OSGiProgramowanie Komponentowe: #D Model komponentowy OSGi
Programowanie Komponentowe: #D Model komponentowy OSGiMikołaj Olszewski
 

Similar to Hadoop i okolice (17)

Pakiet XML - Maciej Beręsewicz
Pakiet XML - Maciej BeręsewiczPakiet XML - Maciej Beręsewicz
Pakiet XML - Maciej Beręsewicz
 
Programowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaProgramowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do Springa
 
Programowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansProgramowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java Beans
 
MapReduce w MongoDB
MapReduce w MongoDBMapReduce w MongoDB
MapReduce w MongoDB
 
Pascal. Ćwiczenia praktyczne
Pascal. Ćwiczenia praktycznePascal. Ćwiczenia praktyczne
Pascal. Ćwiczenia praktyczne
 
Pascal. Ćwiczenia praktyczne
Pascal. Ćwiczenia praktycznePascal. Ćwiczenia praktyczne
Pascal. Ćwiczenia praktyczne
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
 
Pokaż kotku, co masz w środku profilowanie aplikacji z xhprof
Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprofPokaż kotku, co masz w środku   profilowanie aplikacji z xhprof
Pokaż kotku, co masz w środku profilowanie aplikacji z xhprof
 
Tworzenie grafiki 3D w android
Tworzenie grafiki 3D w androidTworzenie grafiki 3D w android
Tworzenie grafiki 3D w android
 
System GRASS
System GRASSSystem GRASS
System GRASS
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
Rozproszona analiza danych w Hadoop - wprowadzenie
Rozproszona analiza danych w Hadoop - wprowadzenieRozproszona analiza danych w Hadoop - wprowadzenie
Rozproszona analiza danych w Hadoop - wprowadzenie
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów Sparkowych
 
wprowadzenie do grass
wprowadzenie do grasswprowadzenie do grass
wprowadzenie do grass
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
 
Dok
DokDok
Dok
 
Programowanie Komponentowe: #D Model komponentowy OSGi
Programowanie Komponentowe: #D Model komponentowy OSGiProgramowanie Komponentowe: #D Model komponentowy OSGi
Programowanie Komponentowe: #D Model komponentowy OSGi
 

Hadoop i okolice

  • 1. Hadoop i okolice ...czyli Google w laptopie Marcin Cylke marcin.cylke@gmail.com 22 lutego 2011
  • 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
  • 5. Map-Reduce definicja: map: (K1,V1) list(K2,V2) reduce: (K2,list(V2)) list(K3,V3)
  • 6. Map-Reduce definicja: map: (K1,V1) list(K2,V2) reduce: (K2,list(V2)) list(K3,V3)
  • 7. Map-Reduce - liczenie słów (doc1, ”Treść dokumentu 1...”) (doc2, ”Treść dokumentu 2...”) (doc3, ”Treść dokumentu 3...”) (...) (doc4, ”Treść dokumentu 4...”)
  • 8. Map-Reduce - liczenie słów (doc1, ”Treść dokumentu 1...”) (doc2, ”Treść dokumentu 2...”) (doc3, ”Treść dokumentu 3...”) (...) (doc4, ”Treść dokumentu 4...”)
  • 9. Map-Reduce - liczenie słów (doc1, ”Treść dokumentu 1...”) (doc2, ”Treść dokumentu 2...”) (doc3, ”Treść dokumentu 3...”) (...) (doc4, ”Treść dokumentu 4...”) (samochód, 5), (krowa, 3), (tak, 20) (orka, 1), (krowa, 5), (teatr, 10) (jemioła, 5), (orka, 4), (piernik, 3) (...)
  • 10. Map-Reduce - liczenie słów (doc1, ”Treść dokumentu 1...”) (doc2, ”Treść dokumentu 2...”) (doc3, ”Treść dokumentu 3...”) (...) (doc4, ”Treść dokumentu 4...”) (samochód, 5), (krowa, 3), (tak, 20) (orka, 1), (krowa, 5), (teatr, 10) (jemioła, 5), (orka, 4), (piernik, 3) (...) (krowa, 3) + (krowa, 5) → (krowa, 8) (orka, 1) + (orka, 4) → (orka, 5)
  • 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
  • 30. Zasoby http://hadoop.apache.org/ http://www.umiacs.umd.edu/~jimmylin/ MapReduce-book-final.pdf http://wiki.apache.org/pig/PigTutorial http://wiki.apache.org/hadoop/Hive/Tutorial http://mcl.jogger.pl