SlideShare a Scribd company logo
Paweł Kucharski
Oswajamy Słonia
czyli
po co nam Hadoop
• Sotrender
• Hadoop
• Czym jest Hadoop?
• Podstawowe elementy
• Ekosystem Hadoop
• Hive, Pig
• Spark
• HBase
• Nasze doświaczenia
• MySQL vs Hadoop
• R
CO ROBIMY?
Sotrender
SOTRENDER
SOTRENDER
• Sotrender: narzędzie do analiz social media
• Badania i raporty na życzenie
Więcej: 2015.sotrender.pl
SOTRENDER
SOTRENDER
SOTRENDER
Zbieramy dane:
• Facebook, Twitter, YouTube, Instagram
• 30k profili
• 250k API calls na godzinę
SOTRENDER
Facebook API
Twitter API
Google API
Storage
Web
R
OSWAJAMY SŁONIA
Hadoop
CZYM JEST HADOOP
• Święty gral Big Data
• Rozproszony system przechowywania
przetwarzania danych
CZYM JEST HADOOP
CZYM JEST HADOOP
Otwarta implementacja paradygmatów
Google: GoogleFileSystem i MapReduce
Hadoop umożliwia:
• przetwarzanie dużych ilościach danych
• równolegle
• niezawodnie
• skalowalnie
• zbudowanych z tanich komponentów
CZYM JEST HADOOP
Zalety
• Elastyczny format danych
• Nie wymaga agregacji (surowe dane)
• Nie wymaga próbkowania (wszystkie dane)
• Nie ma potrzeby usuwania danych
• Skalowalny (od kilku do tysięcy węzłów)
CZYM JEST HADOOP
Zamiast przesyłać dane do programu,
przesyłamy program do danych
Data Data Data DataData Data
Map Map Map Map Map Map
reducer
CZYM JEST HADOOP
CZYM JEST HADOOP
HISTORIA HADOOP
• Stworzony w 2005 w Yahoo przez Doug
Cutting
• Wersja 0.14.1 w 2007
• Wersja 1.0 – grudzień 2011
• Wersja 2.2 - październik 2013
HADOOP
Główne dystrybucje
• Hortonworks
• HDP
• Cloudera
• CDH
• MapR
• M3
HISTORIA HADOOP
https://wiki.apache.org/hadoop/PoweredBy
HISTORIA HADOOP
Yahoo
• 600PB, 43k nodes
Twitter:
• 300PB 1000
nodes
Facebook
• 300PB, 600TB
dziennie
Google (maj 2014)
• 2 EB, 600M QPS
HADOOP
26% dużych firm używa Hadoopa, kolejne
18% zamierza to zrobić w ciągu dwóch lat.
HADOOP
HADOOP
Dwa główne komponenty
HDFS i MapReduce
HADOOP DISTRIBUTED FILE SYSTEM
HDFS
HDFS
Rozproszony system plików
• Skalowalny
• Odporny na awarię
• Tani sprzęt
• Duże ilości danych
• Dla dużych klastrów
HDFS
Dwa podstawowe elementy:
• Namenode
• Datanode
Dodatkowo:
• JournalNode
• Zookeeper
HDFS
• Block replication
• Rack awareness
• Self healing
HDFS
www.ibm.com
Konfiguracja węzłów:
- niskiej/średniej klasy sprzęt
- trochę RAMu
- dużo dysków
- szybkie karty sieciowe
MapReduce
MAPREDUCE
Pochodzenie: MPI, Google
Składa się z trzech kroków
• „Map” – operacje lokalne
• „Shuffle” – redystrybucji wyników
• „Reduce” – grupowanie wyników
MapReduce nie ma być szybki, ale
umożliwiać zrównoleglenie obliczeń na dużą
skalę.
MAPREDUCE
http://www.r-bloggers.com/an-example-of-mapreduce-with-rmr2/
Komisja
wyborcza #1
MAPREDUCE PRZYKŁAD
Komisja
wyborcza #N
Okręgowa komisja
wyborcza
Komisja
wyborcza #M
Komisja
wyborcza #S
Okręgowa komisja
wyborcza
Państwowa Komisja
Wyborcza
MAPREDUCE KIEDYŚ
ibm.com
MAPREDUCE ON YARN
YARN
• Otwarty
• Skalowalny
• Zarządza tylko zasobami
• Logika przenisiona do App Mstr
http://hortonworks.com/blog/apache-hadoop-yarn-concepts-and-applications/
PRZYKŁAD - WORDCOUNT
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context ) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException,
InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
PRZYKŁAD - WORDCOUNT
import sys
for line in sys.stdin:
line = line.strip()
words = line.split()
for word in words:
print '%st%s' % (word, 1)
from operator import itemgetter
import sys
current_word = None
current_count = 0
word = None
for line in sys.stdin:
line = line.strip()
word, count = line.split('t', 1)
try:
count = int(count)
except ValueError:
continue
# this IF-switch only works because Hadoop sorts map output
if current_word == word:
current_count += count
else:
if current_word:
print '%st%s' % (current_word, current_count)
current_count = count
current_word = word
if current_word == word:
print '%st%s' % (current_word, current_count)
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
PRZYKŁAD - WORDCOUNT
test@debian:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar 
-file /home/test/mapper.py -mapper /home/test/mapper.py 
-file /home/test/reducer.py -reducer /home/test/reducer.py 
-input /user/test/gutenberg/* -output /user/test/gutenberg-output
Ekosystem Hadoop
EKOSYSTEM HADOOP
Na tych dwóch głównych elementach
zbudowano wiele gotowych rozwiązań
https://hadoopecosystemtable.github.io/
134 różne projekty
Hive
HIVE
• Prosty interfejs do przetwarzania danych w
Hadoopie, wygodniejszy niż pisanie
własnych funkcji
• Wykorzystuje język HiveQL, podobny do
SQL
HIVE
SQL -> MapReduce
SELECT COUNT(*) FROM test_table
WHERE id IN( SELECT id FROM
test_table2) GROUP BY grp_id
zostaje przeszktałocne w serię zadań
MapReduce
HIVE
• Możliwość czytania z wielu źródeł
• External Tables
• Pliki, Hbase, Hypertable, Cassandra, JDBC
• Indeksy
• Własne UDF i funkcje Map/Reduce
HIVE
CREATE TABLE input (line STRING);
LOAD DATA LOCAL INPATH 'input.tsv'
OVERWRITE INTO TABLE input;
SELECT word, COUNT(*) FROM input
LATERAL VIEW explode(split(text, ' '))
ITable as word GROUP BY word;
Przykład: word count
HIVE
Dostęp
• CLI
• JDBC, ODBC
• Thrift
• Zapytania ad-hoc
• Nie wymaga programowania
• Zna informacje o strukturze danych
Pig
PIG
Ten sam cel co HIVE inna droga
Pig Latin
Język skryptowy kompilowanych do zadań
MapReduce
PIG
a = load '/user/test/word_count_text.txt';
b = foreach a generate flatten(TOKENIZE((chararray)$0)) as word;
c = group b by word;
d = foreach c generate COUNT(b), group;
store d into '/user/test/pig_wordcount';
Wordcount example
Spark
SPARK
Apache Spark™ is a fast and general
engine for large-scale data processing.
• Łatwy w użyciu
• Możliwość pisania w:
• Java, Scala, Python, R
• Ponad 80 operacji wysokiego poziomu
SPARK
Transformation Meaning
map(func)
Return a new distributed dataset formed by passing
each element of the source through a function func.
filter(func)
Return a new dataset formed by selecting those
elements of the source on which func returns true.
flatMap(func)
Similar to map, but each input item can be mapped to
0 or more output items (so func should return a Seq
rather than a single item).
mapPartitions(func)
Similar to map, but runs separately on each partition
(block) of the RDD, so func must be of type Iterator<T>
=> Iterator<U> when running on an RDD of type T.
mapPartitionsWithIndex(func)
Similar to mapPartitions, but also provides func with an
integer value representing the index of the partition, so
func must be of type (Int, Iterator<T>) => Iterator<U>
when running on an RDD of type T.
sample(withReplacement, fraction, seed)
Sample a fraction fraction of the data, with or without
replacement, using a given random number generator
seed.
union(otherDataset)
Return a new dataset that contains the union of the
elements in the source dataset and the argument.
intersection(otherDataset)
Return a new RDD that contains the intersection of
elements in the source dataset and the argument.
distinct([numTasks]))
Return a new dataset that contains the distinct
elements of the source dataset.
SPARK
Action Meaning
reduce(func)
Aggregate the elements of the dataset using a
function func (which takes two arguments and returns
one). The function should be commutative and
associative so that it can be computed correctly in
parallel.
collect()
Return all the elements of the dataset as an array at
the driver program. This is usually useful after a filter
or other operation that returns a sufficiently small
subset of the data.
count() Return the number of elements in the dataset.
first()
Return the first element of the dataset (similar to
take(1)).
take(n)
Return an array with the first n elements of the
dataset.
takeSample(withReplacement, num, [seed])
Return an array with a random sample of num
elements of the dataset, with or without replacement,
optionally pre-specifying a random number generator
seed.
saveAsTextFile(path)
Write the elements of the dataset as a text file (or set
of text files) in a given directory in the local filesystem,
HDFS or any other Hadoop-supported file system.
Spark will call toString on each element to convert it
to a line of text in the file.
SPARK
text_file = spark.textFile("hdfs://...")
counts = text_file.flatMap(lambda line:
line.split(" ")) 
.map(lambda word: (word, 1)) 
.reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("hdfs://...")
Przykład: word count
SPARK
Spark sorts 100 TB in 23 minutes on 206
machines (6592 virtual cores), which
translates into 4.27 TB/min or 20.7
GB/min/node.
HBase
HBASE
Hbase
• Opraty na Google BigTable
• Baza danych
• Obsługuje szybkie (w czasie rzeczywistym)
operacje CRUD
• Zapewnia spójność oczytu i zapisu
• NoSQL – klucz-wartość
• Jedynie proste operacje
• Zbudowany na bazie HDFS
HBASE
• Rozproszona
• Działa na wielu maszynach
• Skalowalna
• Automatyczny sharding
• Dla dużych danych
• Miliardy wierszy
• Współpracuje z innymi elementami
Hadoop
HBASE
Wady:
• Tylko podstawowy zestaw operacji
• Brak transakcji
• Brak operacji na wielu tabelach
• Wymaga dużych ilości danych
• Inaczej nie ma sensu
• Wymaga dużo IO, CPU i RAM
HBASE
• Dane są zapisywane w tabeli
• Tabela składa się z wierszy
• Każdy wiersz ma przypisany klucz
• Tabela może mieć wiele rodzin kolumn
• W każdej rodzinie kolumn może być wiele
kolumn
Row Stats Text
20151111 Total = 1 Count = 10 Msg = blabla
20151112 Total = 2 Posts = 10 Msg = hehe Tags = funny
HBASE
• Tabele dzielone są na regiony – zakresy
kluczy
• Regiony z jednej tabeli mogą być
obsługiwane przez różne węzły
(RegionServer)
Dostęp:
• Natywne API (Java)
• REST
• Thrift
• Binarny protokół
• Szybki
• Obsługuje wiele języków
Hadoop w Sotrender
POCZĄTKI
MySQL
• Zaczynaliśmy od 1 serwera
• Dodawaliśmy kolejne serwery co kilka
miesięcy
• Zmienialiśmy serwery na co raz
mocniejsze
• Doszliśmy do 6 maszyn
MySQL
• Problem z migracją danych między
serwerami
• Brak skalowalności
• Problem z modyfikacją struktury
• Długi czas odzyskiwania po awarii
• Trudna konfiguracja
MYSQL
TokuDB
• Drzewa fraktalne
• Kompresja (do 25x)
• Tworzenie indeksów bez blokowania
• Modyfikacja struktury bez blokowania
• Działa efektywnie „out of box”
• Replikacja „read free”
HADOOP SOTRENDER
Hadoop
• Hbase
• Zbieranie danych
• Serwowanie danych w narzędziu
• Hive
• Niestandardowe analizy
• Pig
• Wyznaczanie trendów, dzienne obliczenia
HADOOP SOTRENDER
MySQL
• 3 TB danych (skompresowanych)
• 56 mld wierszy
Hadoop:
• 6 wezłów
• 28 TB danych
• HBase, Hive, Spark
HADOOP SOTRENDER
Testujemy:
• Spark
• Solr
HADOOP SOTRENDER
Plusy
• Skalowalność
• Faktycznie działa
• Wydajność
• Jednolity interfejs dostępu do danych
• Integracja z R
• Szybki rozwój
HADOOP SOTRENDER
Minusy
• Braki w dokumentacji
• Problemy ze stabilnością
• Java
• Błędy
• Konfiguracja
• Braki w kontroli dostępu
• Szybki rozwój
pawel@sotrender.com
Pytania?
pawel@sotrender.com
Dziękuję bardzo
Hadoop w R
R I HADOOP
• Do czego wykorzystujemy?
• Delegowanie szczególnie „kosztownych”
operacji na danych (np. tabele frekwencyjne,
agregowanie rekordów
dziennych/godzinnych),
• Łatwy i relatywnie szybki dostęp do
ogromnych tabel,
R I HADOOP - DOSTĘP
• Szereg pakietów w R do operacji na
klastrze hadoopowym:
• rmr – umożliwiający pisanie programów
MapReduce w R,
• rhdfs – dostęp do plików w HDFS,
• rhbase – funkcje umożliwiające dostęp do
tabel w Hbase
• Możliwość nawiązania połączenia z Hive
przez JDBC (pakiet RJDBC w R)
R I HADOOP – DOSTĘP DO HIVE
R I HADOOP - PRZYKŁAD
R
Operacje na już zagregowanych danych
Tworzenie końcowego produktu (wykresy,
raporty)
Hive
Agregowanie danych (np. podsumowanie
aktywności pod tweetami)
Bezpośrednie zapytania
HBase
Mapowanie tabel z Hbase do Hive
R I HADOOP - PRODUKT
http://www.sotrender.pl/trends/twitt
er/reports/201510

More Related Content

What's hot

Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
Sages
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
Sages
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
Redge Technologies
 
100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. 100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego.
Redge Technologies
 
[#2] architektura - IBM Integrated Analytics System
[#2] architektura - IBM Integrated Analytics System[#2] architektura - IBM Integrated Analytics System
[#2] architektura - IBM Integrated Analytics System
Artur Wronski
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?
Bartosz Ratajczyk
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
The Software House
 

What's hot (7)

Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
 
100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. 100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego.
 
[#2] architektura - IBM Integrated Analytics System
[#2] architektura - IBM Integrated Analytics System[#2] architektura - IBM Integrated Analytics System
[#2] architektura - IBM Integrated Analytics System
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 

Similar to Paweł Kucharski: Oswajamy Słonia czyli po co nam Hadoop

Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
Sebastian Nowak
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
Marcin Kurzyna
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
kraqa
 
[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System
Artur Wronski
 
infraxstructure: Robert Mroczkowski "Maszyny się uczą - admińskie rozmówki p...
infraxstructure: Robert Mroczkowski  "Maszyny się uczą - admińskie rozmówki p...infraxstructure: Robert Mroczkowski  "Maszyny się uczą - admińskie rozmówki p...
infraxstructure: Robert Mroczkowski "Maszyny się uczą - admińskie rozmówki p...
PROIDEA
 
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł StefańskiPLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PROIDEA
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
Droptica
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010
Natalia Stanko
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
The Software House
 
Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014
Filip Rembialkowski
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
Laravel Poland MeetUp
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
allegro.tech
 
Michał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychMichał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonych
AnalyticsConf
 
Praktyczne użycie Repository Pattern w Laravel cz. I
Praktyczne użycie Repository Pattern w Laravel cz. IPraktyczne użycie Repository Pattern w Laravel cz. I
Praktyczne użycie Repository Pattern w Laravel cz. I
Laravel Poland MeetUp
 
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
HighSolutions Sp. z o.o.
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Divante
 
Agregacja i analiza logów
Agregacja i analiza logówAgregacja i analiza logów
Agregacja i analiza logów
Divante
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
SKN Shader
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz
 

Similar to Paweł Kucharski: Oswajamy Słonia czyli po co nam Hadoop (20)

Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Hadoop w NK.pl
Hadoop w NK.plHadoop w NK.pl
Hadoop w NK.pl
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System
 
infraxstructure: Robert Mroczkowski "Maszyny się uczą - admińskie rozmówki p...
infraxstructure: Robert Mroczkowski  "Maszyny się uczą - admińskie rozmówki p...infraxstructure: Robert Mroczkowski  "Maszyny się uczą - admińskie rozmówki p...
infraxstructure: Robert Mroczkowski "Maszyny się uczą - admińskie rozmówki p...
 
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł StefańskiPLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Michał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychMichał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonych
 
Praktyczne użycie Repository Pattern w Laravel cz. I
Praktyczne użycie Repository Pattern w Laravel cz. IPraktyczne użycie Repository Pattern w Laravel cz. I
Praktyczne użycie Repository Pattern w Laravel cz. I
 
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13
 
Agregacja i analiza logów
Agregacja i analiza logówAgregacja i analiza logów
Agregacja i analiza logów
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
 

More from AnalyticsConf

Dawid Gonzo Kałędowski: R jako osobisty GPS
Dawid Gonzo Kałędowski: R jako osobisty GPSDawid Gonzo Kałędowski: R jako osobisty GPS
Dawid Gonzo Kałędowski: R jako osobisty GPS
AnalyticsConf
 
Tor Hovland: Taking a swim in the big data lake
Tor Hovland: Taking a swim in the big data lakeTor Hovland: Taking a swim in the big data lake
Tor Hovland: Taking a swim in the big data lake
AnalyticsConf
 
Rafał Korszuń: Security in Design of Cloud Applications
Rafał Korszuń: Security in Design of Cloud ApplicationsRafał Korszuń: Security in Design of Cloud Applications
Rafał Korszuń: Security in Design of Cloud Applications
AnalyticsConf
 
Tomasz Kopacz: Architektura i service fabric - jak budować aplikacje w paas v2
Tomasz Kopacz: Architektura i service fabric - jak budować aplikacje w paas v2Tomasz Kopacz: Architektura i service fabric - jak budować aplikacje w paas v2
Tomasz Kopacz: Architektura i service fabric - jak budować aplikacje w paas v2
AnalyticsConf
 
Wiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programmingWiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programming
AnalyticsConf
 
Grzegorz Rycaj: Zdebuguj swoja prezentacje
Grzegorz Rycaj: Zdebuguj swoja prezentacjeGrzegorz Rycaj: Zdebuguj swoja prezentacje
Grzegorz Rycaj: Zdebuguj swoja prezentacje
AnalyticsConf
 
Przemysław Dzierżak: Hurtownie dla DBA
Przemysław Dzierżak: Hurtownie dla DBAPrzemysław Dzierżak: Hurtownie dla DBA
Przemysław Dzierżak: Hurtownie dla DBA
AnalyticsConf
 
Paweł Ciepły: PowerBI part1
Paweł Ciepły: PowerBI part1Paweł Ciepły: PowerBI part1
Paweł Ciepły: PowerBI part1
AnalyticsConf
 
Shannon Holgate: Bending non-splittable data to harness distributed performance
Shannon Holgate: Bending non-splittable data to harness distributed performanceShannon Holgate: Bending non-splittable data to harness distributed performance
Shannon Holgate: Bending non-splittable data to harness distributed performance
AnalyticsConf
 
Tomasz Nadolny: Open Data in Gdańsk
Tomasz Nadolny: Open Data in GdańskTomasz Nadolny: Open Data in Gdańsk
Tomasz Nadolny: Open Data in Gdańsk
AnalyticsConf
 
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktykaWłodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
AnalyticsConf
 
Piotr Janczyk: Modele zachowań klientów
Piotr Janczyk: Modele zachowań klientówPiotr Janczyk: Modele zachowań klientów
Piotr Janczyk: Modele zachowań klientów
AnalyticsConf
 
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
AnalyticsConf
 

More from AnalyticsConf (13)

Dawid Gonzo Kałędowski: R jako osobisty GPS
Dawid Gonzo Kałędowski: R jako osobisty GPSDawid Gonzo Kałędowski: R jako osobisty GPS
Dawid Gonzo Kałędowski: R jako osobisty GPS
 
Tor Hovland: Taking a swim in the big data lake
Tor Hovland: Taking a swim in the big data lakeTor Hovland: Taking a swim in the big data lake
Tor Hovland: Taking a swim in the big data lake
 
Rafał Korszuń: Security in Design of Cloud Applications
Rafał Korszuń: Security in Design of Cloud ApplicationsRafał Korszuń: Security in Design of Cloud Applications
Rafał Korszuń: Security in Design of Cloud Applications
 
Tomasz Kopacz: Architektura i service fabric - jak budować aplikacje w paas v2
Tomasz Kopacz: Architektura i service fabric - jak budować aplikacje w paas v2Tomasz Kopacz: Architektura i service fabric - jak budować aplikacje w paas v2
Tomasz Kopacz: Architektura i service fabric - jak budować aplikacje w paas v2
 
Wiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programmingWiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programming
 
Grzegorz Rycaj: Zdebuguj swoja prezentacje
Grzegorz Rycaj: Zdebuguj swoja prezentacjeGrzegorz Rycaj: Zdebuguj swoja prezentacje
Grzegorz Rycaj: Zdebuguj swoja prezentacje
 
Przemysław Dzierżak: Hurtownie dla DBA
Przemysław Dzierżak: Hurtownie dla DBAPrzemysław Dzierżak: Hurtownie dla DBA
Przemysław Dzierżak: Hurtownie dla DBA
 
Paweł Ciepły: PowerBI part1
Paweł Ciepły: PowerBI part1Paweł Ciepły: PowerBI part1
Paweł Ciepły: PowerBI part1
 
Shannon Holgate: Bending non-splittable data to harness distributed performance
Shannon Holgate: Bending non-splittable data to harness distributed performanceShannon Holgate: Bending non-splittable data to harness distributed performance
Shannon Holgate: Bending non-splittable data to harness distributed performance
 
Tomasz Nadolny: Open Data in Gdańsk
Tomasz Nadolny: Open Data in GdańskTomasz Nadolny: Open Data in Gdańsk
Tomasz Nadolny: Open Data in Gdańsk
 
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktykaWłodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
 
Piotr Janczyk: Modele zachowań klientów
Piotr Janczyk: Modele zachowań klientówPiotr Janczyk: Modele zachowań klientów
Piotr Janczyk: Modele zachowań klientów
 
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
 

Paweł Kucharski: Oswajamy Słonia czyli po co nam Hadoop

  • 2. • Sotrender • Hadoop • Czym jest Hadoop? • Podstawowe elementy • Ekosystem Hadoop • Hive, Pig • Spark • HBase • Nasze doświaczenia • MySQL vs Hadoop • R
  • 5. SOTRENDER • Sotrender: narzędzie do analiz social media • Badania i raporty na życzenie Więcej: 2015.sotrender.pl
  • 8. SOTRENDER Zbieramy dane: • Facebook, Twitter, YouTube, Instagram • 30k profili • 250k API calls na godzinę
  • 11. CZYM JEST HADOOP • Święty gral Big Data • Rozproszony system przechowywania przetwarzania danych
  • 13. CZYM JEST HADOOP Otwarta implementacja paradygmatów Google: GoogleFileSystem i MapReduce Hadoop umożliwia: • przetwarzanie dużych ilościach danych • równolegle • niezawodnie • skalowalnie • zbudowanych z tanich komponentów
  • 14. CZYM JEST HADOOP Zalety • Elastyczny format danych • Nie wymaga agregacji (surowe dane) • Nie wymaga próbkowania (wszystkie dane) • Nie ma potrzeby usuwania danych • Skalowalny (od kilku do tysięcy węzłów)
  • 15.
  • 16. CZYM JEST HADOOP Zamiast przesyłać dane do programu, przesyłamy program do danych Data Data Data DataData Data Map Map Map Map Map Map reducer
  • 19. HISTORIA HADOOP • Stworzony w 2005 w Yahoo przez Doug Cutting • Wersja 0.14.1 w 2007 • Wersja 1.0 – grudzień 2011 • Wersja 2.2 - październik 2013
  • 20. HADOOP Główne dystrybucje • Hortonworks • HDP • Cloudera • CDH • MapR • M3
  • 22. HISTORIA HADOOP Yahoo • 600PB, 43k nodes Twitter: • 300PB 1000 nodes Facebook • 300PB, 600TB dziennie Google (maj 2014) • 2 EB, 600M QPS
  • 23. HADOOP 26% dużych firm używa Hadoopa, kolejne 18% zamierza to zrobić w ciągu dwóch lat.
  • 26. HADOOP DISTRIBUTED FILE SYSTEM HDFS
  • 27. HDFS Rozproszony system plików • Skalowalny • Odporny na awarię • Tani sprzęt • Duże ilości danych • Dla dużych klastrów
  • 28. HDFS Dwa podstawowe elementy: • Namenode • Datanode Dodatkowo: • JournalNode • Zookeeper
  • 29. HDFS • Block replication • Rack awareness • Self healing
  • 31. Konfiguracja węzłów: - niskiej/średniej klasy sprzęt - trochę RAMu - dużo dysków - szybkie karty sieciowe
  • 33. MAPREDUCE Pochodzenie: MPI, Google Składa się z trzech kroków • „Map” – operacje lokalne • „Shuffle” – redystrybucji wyników • „Reduce” – grupowanie wyników MapReduce nie ma być szybki, ale umożliwiać zrównoleglenie obliczeń na dużą skalę.
  • 34.
  • 36. Komisja wyborcza #1 MAPREDUCE PRZYKŁAD Komisja wyborcza #N Okręgowa komisja wyborcza Komisja wyborcza #M Komisja wyborcza #S Okręgowa komisja wyborcza Państwowa Komisja Wyborcza
  • 38. MAPREDUCE ON YARN YARN • Otwarty • Skalowalny • Zarządza tylko zasobami • Logika przenisiona do App Mstr http://hortonworks.com/blog/apache-hadoop-yarn-concepts-and-applications/
  • 39. PRZYKŁAD - WORDCOUNT public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } }
  • 40. PRZYKŁAD - WORDCOUNT import sys for line in sys.stdin: line = line.strip() words = line.split() for word in words: print '%st%s' % (word, 1) from operator import itemgetter import sys current_word = None current_count = 0 word = None for line in sys.stdin: line = line.strip() word, count = line.split('t', 1) try: count = int(count) except ValueError: continue # this IF-switch only works because Hadoop sorts map output if current_word == word: current_count += count else: if current_word: print '%st%s' % (current_word, current_count) current_count = count current_word = word if current_word == word: print '%st%s' % (current_word, current_count) http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
  • 41. PRZYKŁAD - WORDCOUNT test@debian:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -file /home/test/mapper.py -mapper /home/test/mapper.py -file /home/test/reducer.py -reducer /home/test/reducer.py -input /user/test/gutenberg/* -output /user/test/gutenberg-output
  • 43. EKOSYSTEM HADOOP Na tych dwóch głównych elementach zbudowano wiele gotowych rozwiązań https://hadoopecosystemtable.github.io/ 134 różne projekty
  • 44. Hive
  • 45. HIVE • Prosty interfejs do przetwarzania danych w Hadoopie, wygodniejszy niż pisanie własnych funkcji • Wykorzystuje język HiveQL, podobny do SQL
  • 46. HIVE SQL -> MapReduce SELECT COUNT(*) FROM test_table WHERE id IN( SELECT id FROM test_table2) GROUP BY grp_id zostaje przeszktałocne w serię zadań MapReduce
  • 47. HIVE • Możliwość czytania z wielu źródeł • External Tables • Pliki, Hbase, Hypertable, Cassandra, JDBC • Indeksy • Własne UDF i funkcje Map/Reduce
  • 48. HIVE CREATE TABLE input (line STRING); LOAD DATA LOCAL INPATH 'input.tsv' OVERWRITE INTO TABLE input; SELECT word, COUNT(*) FROM input LATERAL VIEW explode(split(text, ' ')) ITable as word GROUP BY word; Przykład: word count
  • 50. • Zapytania ad-hoc • Nie wymaga programowania • Zna informacje o strukturze danych
  • 51. Pig
  • 52. PIG Ten sam cel co HIVE inna droga Pig Latin Język skryptowy kompilowanych do zadań MapReduce
  • 53. PIG a = load '/user/test/word_count_text.txt'; b = foreach a generate flatten(TOKENIZE((chararray)$0)) as word; c = group b by word; d = foreach c generate COUNT(b), group; store d into '/user/test/pig_wordcount'; Wordcount example
  • 54. Spark
  • 55. SPARK Apache Spark™ is a fast and general engine for large-scale data processing. • Łatwy w użyciu • Możliwość pisania w: • Java, Scala, Python, R • Ponad 80 operacji wysokiego poziomu
  • 56. SPARK Transformation Meaning map(func) Return a new distributed dataset formed by passing each element of the source through a function func. filter(func) Return a new dataset formed by selecting those elements of the source on which func returns true. flatMap(func) Similar to map, but each input item can be mapped to 0 or more output items (so func should return a Seq rather than a single item). mapPartitions(func) Similar to map, but runs separately on each partition (block) of the RDD, so func must be of type Iterator<T> => Iterator<U> when running on an RDD of type T. mapPartitionsWithIndex(func) Similar to mapPartitions, but also provides func with an integer value representing the index of the partition, so func must be of type (Int, Iterator<T>) => Iterator<U> when running on an RDD of type T. sample(withReplacement, fraction, seed) Sample a fraction fraction of the data, with or without replacement, using a given random number generator seed. union(otherDataset) Return a new dataset that contains the union of the elements in the source dataset and the argument. intersection(otherDataset) Return a new RDD that contains the intersection of elements in the source dataset and the argument. distinct([numTasks])) Return a new dataset that contains the distinct elements of the source dataset.
  • 57. SPARK Action Meaning reduce(func) Aggregate the elements of the dataset using a function func (which takes two arguments and returns one). The function should be commutative and associative so that it can be computed correctly in parallel. collect() Return all the elements of the dataset as an array at the driver program. This is usually useful after a filter or other operation that returns a sufficiently small subset of the data. count() Return the number of elements in the dataset. first() Return the first element of the dataset (similar to take(1)). take(n) Return an array with the first n elements of the dataset. takeSample(withReplacement, num, [seed]) Return an array with a random sample of num elements of the dataset, with or without replacement, optionally pre-specifying a random number generator seed. saveAsTextFile(path) Write the elements of the dataset as a text file (or set of text files) in a given directory in the local filesystem, HDFS or any other Hadoop-supported file system. Spark will call toString on each element to convert it to a line of text in the file.
  • 58. SPARK text_file = spark.textFile("hdfs://...") counts = text_file.flatMap(lambda line: line.split(" ")) .map(lambda word: (word, 1)) .reduceByKey(lambda a, b: a + b) counts.saveAsTextFile("hdfs://...") Przykład: word count
  • 59. SPARK
  • 60. Spark sorts 100 TB in 23 minutes on 206 machines (6592 virtual cores), which translates into 4.27 TB/min or 20.7 GB/min/node.
  • 61.
  • 62. HBase
  • 63. HBASE Hbase • Opraty na Google BigTable • Baza danych • Obsługuje szybkie (w czasie rzeczywistym) operacje CRUD • Zapewnia spójność oczytu i zapisu • NoSQL – klucz-wartość • Jedynie proste operacje • Zbudowany na bazie HDFS
  • 64. HBASE • Rozproszona • Działa na wielu maszynach • Skalowalna • Automatyczny sharding • Dla dużych danych • Miliardy wierszy • Współpracuje z innymi elementami Hadoop
  • 65. HBASE Wady: • Tylko podstawowy zestaw operacji • Brak transakcji • Brak operacji na wielu tabelach • Wymaga dużych ilości danych • Inaczej nie ma sensu • Wymaga dużo IO, CPU i RAM
  • 66. HBASE • Dane są zapisywane w tabeli • Tabela składa się z wierszy • Każdy wiersz ma przypisany klucz • Tabela może mieć wiele rodzin kolumn • W każdej rodzinie kolumn może być wiele kolumn Row Stats Text 20151111 Total = 1 Count = 10 Msg = blabla 20151112 Total = 2 Posts = 10 Msg = hehe Tags = funny
  • 67. HBASE • Tabele dzielone są na regiony – zakresy kluczy • Regiony z jednej tabeli mogą być obsługiwane przez różne węzły (RegionServer)
  • 68. Dostęp: • Natywne API (Java) • REST • Thrift • Binarny protokół • Szybki • Obsługuje wiele języków
  • 70. POCZĄTKI MySQL • Zaczynaliśmy od 1 serwera • Dodawaliśmy kolejne serwery co kilka miesięcy • Zmienialiśmy serwery na co raz mocniejsze • Doszliśmy do 6 maszyn
  • 71. MySQL • Problem z migracją danych między serwerami • Brak skalowalności • Problem z modyfikacją struktury • Długi czas odzyskiwania po awarii • Trudna konfiguracja
  • 72. MYSQL TokuDB • Drzewa fraktalne • Kompresja (do 25x) • Tworzenie indeksów bez blokowania • Modyfikacja struktury bez blokowania • Działa efektywnie „out of box” • Replikacja „read free”
  • 73. HADOOP SOTRENDER Hadoop • Hbase • Zbieranie danych • Serwowanie danych w narzędziu • Hive • Niestandardowe analizy • Pig • Wyznaczanie trendów, dzienne obliczenia
  • 74. HADOOP SOTRENDER MySQL • 3 TB danych (skompresowanych) • 56 mld wierszy Hadoop: • 6 wezłów • 28 TB danych • HBase, Hive, Spark
  • 76. HADOOP SOTRENDER Plusy • Skalowalność • Faktycznie działa • Wydajność • Jednolity interfejs dostępu do danych • Integracja z R • Szybki rozwój
  • 77. HADOOP SOTRENDER Minusy • Braki w dokumentacji • Problemy ze stabilnością • Java • Błędy • Konfiguracja • Braki w kontroli dostępu • Szybki rozwój
  • 81. R I HADOOP • Do czego wykorzystujemy? • Delegowanie szczególnie „kosztownych” operacji na danych (np. tabele frekwencyjne, agregowanie rekordów dziennych/godzinnych), • Łatwy i relatywnie szybki dostęp do ogromnych tabel,
  • 82. R I HADOOP - DOSTĘP • Szereg pakietów w R do operacji na klastrze hadoopowym: • rmr – umożliwiający pisanie programów MapReduce w R, • rhdfs – dostęp do plików w HDFS, • rhbase – funkcje umożliwiające dostęp do tabel w Hbase • Możliwość nawiązania połączenia z Hive przez JDBC (pakiet RJDBC w R)
  • 83. R I HADOOP – DOSTĘP DO HIVE
  • 84. R I HADOOP - PRZYKŁAD R Operacje na już zagregowanych danych Tworzenie końcowego produktu (wykresy, raporty) Hive Agregowanie danych (np. podsumowanie aktywności pod tweetami) Bezpośrednie zapytania HBase Mapowanie tabel z Hbase do Hive
  • 85. R I HADOOP - PRODUKT http://www.sotrender.pl/trends/twitt er/reports/201510