Wprowadzenie do technologii Big Data

Post on 16-Apr-2017

940 views 7 download

Transcript of Wprowadzenie do technologii Big Data

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 danychpliki (analiza batch i interaktywna) NoSQL (random access) Indeksy

pliki płaskie, csv(rowid,col,czas)->value:Accumulo, HBaseCassandra

MongoDBSolrElastic 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 '%s\t%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,KEYOUT,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,KEYOUT,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

Mainpublic 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

SAMPLEDESCRIBE

DUMPEXPLAIN

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 CLITryb 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 danychINT, TINYINT, SMALLINT, BIGINTBOOLEANDECIMALFLOAT, DOUBLESTRINGBINARYTIMESTAMPARRAY, MAP, STRUCT, UNIONDATECHARVARCHAR

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ównanieHive 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 & Trickshive.vectorized.execution.enabled=true

ORC

hive.execution.engine=tez

John Lund Stone Getty Images79

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 skalowalny87

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

• phoenix96

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

Warsztatadres (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 DataRadosław Stankiewicz - radoslaw@zagwozdka.com

www.sages.com.pl