SlideShare a Scribd company logo
1 of 115
Download to read offline
Wprowadzenie do
technologii Big Data
Radosław Stankiewicz
HackerBD & DS FTW!Technical Lead Trainer
2
Src: computing.co.uk , https://www.flickr.com/photos/barron/15483113 , tech.co
Agenda
Wstęp -> Map Reduce -> Pig -> Hive -> HBase
4
Wprowadzenie
5
V O LUME6
Variety
7
A|123|10$
B|555|20$
Y|333|15$
{
'typ'='A',
'id'=123,
'kwota'='10$'
}
Velocity
OLAP
Real
Time
Batch
Streaming
Interactive
analytics
8
Przechowywanie danych
pliki (analiza batch i
interaktywna)
NoSQL (random access) Indeksy
pliki płaskie, csv
(rowid,col,czas)->value:
Accumulo, HBase
Cassandra
MongoDB
Solr
Elastic Search
JSON
AVRO
formaty kolumnowe Bazy grafowe
9
Value
11
Klasyfikacja problemu
• Baza danych ulic Warszawy, Dane w formacie JSON,
optymalizacja odbioru śmieci jednego z usługodawców.
• Zdarzenia z bazy transakcyjnej i kart kredytowych w
celu lepszego wykrywania fraudów
• System wyszukujący dobre oferty samochodów z wielu
serwisów - web crawling, parsowanie danych, analiza
trendów cen samochodów
• Centralne repozytorium skanów umów, TB danych,
codziennie przybywa kilkaset nowych dokumentów
12
13
BI/BigData/EDH
14
BI BD
EDH
Geneza
• za dużo danych
• pady serwerów
• wolne relacyjne bazy danych
15
16
17
18
Ekosystem Hadoop
19 źródło: Hortonworks
Wprowadzenie do
MapReduce na przykładzie
platformy Hadoop
20
Architektura
21
Architektura
22 źródło: Hortonworks
HDFS
Inspirowany GFS(po prawej)
Główne cechy:
• Fault tolerant
• Commodity, low cost hardware
• Batch processing
• High throughput, not low latency
• Write Once, Read Many
23
HDFS - Namenode,
Datanode
24
HDFS - replikacja
Datanodes
Namenode
25
● User Commands
o dfs
o fsck
● Administration Commands
o datanode
o dfsadmin
o namenode
dfs:
appendToFile cat chgrp chmod chown copyFromLocal copyToLocal count cp du
dus expunge get getfacl getfattr getmerge ls lsr mkdir moveFromLocal
moveToLocal mv put rm rmr setfacl setfattr setrep stat tail test text touchz
hdfs dfs -put localfile1 localfile2 /user/tmp/hadoopdir
hdfs dfs -getmerge /user/hadoop/output/ localfile
komendy
26
Uprawnienia
POSIX - Knox - Ranger
27
Architektura YARN
28
Map Reduce Framework
29
Map Reduce Framework
30
M
M
M
M
R
R
R
R
R
Mapper
#!/usr/bin/env python
import sys
for line in sys.stdin:
words = line.strip().split()
for word in words:
print '%st%s' % (word, 1)
line = “Ala ma kota”
Ala 1
ma 1
kota 1
31
Reducer
#!/usr/bin/env python
import sys
current_word = None
current_count = 0
word = None
for line in sys.stdin:
line = line.strip()
word, count = line.split('t', 1)
count = int(count)
if current_word == word:
current_count += count
else:
if current_word:
print '%s,%s' % (current_word, current_count)
current_count = count
current_word = word
if current_word == word:
print '%s,%s' % (current_word, current_count)
ala 1
ala 1
bela 1
dela 1
ala,2
bela,1
dela,1
32
Uruchomienie streaming
cat input.txt | ./mapper.py | sort | ./reducer.py
bin/yarn jar [..]/hadoop-*streaming*.jar 

-file mapper.py -mapper ./mapper.py -file
reducer.py -reducer ./reducer.py 

-input /tmp/wordcount/input -output /tmp/
wordcount/output
33
Map Reduce w Java
(input) <k1, v1> -> map -> <k2, v2> -> combine ->
<k2, v2> -> reduce -> <k3, v3> (output)
1) Mapper
2) Reducer
3) run
public class WordCount extends Configured
implements Tool {
public static class TokenizerMapper{...}
public static class IntSumReducer{...}
public int run(...){...}
}
34
Mapper<KEYIN,VALUEIN,KEY
OUT,VALUEOUT>
public static class TokenizerMapper

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 {

StringTokenizer itr = new StringTokenizer(value.toString());

while (itr.hasMoreTokens()) {

word.set(itr.nextToken());

context.write(word, one);

}

}
public void setup(...) {...}
public void cleanup(...) {...}
public void run(...) {...}

}
value = “Ala ma kota”
Ala,1
ma,1
kota,1
Reducer<KEYIN,VALUEIN,KEY
OUT,VALUEOUT>
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);

}
public void setup(...) {...}
public void cleanup(...) {...}
public void run(...) {...}

}
kota,(1,1,1,1)
kota,4
Main
public int run(String[] args) throws Exception {

Configuration conf = new Configuration();

Job job = Job.getInstance(conf, "word count");

job.setJarByClass(WordCount.class);

job.setMapperClass(TokenizerMapper.class);

job.setCombinerClass(IntSumReducer.class);

job.setReducerClass(IntSumReducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

FileInputFormat.addInputPath(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);

}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(), new WordCount(),args);
System.exit(res);
}
yarn jar wc.jar WordCount /tmp/wordcount/input /tmp/wordcount/output
Co dalej?
• Map Reduce w Javie
• Testowanie MRUnit
• Joins
• Avro
• Custom Key, Value
• Złączanie wielu zadań
• Custom Input, Output
38
URL
http://bit.ly/1PTjH92
Warsztat
40
Warsztat
41
Wprowadzenie do
przetwarzania danych na
przykładzie Pig
42
Architektura Pig
43
Architektura Pig
44
Tryb Pracy
Interaktywny lub Wsadowy
45
Tryb Pracy
Lokalny lub Rozproszony
46
Tryb Pracy
Map Reduce lub Tez
47
Typy danych
48
int long float double
chararray datetime boolean
bytearray biginteger bigdecimal
Złożone typy
49
tuple bag map
Podstawy Pig Latin -
wielkość liter
• A = LOAD 'data' USING PigStorage() AS (f1:int, f2:int, f3:int);

B = GROUP A BY f1;

C = FOREACH B GENERATE COUNT ($0);

DUMP C;
• Nazwy zmiennych A, B, and C (tzw. aliasy) są case sensitive.
• Wielkość liter jest też istotna dla:
• nazwy pól f1, f2, i f3
• nazwy zmiennych A, B, C
• nazwy funkcji PigStorage, COUNT
• Z wyjątkiem: LOAD, USING, AS, GROUP, BY, FOREACH, GENERATE, oraz DUMP
50
assert, and, any, all, arrange, as, asc, AVG, bag,
BinStorage, by, bytearray, BIGINTEGER, BIGDECIMAL,
cache, CASE, cat, cd, chararray, cogroup, CONCAT,
copyFromLocal, copyToLocal, COUNT, cp, cross,
datetime, %declare, %default, define, dense, desc,
describe, DIFF, distinct, double, du, dump, e, E,
eval, exec, explain, f, F, filter, flatten, float,
foreach, full, generate, group, help, if, illustrate,
import, inner, input, int, into, is, join, kill, l, L,
left, limit, load, long, ls, map, matches, MAX, MIN,
mkdir, mv, not, null, onschema, or, order, outer,
output, parallel, pig, PigDump, PigStorage, pwd, quit,
register, returns, right, rm, rmf, rollup, run,
sample, set, ship, SIZE, split, stderr, stdin, stdout,
store, stream, SUM, TextLoader, TOKENIZE, through,
tuple, union, using, void
51
Słowa kluczowe
Pierwsze kroki
data = LOAD 'input' AS (query:CHARARRAY);
A = LOAD 'data' USING PigStorage('t') AS (f1:int, f2:int, f3:int);
STORE A INTO '/tmp/result' USING PigStorage(';')
52
Pierwsze kroki
SAMPLE
DESCRIBE
DUMP
EXPLAIN
ILLUSTRATE
53
Kolejne kroki - operacje na
danych
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int,
scholarship:float);
B = FILTER A BY age > 20;
54
Kolejne kroki - operacje na
danych
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int,
scholarship:float);
B = FILTER A BY age > 20;
C = LIMIT B 5;
55
Kolejne kroki - operacje na
danych
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int,
scholarship:float);
B = FILTER A BY age > 20;
C = LIMIT B 5;
D = FOREACH C GENERATE name, scholarship*semestre as funds
56
Kolejne kroki - operacje na
danych
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int,
scholarship:float);
E = GROUP A by age
57
Kolejne kroki - operacje na
danych
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int,
scholarship:float);
E = GROUP A by age
F = FOREACH E GENERATE group as age, AVG(A.scholarship)
58
Wydajność
Tez, Projekcje, Filtrowanie, Join
59
Co dalej?
UDF, PigUnit, Integracje
60
Warsztat
61
Wprowadzenie do analizy
danych na przykładzie
Hive
62
Architektura
63
Unikalne cechy Hive
Zapytania SQL na plikach płaskich, np. CSV
64
Unikalne cechy Hive
Znaczne przyspieszenie analizy - nie potrzeba pisać Map Reduce
Optymalizacja, wykonywanie części operacji w pamięci zamiast MR
65
Unikalne cechy Hive
Nieograniczone formy integracji - MongoDB, Elastic Search,
HBase
66
Unikalne cechy Hive
Integracja narzędzi BI oraz DWH z Hive poprzez JDBC
67
Hive CLI
Tryb Interaktywny
hive
Tryb Wsadowy:
hive -e ‘select foo from bar’
hive -f ‘/path/to/my/script.q’
hive -f ‘hdfs://namenode:port/path/to/my/
script.q’
więcej opcji: hive --help
68
Typy danych
INT, TINYINT, SMALLINT, BIGINT
BOOLEAN
DECIMAL
FLOAT, DOUBLE
STRING
BINARY
TIMESTAMP
ARRAY, MAP, STRUCT, UNION
DATE
CHAR
VARCHAR
69
Składnia zapytań
SELECT, INSERT, UPDATE
GROUP BY
UNION
LEFT, RIGHT, FULL INNER, FULL OUTER JOIN
OVER, RANK
(NOT) IN, HAVING
(NOT) EXISTS
70
Data Definition Language
• CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX
• DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX
• TRUNCATE TABLE
• ALTER DATABASE/SCHEMA, TABLE, VIEW
• MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)
• SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES,
PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE
• DESCRIBE DATABASE/SCHEMA, table_name, view_name
71
Tabele
CREATE TABLE page_view(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '001'
STORED AS TEXTFILE;
72
Pierwsze kroki w Hive
CREATE TABLE tablename1 (foo INT, bar STRING) PARTITIONED BY (ds STRING);
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename1;
INSERT INTO TABLE tablename1 PARTITION (ds='2014') select_statement1 FROM
from_statement;
73
Pierwsze kroki w Hive
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
DELETE FROM tablename [WHERE expression]
74
Inne formaty plików? SerDe
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/
start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
CREATE TABLE apachelog (
host STRING, identity STRING, user STRING, time STRING, request STRING, status STRING,
size STRING, referer STRING, agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^]*) ([^]*) ([^]*) (-|[^]*]) ([^ "]*|"[^"]*") (-|[0-9]*) (-|[0-9]*)(?:
([^ "]*|".*") ([^ "]*|".*"))?"
)
STORED AS TEXTFILE;
75
Inne formaty plików? SerDe
CREATE TABLE table (
foo STRING, bar STRING)
STORED AS TEXTFILE; ← lub SEQUENCEFILE, ORC, AVRO lub PARQUET
76
Zalety, wady, porównanie
Hive Pig
deklaratywny proceduralny
tabele tymczasowe pipeline
polegamy na optymalizatorze
bardziej ingerujemy w
implementacje
UDF, Transform UDF, streaming
sterowniki sql data pipeline splits
77
Stinger
http://hortonworks.com/labs/stinger/
78
Tips & Tricks
hive.vectorized.execution.enabled=true
ORC
hive.execution.engine=tez
John Lund Stone Getty Images
79
Co dalej?
• Integracje z Solr, Elastic, MongoDB
• UDF
• multi table inserts
• JDBC
80
Warsztat
źródło:HikingArtist81
Wprowadzenie do
NoSQL na podstawie
82
No SQL
• Not Only SQL
• Nierelacyjne
• Większość bez ACID
83
geekandpoke
Kiedy NoSQL
Skalowalność, Elastyczność
84
Przegląd baz nierelacyjnych
85
CAP theorem
86
Co to jest?
• Key Value
• Column Family
• Wide Column
• Random access
• No SQL
• Liniowo skalowalny
87
HBase Table (concept)
adres (column family)
wygląd (column
family)
rowkey miasto ulica kolor oczu
rowkey1 Warszawa Rubinowa Niebieskie
rowkey2 Kraków Poznańska
rowkey3 Pcim Brązowe
88
HBase Table …
rowkey
adres (column family) wygląd (column family)
miasto ulica kolor oczu
value timestamp value timestamp value timestamp
rowkey1 Warszawa 133334732
Rubinowa 133337743
Zielone 1344343424
Kasprowicza 144434453
rowkey2 Kraków 123333344 Poznańska 133333
rowkey3 Pcim 133333334 Brązowe 1343433444
89
HBase Table …….
90
{ rowkey1: {
adres: {
miasto:{
1333334732:Warszawa
},
ulica:{
1333337743: Kasprowicza,
1444434453: Rubinowa
}
}
}, [ other rowkeys..]
}
HBase Key Value
• (rowid,columnid,timestamp)->value
• (rowkey1,miasto,13334444)->Warszawa
91
High Level Architecture
Tabela
93
Architektura HBase
http://www.toadworld.com/platforms/nosql/w/wiki/356.hbase-storage.aspx94
HFile
95
API
• shell
• thrift
• java client
• rest
• hive
• phoenix
96
HBase Shell
hbase shell
create 'testtable', {NAME=>'CF1'}, {NAME=>'CF2', VERSIONS=>2}
put 'testtable', 'row1', 'CF1:col1', 'val1’
put 'testtable', 'row2', 'CF2:col7', 'val2'
get 'testtable', 'row1'
scan 'testtable', { STARTROW => 'row2', STOPROW => 'rowX'}
scan 'testtable', {COLUMNS=>['CF1:']}
scan 'testtable' , {COLUMNS=>['CF1:'], VERSIONS => 3}
disable 'testtable'
drop 'testtable'
97
Python Api na przykładzie
HappyBase
1) Zainstaluj Happybase
pip install happybase
2) Uruchom python
3) Dive into the code:
import happybase
connection = happybase.Connection('somehost', table_prefix='myproject')
print connection.tables()
table = connection.table('XYZ')
row = table.row('row-key')
print row['cf1:col1']
for key, data in table.scan(row_start='aaa', row_stop='xyz'):
print key, data
table.put('row-key', {'cf:col1': 'value1',
'cf:col2': ‚value2'})
table.delete(‚row-key')
więcej:
http://happybase.readthedocs.org/en/latest/index.html
98
Hive
CREATE [EXTERNAL] TABLE foo(rowkey STRING, a STRING, b STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,f:c1,f:c2')
TBLPROPERTIES ('hbase.table.name' = 'bar');
f - column family
c1, c2 - kolumny
99
Warsztat
źródło:HikingArtist100
Warsztat
adres (column family) wygląd (column family)
rowkey miasto kod pocztowy ulica kolor włosów kolor oczu wzrost
95060200998 Warszawa
05-077
01-949
Jaspisowa
Sokratesa
blond Zielone
170
180
192
86010100222 Kraków Poznańska
blond
rudy
190
83010233331 Pcim brąz Brązowe 195
101
Monitorowanie i
zarządzanie klastrem na
przykładzie Ambari
102
CLI
• Yarn Administration Commands
• resourcemanager nodemanager proxyserver rmadmin daemonlog
• HDFS
• User Commands
• dfs
• fsck
• Administration Commands
• datanode dfsadmin namenode
• HBase
• start-hbase.sh, stop-hbase.sh
• HCatalog, HiveServer,
• Kafka, Storm, Tez, Spark, Oozie i inne
• monitoring, konfiguracja, aktualizacja
103
Ambari
• zarządzanie klastrem
• konsola monitoringu
• instalacja nowych węzłów
• konfiguracja
• wygaszanie serwerów
104
Ambari
105
Now what?
107
Chcesz wiedzieć więcej?
Szkolenia pozwalają na indywidualną pracę z każdym
uczestnikiem
• pracujemy w grupach 4-8 osobowych
• program może być dostosowany do oczekiwań
grupy
• rozwiązujemy i odpowiadamy na indywidualne
pytania uczestników
• mamy dużo więcej czasu :)
Szkolenie dedykowane dla
Ciebie
Jesteś architektem lub team leaderem?
• na przekrojowym szkoleniu 5-dniowym omawiamy i
ćwiczymy cały ekosystem Hadoopa
• na szkoleniu dedykowanym dla architektów dyskutujemy
o projektowaniu systemów BigData
Jesteś analitykiem?
• na dedykowanym szkoleniu przećwiczysz w szczegółach
Pig i Hive i rozwiążesz przykładowe problemy analityczne
Szkolenie dedykowane dla
Ciebie
Jesteś programistą?
• szkolenie 3-dniowe pozwala w szczegółach zapoznać się z
programowaniem zaawansowanych aspektów MapReduce
w Javie i programowaniem w podejściu strumieniowym
Interesuje Cię całość zagadnienia BigData?
• Przetwarzanie Big Data z użyciem Apache Spark
• Bazy danych NoSQL - Cassandra
• Bazy danych NoSQL - MongoDB
Szkolenia
źródła
• HikingArtist.com - rysunki
• hortonworks.com - architektura HDP
• apache.org - grafiki Pig, Hive, Hadoop
dziękuję
pytania?
114
Wprowadzenie do
technologii Big Data
Radosław Stankiewicz - radoslaw@zagwozdka.com
www.sages.com.pl

More Related Content

What's hot

Hadoop i okolice
Hadoop i okoliceHadoop i okolice
Hadoop i okolicezygm0nt
 
TypeScript as a runtime error terminator
TypeScript as a runtime error terminatorTypeScript as a runtime error terminator
TypeScript as a runtime error terminatorThe Software House
 
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScriptZnaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScriptThe Software House
 
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...The Software House
 
Architektura ngrx w angular 2+
Architektura ngrx w angular 2+Architektura ngrx w angular 2+
Architektura ngrx w angular 2+Paweł Żurowski
 
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. allegro.tech
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
GraphQL w React z wykorzystaniem Apollo
GraphQL w React z wykorzystaniem ApolloGraphQL w React z wykorzystaniem Apollo
GraphQL w React z wykorzystaniem ApolloBoldare
 
RxJava & Hystrix - Perfect match for distributed applications
RxJava & Hystrix - Perfect match for distributed applicationsRxJava & Hystrix - Perfect match for distributed applications
RxJava & Hystrix - Perfect match for distributed applicationsallegro.tech
 

What's hot (10)

Hadoop i okolice
Hadoop i okoliceHadoop i okolice
Hadoop i okolice
 
TypeScript as a runtime error terminator
TypeScript as a runtime error terminatorTypeScript as a runtime error terminator
TypeScript as a runtime error terminator
 
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScriptZnaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
 
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
 
Architektura ngrx w angular 2+
Architektura ngrx w angular 2+Architektura ngrx w angular 2+
Architektura ngrx w angular 2+
 
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
GraphQL w React z wykorzystaniem Apollo
GraphQL w React z wykorzystaniem ApolloGraphQL w React z wykorzystaniem Apollo
GraphQL w React z wykorzystaniem Apollo
 
RxJava & Hystrix - Perfect match for distributed applications
RxJava & Hystrix - Perfect match for distributed applicationsRxJava & Hystrix - Perfect match for distributed applications
RxJava & Hystrix - Perfect match for distributed applications
 

Viewers also liked

Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkSages
 
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Sages
 
Bezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaBezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaSages
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji androidSages
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Sages
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemSages
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopSages
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSages
 
Hadoop World 2011: Hadoop Network and Compute Architecture Considerations - J...
Hadoop World 2011: Hadoop Network and Compute Architecture Considerations - J...Hadoop World 2011: Hadoop Network and Compute Architecture Considerations - J...
Hadoop World 2011: Hadoop Network and Compute Architecture Considerations - J...Cloudera, Inc.
 
Apache HBase Performance Tuning
Apache HBase Performance TuningApache HBase Performance Tuning
Apache HBase Performance TuningLars Hofhansl
 
What is a Data Warehouse and How Do I Test It?
What is a Data Warehouse and How Do I Test It?What is a Data Warehouse and How Do I Test It?
What is a Data Warehouse and How Do I Test It?RTTS
 

Viewers also liked (11)

Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
 
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
 
Bezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaBezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach java
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
 
Hadoop World 2011: Hadoop Network and Compute Architecture Considerations - J...
Hadoop World 2011: Hadoop Network and Compute Architecture Considerations - J...Hadoop World 2011: Hadoop Network and Compute Architecture Considerations - J...
Hadoop World 2011: Hadoop Network and Compute Architecture Considerations - J...
 
Apache HBase Performance Tuning
Apache HBase Performance TuningApache HBase Performance Tuning
Apache HBase Performance Tuning
 
What is a Data Warehouse and How Do I Test It?
What is a Data Warehouse and How Do I Test It?What is a Data Warehouse and How Do I Test It?
What is a Data Warehouse and How Do I Test It?
 

More from Sages

Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureSages
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawySages
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?Sages
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki startSages
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstępSages
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetSages
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkitSages
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseSages
 

More from Sages (9)

Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze Azure
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki start
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstęp
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
 

Wprowadzenie do technologii Big Data

  • 1. Wprowadzenie do technologii Big Data Radosław Stankiewicz
  • 2. HackerBD & DS FTW!Technical Lead Trainer 2 Src: computing.co.uk , https://www.flickr.com/photos/barron/15483113 , tech.co
  • 3.
  • 4. Agenda Wstęp -> Map Reduce -> Pig -> Hive -> HBase 4
  • 9. Przechowywanie danych pliki (analiza batch i interaktywna) NoSQL (random access) Indeksy pliki płaskie, csv (rowid,col,czas)->value: Accumulo, HBase Cassandra MongoDB Solr Elastic Search JSON AVRO formaty kolumnowe Bazy grafowe 9
  • 10.
  • 12. Klasyfikacja problemu • Baza danych ulic Warszawy, Dane w formacie JSON, optymalizacja odbioru śmieci jednego z usługodawców. • Zdarzenia z bazy transakcyjnej i kart kredytowych w celu lepszego wykrywania fraudów • System wyszukujący dobre oferty samochodów z wielu serwisów - web crawling, parsowanie danych, analiza trendów cen samochodów • Centralne repozytorium skanów umów, TB danych, codziennie przybywa kilkaset nowych dokumentów 12
  • 15. Geneza • za dużo danych • pady serwerów • wolne relacyjne bazy danych 15
  • 16. 16
  • 17. 17
  • 18. 18
  • 20. Wprowadzenie do MapReduce na przykładzie platformy Hadoop 20
  • 23. HDFS Inspirowany GFS(po prawej) Główne cechy: • Fault tolerant • Commodity, low cost hardware • Batch processing • High throughput, not low latency • Write Once, Read Many 23
  • 26. ● User Commands o dfs o fsck ● Administration Commands o datanode o dfsadmin o namenode dfs: appendToFile cat chgrp chmod chown copyFromLocal copyToLocal count cp du dus expunge get getfacl getfattr getmerge ls lsr mkdir moveFromLocal moveToLocal mv put rm rmr setfacl setfattr setrep stat tail test text touchz hdfs dfs -put localfile1 localfile2 /user/tmp/hadoopdir hdfs dfs -getmerge /user/hadoop/output/ localfile komendy 26
  • 31. Mapper #!/usr/bin/env python import sys for line in sys.stdin: words = line.strip().split() for word in words: print '%st%s' % (word, 1) line = “Ala ma kota” Ala 1 ma 1 kota 1 31
  • 32. Reducer #!/usr/bin/env python import sys current_word = None current_count = 0 word = None for line in sys.stdin: line = line.strip() word, count = line.split('t', 1) count = int(count) if current_word == word: current_count += count else: if current_word: print '%s,%s' % (current_word, current_count) current_count = count current_word = word if current_word == word: print '%s,%s' % (current_word, current_count) ala 1 ala 1 bela 1 dela 1 ala,2 bela,1 dela,1 32
  • 33. Uruchomienie streaming cat input.txt | ./mapper.py | sort | ./reducer.py bin/yarn jar [..]/hadoop-*streaming*.jar 
 -file mapper.py -mapper ./mapper.py -file reducer.py -reducer ./reducer.py 
 -input /tmp/wordcount/input -output /tmp/ wordcount/output 33
  • 34. Map Reduce w Java (input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output) 1) Mapper 2) Reducer 3) run public class WordCount extends Configured implements Tool { public static class TokenizerMapper{...} public static class IntSumReducer{...} public int run(...){...} } 34
  • 35. Mapper<KEYIN,VALUEIN,KEY OUT,VALUEOUT> public static class TokenizerMapper
 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 {
 StringTokenizer itr = new StringTokenizer(value.toString());
 while (itr.hasMoreTokens()) {
 word.set(itr.nextToken());
 context.write(word, one);
 }
 } public void setup(...) {...} public void cleanup(...) {...} public void run(...) {...}
 } value = “Ala ma kota” Ala,1 ma,1 kota,1
  • 36. Reducer<KEYIN,VALUEIN,KEY OUT,VALUEOUT> 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);
 } public void setup(...) {...} public void cleanup(...) {...} public void run(...) {...}
 } kota,(1,1,1,1) kota,4
  • 37. Main public int run(String[] args) throws Exception {
 Configuration conf = new Configuration();
 Job job = Job.getInstance(conf, "word count");
 job.setJarByClass(WordCount.class);
 job.setMapperClass(TokenizerMapper.class);
 job.setCombinerClass(IntSumReducer.class);
 job.setReducerClass(IntSumReducer.class);
 job.setOutputKeyClass(Text.class);
 job.setOutputValueClass(IntWritable.class);
 FileInputFormat.addInputPath(job, new Path(args[0]));
 FileOutputFormat.setOutputPath(job, new Path(args[1]));
 System.exit(job.waitForCompletion(true) ? 0 : 1);
 } public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new WordCount(),args); System.exit(res); } yarn jar wc.jar WordCount /tmp/wordcount/input /tmp/wordcount/output
  • 38. Co dalej? • Map Reduce w Javie • Testowanie MRUnit • Joins • Avro • Custom Key, Value • Złączanie wielu zadań • Custom Input, Output 38
  • 42. Wprowadzenie do przetwarzania danych na przykładzie Pig 42
  • 46. Tryb Pracy Lokalny lub Rozproszony 46
  • 47. Tryb Pracy Map Reduce lub Tez 47
  • 48. Typy danych 48 int long float double chararray datetime boolean bytearray biginteger bigdecimal
  • 50. Podstawy Pig Latin - wielkość liter • A = LOAD 'data' USING PigStorage() AS (f1:int, f2:int, f3:int);
 B = GROUP A BY f1;
 C = FOREACH B GENERATE COUNT ($0);
 DUMP C; • Nazwy zmiennych A, B, and C (tzw. aliasy) są case sensitive. • Wielkość liter jest też istotna dla: • nazwy pól f1, f2, i f3 • nazwy zmiennych A, B, C • nazwy funkcji PigStorage, COUNT • Z wyjątkiem: LOAD, USING, AS, GROUP, BY, FOREACH, GENERATE, oraz DUMP 50
  • 51. assert, and, any, all, arrange, as, asc, AVG, bag, BinStorage, by, bytearray, BIGINTEGER, BIGDECIMAL, cache, CASE, cat, cd, chararray, cogroup, CONCAT, copyFromLocal, copyToLocal, COUNT, cp, cross, datetime, %declare, %default, define, dense, desc, describe, DIFF, distinct, double, du, dump, e, E, eval, exec, explain, f, F, filter, flatten, float, foreach, full, generate, group, help, if, illustrate, import, inner, input, int, into, is, join, kill, l, L, left, limit, load, long, ls, map, matches, MAX, MIN, mkdir, mv, not, null, onschema, or, order, outer, output, parallel, pig, PigDump, PigStorage, pwd, quit, register, returns, right, rm, rmf, rollup, run, sample, set, ship, SIZE, split, stderr, stdin, stdout, store, stream, SUM, TextLoader, TOKENIZE, through, tuple, union, using, void 51 Słowa kluczowe
  • 52. Pierwsze kroki data = LOAD 'input' AS (query:CHARARRAY); A = LOAD 'data' USING PigStorage('t') AS (f1:int, f2:int, f3:int); STORE A INTO '/tmp/result' USING PigStorage(';') 52
  • 54. Kolejne kroki - operacje na danych A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int, scholarship:float); B = FILTER A BY age > 20; 54
  • 55. Kolejne kroki - operacje na danych A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int, scholarship:float); B = FILTER A BY age > 20; C = LIMIT B 5; 55
  • 56. Kolejne kroki - operacje na danych A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int, scholarship:float); B = FILTER A BY age > 20; C = LIMIT B 5; D = FOREACH C GENERATE name, scholarship*semestre as funds 56
  • 57. Kolejne kroki - operacje na danych A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int, scholarship:float); E = GROUP A by age 57
  • 58. Kolejne kroki - operacje na danych A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, semestre:int, scholarship:float); E = GROUP A by age F = FOREACH E GENERATE group as age, AVG(A.scholarship) 58
  • 60. Co dalej? UDF, PigUnit, Integracje 60
  • 62. Wprowadzenie do analizy danych na przykładzie Hive 62
  • 64. Unikalne cechy Hive Zapytania SQL na plikach płaskich, np. CSV 64
  • 65. Unikalne cechy Hive Znaczne przyspieszenie analizy - nie potrzeba pisać Map Reduce Optymalizacja, wykonywanie części operacji w pamięci zamiast MR 65
  • 66. Unikalne cechy Hive Nieograniczone formy integracji - MongoDB, Elastic Search, HBase 66
  • 67. Unikalne cechy Hive Integracja narzędzi BI oraz DWH z Hive poprzez JDBC 67
  • 68. Hive CLI Tryb Interaktywny hive Tryb Wsadowy: hive -e ‘select foo from bar’ hive -f ‘/path/to/my/script.q’ hive -f ‘hdfs://namenode:port/path/to/my/ script.q’ więcej opcji: hive --help 68
  • 69. Typy danych INT, TINYINT, SMALLINT, BIGINT BOOLEAN DECIMAL FLOAT, DOUBLE STRING BINARY TIMESTAMP ARRAY, MAP, STRUCT, UNION DATE CHAR VARCHAR 69
  • 70. Składnia zapytań SELECT, INSERT, UPDATE GROUP BY UNION LEFT, RIGHT, FULL INNER, FULL OUTER JOIN OVER, RANK (NOT) IN, HAVING (NOT) EXISTS 70
  • 71. Data Definition Language • CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX • DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX • TRUNCATE TABLE • ALTER DATABASE/SCHEMA, TABLE, VIEW • MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS) • SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE • DESCRIBE DATABASE/SCHEMA, table_name, view_name 71
  • 72. Tabele CREATE TABLE page_view(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the User') COMMENT 'This is the page view table' PARTITIONED BY(dt STRING, country STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '001' STORED AS TEXTFILE; 72
  • 73. Pierwsze kroki w Hive CREATE TABLE tablename1 (foo INT, bar STRING) PARTITIONED BY (ds STRING); LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename1; INSERT INTO TABLE tablename1 PARTITION (ds='2014') select_statement1 FROM from_statement; 73
  • 74. Pierwsze kroki w Hive UPDATE tablename SET column = value [, column = value ...] [WHERE expression] DELETE FROM tablename [WHERE expression] 74
  • 75. Inne formaty plików? SerDe 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/ start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)" CREATE TABLE apachelog ( host STRING, identity STRING, user STRING, time STRING, request STRING, status STRING, size STRING, referer STRING, agent STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "([^]*) ([^]*) ([^]*) (-|[^]*]) ([^ "]*|"[^"]*") (-|[0-9]*) (-|[0-9]*)(?: ([^ "]*|".*") ([^ "]*|".*"))?" ) STORED AS TEXTFILE; 75
  • 76. Inne formaty plików? SerDe CREATE TABLE table ( foo STRING, bar STRING) STORED AS TEXTFILE; ← lub SEQUENCEFILE, ORC, AVRO lub PARQUET 76
  • 77. Zalety, wady, porównanie Hive Pig deklaratywny proceduralny tabele tymczasowe pipeline polegamy na optymalizatorze bardziej ingerujemy w implementacje UDF, Transform UDF, streaming sterowniki sql data pipeline splits 77
  • 80. Co dalej? • Integracje z Solr, Elastic, MongoDB • UDF • multi table inserts • JDBC 80
  • 82. Wprowadzenie do NoSQL na podstawie 82
  • 83. No SQL • Not Only SQL • Nierelacyjne • Większość bez ACID 83 geekandpoke
  • 87. Co to jest? • Key Value • Column Family • Wide Column • Random access • No SQL • Liniowo skalowalny 87
  • 88. HBase Table (concept) adres (column family) wygląd (column family) rowkey miasto ulica kolor oczu rowkey1 Warszawa Rubinowa Niebieskie rowkey2 Kraków Poznańska rowkey3 Pcim Brązowe 88
  • 89. HBase Table … rowkey adres (column family) wygląd (column family) miasto ulica kolor oczu value timestamp value timestamp value timestamp rowkey1 Warszawa 133334732 Rubinowa 133337743 Zielone 1344343424 Kasprowicza 144434453 rowkey2 Kraków 123333344 Poznańska 133333 rowkey3 Pcim 133333334 Brązowe 1343433444 89
  • 90. HBase Table ……. 90 { rowkey1: { adres: { miasto:{ 1333334732:Warszawa }, ulica:{ 1333337743: Kasprowicza, 1444434453: Rubinowa } } }, [ other rowkeys..] }
  • 91. HBase Key Value • (rowid,columnid,timestamp)->value • (rowkey1,miasto,13334444)->Warszawa 91
  • 96. API • shell • thrift • java client • rest • hive • phoenix 96
  • 97. HBase Shell hbase shell create 'testtable', {NAME=>'CF1'}, {NAME=>'CF2', VERSIONS=>2} put 'testtable', 'row1', 'CF1:col1', 'val1’ put 'testtable', 'row2', 'CF2:col7', 'val2' get 'testtable', 'row1' scan 'testtable', { STARTROW => 'row2', STOPROW => 'rowX'} scan 'testtable', {COLUMNS=>['CF1:']} scan 'testtable' , {COLUMNS=>['CF1:'], VERSIONS => 3} disable 'testtable' drop 'testtable' 97
  • 98. Python Api na przykładzie HappyBase 1) Zainstaluj Happybase pip install happybase 2) Uruchom python 3) Dive into the code: import happybase connection = happybase.Connection('somehost', table_prefix='myproject') print connection.tables() table = connection.table('XYZ') row = table.row('row-key') print row['cf1:col1'] for key, data in table.scan(row_start='aaa', row_stop='xyz'): print key, data table.put('row-key', {'cf:col1': 'value1', 'cf:col2': ‚value2'}) table.delete(‚row-key') więcej: http://happybase.readthedocs.org/en/latest/index.html 98
  • 99. Hive CREATE [EXTERNAL] TABLE foo(rowkey STRING, a STRING, b STRING) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,f:c1,f:c2') TBLPROPERTIES ('hbase.table.name' = 'bar'); f - column family c1, c2 - kolumny 99
  • 101. Warsztat adres (column family) wygląd (column family) rowkey miasto kod pocztowy ulica kolor włosów kolor oczu wzrost 95060200998 Warszawa 05-077 01-949 Jaspisowa Sokratesa blond Zielone 170 180 192 86010100222 Kraków Poznańska blond rudy 190 83010233331 Pcim brąz Brązowe 195 101
  • 102. Monitorowanie i zarządzanie klastrem na przykładzie Ambari 102
  • 103. CLI • Yarn Administration Commands • resourcemanager nodemanager proxyserver rmadmin daemonlog • HDFS • User Commands • dfs • fsck • Administration Commands • datanode dfsadmin namenode • HBase • start-hbase.sh, stop-hbase.sh • HCatalog, HiveServer, • Kafka, Storm, Tez, Spark, Oozie i inne • monitoring, konfiguracja, aktualizacja 103
  • 104. Ambari • zarządzanie klastrem • konsola monitoringu • instalacja nowych węzłów • konfiguracja • wygaszanie serwerów 104
  • 106.
  • 108.
  • 109. Chcesz wiedzieć więcej? Szkolenia pozwalają na indywidualną pracę z każdym uczestnikiem • pracujemy w grupach 4-8 osobowych • program może być dostosowany do oczekiwań grupy • rozwiązujemy i odpowiadamy na indywidualne pytania uczestników • mamy dużo więcej czasu :)
  • 110. Szkolenie dedykowane dla Ciebie Jesteś architektem lub team leaderem? • na przekrojowym szkoleniu 5-dniowym omawiamy i ćwiczymy cały ekosystem Hadoopa • na szkoleniu dedykowanym dla architektów dyskutujemy o projektowaniu systemów BigData Jesteś analitykiem? • na dedykowanym szkoleniu przećwiczysz w szczegółach Pig i Hive i rozwiążesz przykładowe problemy analityczne
  • 111. Szkolenie dedykowane dla Ciebie Jesteś programistą? • szkolenie 3-dniowe pozwala w szczegółach zapoznać się z programowaniem zaawansowanych aspektów MapReduce w Javie i programowaniem w podejściu strumieniowym Interesuje Cię całość zagadnienia BigData? • Przetwarzanie Big Data z użyciem Apache Spark • Bazy danych NoSQL - Cassandra • Bazy danych NoSQL - MongoDB
  • 113. źródła • HikingArtist.com - rysunki • hortonworks.com - architektura HDP • apache.org - grafiki Pig, Hive, Hadoop
  • 115. Wprowadzenie do technologii Big Data Radosław Stankiewicz - radoslaw@zagwozdka.com www.sages.com.pl