Hector Garcia-Molina Zoltan Gyongyi

67
CS 347 MapReduce 1 CS 347 Distributed Databases and Transaction Processing Distributed Data Processing Using MapReduce Hector Garcia-Molina Zoltan Gyongyi

description

CS 347 Distributed Databases and Transaction Processing Distributed Data Processing Using MapReduce. Hector Garcia-Molina Zoltan Gyongyi. Motivation: Building a Text Index. FLUSHING. 1. Web page stream. [cat: 2] [dog: 1] [dog: 2] [dog: 3] [rat: 1] [rat: 3]. rat. [rat: 1] [dog: 1] - PowerPoint PPT Presentation

Transcript of Hector Garcia-Molina Zoltan Gyongyi

Page 1: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 1

CS 347 Distributed Databases and

Transaction ProcessingDistributed Data Processing

Using MapReduce

Hector Garcia-MolinaZoltan Gyongyi

Page 2: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 2

Motivation: Building a Text Index

1

2

3

rat

dogdogcat

rat

dog

[rat: 1]

[dog: 1]

[dog: 2]

[cat: 2]

[rat: 3]

[dog: 3]

[cat: 2]

[dog: 1]

[dog: 2]

[dog: 3]

[rat: 1]

[rat: 3]

Disk

Webpage strea

m

TOKENIZING SORTINGLOADING

FLUSHING

Intermediate runs

Page 3: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 3

Motivation: Building a Text Index

[cat: 2]

[dog: 1]

[dog: 2]

[dog: 3]

[rat: 1]

[rat: 3]

Intermediateruns

[ant: 5]

[cat: 4]

[dog: 4]

[dog: 5]

[eel: 6]

MERGE

[ant: 5]

[cat: 2]

[cat: 4]

[dog: 1]

[dog: 2]

[dog: 3]

[dog: 4]

[dog: 5]

[eel: 6]

[rat: 1]

[rat: 3]Final index

[ant: 5]

[cat: 2,4]

[dog: 1,2,3,4,5]

[eel: 6]

[rat: 1,3]

Page 4: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 4

Generalization: MapReduce

1

2

3

rat

dogdogcat

rat

dog

[rat: 1]

[dog: 1]

[dog: 2]

[cat: 2]

[rat: 3]

[dog: 3]

[cat: 2]

[dog: 1]

[dog: 2]

[dog: 3]

[rat: 1]

[rat: 3]

Disk

Webpage strea

m

TOKENIZING SORTINGLOADING

FLUSHING

Intermediate runs

MAP

Page 5: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 5

Generalization: MapReduce[cat: 2]

[dog: 1]

[dog: 2]

[dog: 3]

[rat: 1]

[rat: 3]

Intermediateruns

[ant: 5]

[cat: 4]

[dog: 4]

[dog: 5]

[eel: 6]

MERGE

[ant: 5]

[cat: 2]

[cat: 4]

[dog: 1]

[dog: 2]

[dog: 3]

[dog: 4]

[dog: 5]

[eel: 6]

[rat: 1]

[rat: 3]Final index

[ant: 5]

[cat: 2,4]

[dog: 1,2,3,4,5]

[eel: 6]

[rat: 1,3]

REDUCE

Page 6: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 6

MapReduce

• Input– R = { r1, r2, …, rn }– Functions M, R– M (ri) { [k1: v1], [k2: v2], … }– R (ki, value bag) “new” value for ki

• Let– S = { [k: v] | [k: v] M (r) for some r R }– K = {{ k | [k: v] S, for any v }}– V (k) = { v | [k: v] S }

• Output– O = {{ [k: t] | k K, t = R (k, V (k)) }}

{{ … }} = set{ … } = bag

Page 7: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 7

• Map(string key, string value): // key is the document ID // value is the document body for each word w in value : EmitIntermediate(w, ‘1’)

• Example: Map(‘29875’, ‘cat dog cat bat dog’) emits [cat: 1], [dog: 1], [cat: 1], [bat: 1], [dog: 1]

• Why does Map() have two parameters?

Example: Counting Word Occurrences

Page 8: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 8

• Reduce(string key, string iterator values): // key is a word // values is a list of counts int result = 0 for each value v in values : result += ParseInteger(v) EmitFinal(ToString(result))

• Example: Reduce(‘dog’, { ‘1’, ‘1’, ‘1’, ‘1’ }) emits ‘4’

Example: Counting Word Occurrences

Page 9: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 9

Google MapReduce Architecture

Page 10: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 10

Implementation Issues

• File system• Data partitioning• Joined inputs• Combine functions• Result ordering• Failure handling• Backup tasks

Page 11: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 11

File system

• All data transfer between workers occurs through distributed file system– Support for split files– Workers perform local writes– Each map worker performs local or

remote read of one or more input splits– Each reduce worker performs remote

read of multiple intermediate splits– Output is left in as many splits as reduce

workers

Page 12: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 12

Data partitioning

• Data partitioned (split) by hash on key• Each worker responsible for certain

hash bucket(s)• How many workers/splits?

– Best to have multiple splits per worker Improves load balance If worker fails, splits could be re-distributed

across multiple other workers

– Best to assign splits to “nearby” workers– Rules apply to both map and reduce

workers

Page 13: Hector Garcia-Molina Zoltan Gyongyi

Joined inputs

• Two or more map inputs, partitioned (split) by same hash on key

• Map(string key, string iterator values)– Each value from one of the inputs– For some inputs, value may be empty if

key is not present in the input– SQL “equivalent”: full outer join on key

CS 347 MapReduce 13

Input 1[cat: 1][cow: 3][eel: 4]

Input 2[ant: 6][cow: 3]

CallsMap(‘ant’, { , ‘6’ })Map(‘cat’, { ‘1’, })Map(‘cow’, { ‘3’, ‘3’ })Map(‘eel’, { ‘4’, })

Page 14: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 14

Combine functions

worker

worker

worker[cat: 1], [cat: 1], [cat: 1], …

[dog: 1], [dog: 1], …

worker

worker

worker[cat: 3], …

[dog: 2], …

Combine is like a local reduce applied (at map worker) before

storing/distributing intermediate results:

Page 15: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 15

Result ordering

• Results produced by workers are in key order

[cat: 2][cow: 1][dog: 3] [ant: 2]

[bat: 1][cat: 5][cow: 7]

Page 16: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 16

Result ordering• Example: sorting records

5 e3 c6 f

2 b1 a6 f*

3 c5 e

6 f

1 a

2 b6 f*

8 h4 d9 i7 g

7 g9 i

4 d8 h

1 a3 c5 e7 g9 i

2 b4 d6 f6 f*8 h

W1

W2

W3

W5

W6

Map: emit [k: v]Reduce: emit v

Inp

ut

no

t p

arti

tio

ned

by

key!

One or two records for 6?

Page 17: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 17

Failure handling

• Worker failure– Detected by master through periodic pings– Handled via re-execution

Redo in-progress or completed map tasks Redo in-progress reduce tasks Map/reduce tasks committed through master

• Master failure– Not covered in original implementation– Could be detected by user program or monitor– Could recover persistent state from disk

Page 18: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 18

Backup tasks

• Straggler: worker that takes unusually long to finish task– Possible causes include bad disks,

network issues, overloaded machines

• Near the end of the map/reduce phase, master spawns backup copies of remaining tasks– Use workers that completed their task

already– Whichever finishes first “wins”

Page 19: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 19

Other Issues

• Handling bad records– Best is to debug and fix data/code– If master detects at least 2 task failures

for a particular input record, skips record during 3rd attempt

• Debugging– Tricky in a distributed environment– Done through log messages and

counters

Page 20: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 20

MapReduce Advantages

• Easy to use• General enough for expressing many

practical problems• Hides parallelization and fault

recovery details• Scales well, way beyond thousands

of machines and terabytes of data

Page 21: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 21

MapReduce Disadvantages

• One-input two-phase data flow rigid, hard to adapt– Does not allow for stateful multiple-step

processing of records• Procedural programming model

requires (often repetitive) code for even the simplest operations (e.g., projection, filtering)

• Opaque nature of the map and reduce functions impedes optimization

Page 22: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 22

Questions

• Could MapReduce be made more declarative?

• Could we perform (general) joins?• Could we perform grouping?

– As done through GROUP BY in SQL

Page 23: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 23

Pig & Pig Latin

• Layer on top of MapReduce (Hadoop)– Hadoop is an open-source

implementation of MapReduce– Pig is the system– Pig Latin is the language, a hybrid

between A high-level declarative query language,

such as SQL A low-level procedural language, such as C+

+/Java/Python typically used to define Map() and Reduce()

Page 24: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 24

Example: Average score per category

• Input table: pages(url, category, score)• Problem: find, for each sufficiently

large category, the average score of high-score web pages in that category

• SQL solution:SELECT category, AVG(score)FROM pagesWHERE score > 0.5GROUP BY category HAVING COUNT(*) > 1M

Page 25: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 25

Example: Average score per category• SQL solution:

SELECT category, AVG(score)FROM pagesWHERE score > 0.5GROUP BY category HAVING COUNT(*) > 1M

• Pig Latin solution:topPages = FILTER pages BY score > 0.5;groups = GROUP topPages BY category;largeGroups = FILTER groups

BY COUNT(topPages) > 1M;output = FOREACH largeGroups

GENERATE category, AVG(topPages.score);

Page 26: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 26

Example: Average score per category

topPages = FILTER pages BY score >= 0.5;

pages:url, category, score

topPages:url, category, score

(cnn.com, com, 0.9)

(yale.edu, edu, 0.5)

(berkeley.edu,

edu, 0.1)

(nytimes.com,

com, 0.8)

(stanford.edu,

edu, 0.6)

(irs.gov, gov, 0.7)

(cnn.com, com, 0.9)

(yale.edu, edu, 0.5)

(nytimes.com,

com, 0.8)

(stanford.edu,

edu, 0.6)

(irs.gov, gov, 0.7)

Page 27: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 27

Example: Average score per category

groups = GROUP topPages BY category;

topPages:url, category, score

groups:category, topPages

(cnn.com, com, 0.9)

(yale.edu, edu, 0.5)

(nytimes.com,

com, 0.8)

(stanford.edu,

edu, 0.6)

(irs.gov, gov, 0.7)

(com, {(cnn.com, com, 0.9), (nytimes.com, com, 0.8)}

)

(edu, {(yale.edu, edu, 0.5), (stanford.edu, edu, 0.6)}

)

(gov, {(irs.gov, gov, 0.7)} )

Page 28: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 28

Example: Average score per category

largeGroups = FILTER groups BY COUNT(topPages) > 1;

groups:category, topPages

largeGroups:category, topPages

(com, {(cnn.com, com, 0.9), (nytimes.com, com, 0.8)}

)

(edu, {(yale.edu, edu, 0.5), (stanford.edu, edu, 0.6)}

)

(gov, {(irs.gov, gov, 0.7)} )

(com, {(cnn.com, com, 0.9), (nytimes.com, com, 0.8)}

)

(edu, {(yale.edu, edu, 0.5), (stanford.edu, edu, 0.6)}

)

Page 29: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 29

Example: Average score per category

output = FOREACH largeGroups GENERATE category, AVG(topPages.score);

largeGroups:category, topPages

output:category, topPages

(com, {(cnn.com, com, 0.9), (nytimes.com, com, 0.8)}

)

(edu, {(yale.edu, edu, 0.5), (stanford.edu, edu, 0.6)}

)

(com, 0.85)(edu, 0.55)

Page 30: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 30

Pig (Latin) Features

• Similar to specifying a query execution plan (i.e., data flow graph)– Makes it easier for programmers to

understand and control execution

• Flexible, fully nested data model• Ability to operate over input files

without schema information• Debugging environment

Page 31: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 31

Execution control: good or bad?

• Example:spamPages = FILTER pages BY isSpam(url);culpritPages = FILTER spamPages BY score >

0.8;

• Should system reorder filters?– Depends on selectivity

Page 32: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 32

Data model

• Atom, e.g., ‘alice’• Tuple, e.g., (‘alice’, ‘lakers’)• Bag, e.g.,

{ (‘alice’, ‘lakers’), (‘alice’, (‘iPod’, ‘apple’)) }

• Map, e.g.,[ ‘fan of’ { (‘lakers’), (‘iPod’) }, ‘age’ 20 ]

Page 33: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 33

Expressions

two tuples!

Page 34: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 34

Reading input

queries = LOAD ‘query_log.txt’USING myLoad()AS (userId, queryString,

timestamp);schema

custom deserializer

input file

handle

Page 35: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 35

For each

expandedQueries =FOREACH queriesGENERATE userId, expandQuery(queryString);

• Each tuple is processed independently good for parallelism

• Can flatten output to remove one level of nesting:expandedQueries = FOREACH queries

GENERATE userId, FLATTEN(expandQuery(queryString));

Page 36: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 36

For each

Page 37: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 37

Flattening example

x a b c

y = FOREACH x GENERATE a, FLATTEN(b), c;

(a1,{(b1, b2), (b3, b4), (b5)},{(c1), (c2)})

(a2,{(b6, (b7, b8))}, {(c3), (c4)})

Page 38: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 38

Flattening example

x a b c

y = FOREACH x GENERATE a, FLATTEN(b), c;

(a1,{(b1, b2), (b3, b4), (b5)},{(c1), (c2)})

(a2,{(b6, (b7, b8))}, {(c3), (c4)})

(a1, b1, b2, {(c1), (c2)})(a1, b3, b4, {(c1), (c2)})(a1, b5, ? {(c1), (c2)})(a2,b6, (b7, b8),{(c3), (c4)})

Page 39: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 39

Flattening example

• Also flattening c (in addition to b ) yields:(a1, b1, b2, c1)(a1, b1, b2, c2)(a1, b3, b4, c1)(a1, b3, b4, c2)…

Page 40: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 40

Filter

realQueries = FILTER queries BY userId NEQ ‘bot’;

realQueries = FILTER queriesBY NOT isBot(userId);

Page 41: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 41

Co-group

• Two input tables:– results(queryString, url, position)– revenue(queryString, adSlot, amount)resultsWithRevenue =

COGROUP results BY queryString,revenue BY queryString;

revenues = FOREACH resultsWithRevenue GENERATEFLATTEN(distributeRevenue(results, revenue));

• More flexible than SQL joins

Page 42: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 42

Co-group

resultsWithRevenue: (queryString, results, revenue)

Page 43: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 43

Group

• Simplified co-group (single input)groupedRevenue = GROUP revenue BY

queryString;queryRevenues = FOREACH groupedRevenue

GENERATE queryString,SUM(revenue.amount) AS total;

Page 44: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 44

Co-group example 1

x a b c y a b d

s = GROUP x BY a;

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

(1, 1, d1)(1, 2, d2)(2, 1, d3)(2, 2, d4)

Page 45: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 45

Co-group example 1

x a b c y a b d

s = GROUP x BY a;

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

(1, 1, d1)(1, 2, d2)(2, 1, d3)(2, 2, d4)

(1, {(1, 1, c1), (1, 1, c2)})(2, {(2, 2, c3), (2, 2, c4)})

s a x

Page 46: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 46

Group and flatten

s = GROUP x BY a;

(1, {(1, 1, c1), (1, 1, c2)})(2, {(2, 2, c3), (2, 2, c4)})

s a x

z = FOREACH s GENERATE FLATTEN(x);

z a b c

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

Page 47: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 47

Co-group example 2

x a b c y a b d

t = GROUP x BY (a, b);

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

(1, 1, d1)(1, 2, d2)(2, 1, d3)(2, 2, d4)

Page 48: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 48

Co-group example 2

x a b c y a b d

t = GROUP x BY (a, b);

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

(1, 1, d1)(1, 2, d2)(2, 1, d3)(2, 2, d4)

((1, 1), {(1, 1, c1), (1, 1, c2)})((2, 2), {(2, 2, c3), (2, 2, c4)})

t a/b? x

Page 49: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 49

Co-group example 3

x a b c y a b d

u = COGROUP x BY a, y BY a;

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

(1, 1, d1)(1, 2, d2)(2, 1, d3)(2, 2, d4)

Page 50: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 50

Co-group example 3

x a b c y a b d

u = COGROUP x BY a, y BY a;

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

(1, 1, d1)(1, 2, d2)(2, 1, d3)(2, 2, d4)

(1, {(1, 1, c1), (1, 1, c2)}, {(1, 1, d1), (1, 2, d2)})(2, {(2, 2, c3), (2, 2, c4)}, {(2, 1, d3), (2, 2, d4)})

u a x y

Page 51: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 51

Co-group example 4

x a b c y a b d

v = COGROUP x BY a, y BY b;

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

(1, 1, d1)(1, 2, d2)(2, 1, d3)(2, 2, d4)

Page 52: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 52

Co-group example 4

x a b c y a b d

v = COGROUP x BY a, y BY b;

(1, 1, c1)(1, 1, c2)(2, 2, c3)(2, 2, c4)

(1, 1, d1)(1, 2, d2)(2, 1, d3)(2, 2, d4)

(1, {(1, 1, c1), (1, 1, c2)}, {(1, 1, d1), (2, 1, d3)})(2, {(2, 2, c3), (2, 2, c4)}, {(1, 2, d2), (2, 2, d4)})

v a/b? x y

Page 53: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 53

Join

• Syntax:joinedResults = JOIN results BY queryString,

revenue BY queryString;

• Shorthand for:temp = COGROUP results BY queryString,

revenue BY queryString;joinedResults = FOREACH temp GENERATE

FLATTEN(results), FLATTEN(revenue);

Page 54: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 54

MapReduce in Pig Latin

mapResult = FOREACH input GENERATEFLATTEN(map(*));

keyGroups = GROUP mapResult BY $0;output = FOREACH keyGroups

GENERATE reduce(*);

Page 55: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 55

Storing output

STORE queryRevenues INTO ‘output.txt’USING myStore();

custom serializer

Page 56: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 56

Pig on Top of MapReduce

• Pig Latin program can be “compiled” into a sequence of mapreductions

• Load, for each, filter: can be implemented as map functions

• Group, store: can be implemented as reduce functions (given proper intermediate data)

• Cogroup and join: special map functions that handle multiple inputs split using the same hash function

• Depending on sequence of operations, include identity mapper and reducer phases as needed

Page 57: Hector Garcia-Molina Zoltan Gyongyi

Hive & HiveQL

• Data warehouse on top of Hadoop– Hive is the system– HiveQL is the language

Fully declarative, SQL-like Most SQL features present Supports custom mapreduce scripts

– MetaStore system catalog Table schemas and statistics Also for keeping track of underlying distributed

file structure

CS 347 MapReduce 57

Page 58: Hector Garcia-Molina Zoltan Gyongyi

HiveQL Features

• Data model: relations with cells containing– Atoms– Lists, maps, and structs that may be nested

• Table creation

– Default serializers and deserializes– Incorporate “external” data using SerDe Java

interfaceCS 347 MapReduce 58

CREATE TABLE t( x string, y list<map<struct<a: string, b:int>>>)

sample expression:t.y[3][‘cat’].a

Page 59: Hector Garcia-Molina Zoltan Gyongyi

HiveQL Features

• Table updates– UPDATE and DELETE not supported– INSERT overwrites entire table

INSERT OVERWRITE t SELECT * FROM s

• Joins– Only equality-based SQL joins

Equijoin, Cartesian product, left/right/full outer join

– Explicit syntaxSELECT t.a AS x, s.b AS yFROM t JOIN s ON (t.a = s.b)

CS 347 MapReduce 59

Page 60: Hector Garcia-Molina Zoltan Gyongyi

HiveQL Features

• MapReduce scripts– Word count example:

FROM ( FROM docs MAP text USING ‘python wc_map.py’ AS (word,

count) CLUSTER BY word) tempREDUCE word, count USING `python wc_reduce.py’

– May have SELECT instead of MAP or REDUCE Order of FROM and SELECT/MAP/REDUCE keywords

is interchangeable

CS 347 MapReduce 60

Page 61: Hector Garcia-Molina Zoltan Gyongyi

Hive Query Processing

1. Parsing: query abstract syntax tree (AST)2. Type checking and semantic analysis: AST

query block tree (QBT)3. Optimization: QBT optimized operator DAG

– Map operators: TableScan, Filter, ReduceSink– Reduce operators: GroupBy, Join, Select, FileSink– Extensible optimization logic (set of heuristics)

through Transform Java interface– No explicit notion of cost or search of plan space

4. Generation of physical plan: operator DAG Hadoop mapreduce sequence

CS 347 MapReduce 61

Page 62: Hector Garcia-Molina Zoltan Gyongyi

Optimization heuristics

• Column pruning: add projections to remove unneeded columns

• Partition pruning: eliminate unneeded file partitions (splits)

• Predicate pushdown: early filtering of input records

• Map-side joins: hash-join in mapper if one table is small– Triggered explicitly by HiveQL hint

SELECT /*+ MAPJOIN(t) */ t.a, s.b …

CS 347 MapReduce 62

Page 63: Hector Garcia-Molina Zoltan Gyongyi

Sawzall

• Procedural scripting language and interpreter on top of MapReduce

• Simplifies the formulation of one mapreduction– Record-oriented processing

• Word count example:

CS 347 MapReduce 63

wc_table: table sum[word: string] of count: int;most_freq: table top(100) of word: string;

words: array of string = tokenize(input);for (i: int = 0; i < len(words); i++) { emit wc_table[words[i]] 1; emit most_freq words[i];}

Page 64: Hector Garcia-Molina Zoltan Gyongyi

Sawzall

• Mapper executes script body for each input record

• Reducer generates table outputs by aggregating data emitted by mapper– Table (aggregation) types

sum, maximum collection: bag of values unique(n): set of values (of max size n for efficiency) sample(n): random sample of size n top(n): n most frequent values quantile(n): quantile thresholds (e.g., percentile for

n=100)

CS 347 MapReduce 64

Page 65: Hector Garcia-Molina Zoltan Gyongyi

Comparison

Sawzall Pig Hive

Language ProceduralSemi-declarative

Declarative

Schemas Yes* Yes (implicit) Yes (explicit)

Nesting Containers Containers Full

User-defined functions

No Yes (Java) Yes

Custom serialization/deserialization

No Yes Yes

Joins No Yes+ Yes (equality)

MapReduce steps

Single Multiple Multiple

CS 347 MapReduce 65

* Through protocol buffers, i.e., complex data type declaration

Page 66: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 66

References

• MapReduce: Simplified Data Processing on Large Clusters (Dean and Ghemawat)http://labs.google.com/papers/mapreduce.html

• Pig Latin: A Not-so-foreign Language for Data Processing (Olston et al.)http://wiki.apache.org/pig/

• Hive: A Petabyte Scale Data Warehouse Using Hadoop (Thusoo et al.)http://i.stanford.edu/~ragho/hive-icde2010.pdf

• Interpreting the Data: Parallel Analysis with Sawzall(Pike et al.)http://labs.google.com/papers/sawzall.html

Page 67: Hector Garcia-Molina Zoltan Gyongyi

CS 347 MapReduce 67

Summary

• MapReduce– Two phases: map and reduce– Transparent distribution, fault tolerance,

and scaling

• Sawzall, Pig, and Hive– Various layers on top of MapReduce– Procedural, semi-declarative, and

declarative “query” languages