CX4242: Scaling Up Pig - Visualization · 5.Pig Latin allows developers to insert their own code...

Post on 03-Aug-2020

4 views 0 download

Transcript of CX4242: Scaling Up Pig - Visualization · 5.Pig Latin allows developers to insert their own code...

CX4242:

Scaling Up

Pig

Mahdi Roozbahani

Lecturer, Computational Science and

Engineering, Georgia Tech

Pig

High-level language

• instead of writing low-level map and reduce functions

Easier to program, understand and maintain

Created at Yahoo!

Produces sequences of Map-Reduce programs

(Lets you do “joins” much more easily)

http://pig.apache.org

2

Pig

Your data analysis task becomes a data flow

sequence (i.e., data transformations)

Input ➡ data flow ➡ output

You specify data flow in Pig Latin (Pig’s

language). Then, Pig turns the data flow into a

sequence of MapReduce jobs automatically!

http://pig.apache.org

3

Pig: 1st Benefit

Write only a few lines of Pig Latin

Typically, MapReduce development cycle is long

• Write mappers and reducers

• Compile code

• Submit jobs

• ...

4

Pig: 2nd Benefit

Pig can perform a sample run on representative

subset of your input data automatically!

Helps debug your code in smaller scale (much

faster!), before applying on full data

5

What Pig is good for?

Batch processing

• Since it’s built on top of MapReduce

• Not for random query/read/write

May be slower than MapReduce programs coded

from scratch

• You trade ease of use + coding time for

some execution speed

6

How to run Pig

Pig is a client-side application

(run on your computer)

Nothing to install on Hadoop cluster

7

How to run Pig: 2 modesLocal Mode

• Run on your computer (e.g., laptop)

• Great for trying out Pig on small datasets

MapReduce Mode

• Pig translates your commands into MapReduce jobs

• Remember you can have a single-machine cluster

set up on your computer

Difference between PIG local and mapreduce mode: http://stackoverflow.com/questions/11669394/difference

8

Pig program: 3 ways to write

Script

Grunt (interactive shell)

• Great for debugging

Embedded (into Java program)

• Use PigServer class (like JDBC for SQL)

• Use PigRunner to access Grunt

9

Grunt (interactive shell)

Provides code completion

Press Tab key to complete Pig Latin keywords

and functions

Let’s see an example Pig program run with Grunt

• Find highest temperature by year

10

Example Pig program

Find highest temperature by year

records = LOAD 'input/ ncdc/ micro-tab/ sample.txt'

AS (year:chararray, temperature:int, quality:int);

filtered_records =

FILTER records BY temperature != 9999

AND (quality = = 0 OR quality = = 1 OR

quality = = 4 OR quality = = 5 OR

quality = = 9);

grouped_records = GROUP filtered_records BY year;

max_temp = FOREACH grouped_records GENERATE

group, MAX(filtered_records.temperature);

DUMP max_temp;

11

Example Pig program

Find highest temperature by year

grunt>

records = LOAD 'input/ncdc/micro-tab/sample.txt'

AS (year:chararray, temperature:int, quality:int);

grunt> DUMP records;

grunt> DESCRIBE records;

records: {year: chararray, temperature: int, quality: int}

(1950,0,1)

(1950,22,1)

(1950,-11,1)

(1949,111,1)

(1949,78,1)

called a “tuple”

12

Example Pig program

Find highest temperature by year

grunt>

filtered_records =

FILTER records BY temperature != 9999

AND (quality == 0 OR quality == 1 OR

quality == 4 OR quality == 5 OR

quality == 9);

grunt> DUMP filtered_records;(1950,0,1)

(1950,22,1)

(1950,-11,1)

(1949,111,1)

(1949,78,1)

In this example, no tuple is filtered out

13

Example Pig program

Find highest temperature by year

grunt> grouped_records = GROUP filtered_records BY year;

grunt> DUMP grouped_records;

grunt> DESCRIBE grouped_records;

(1949,{(1949,111,1), (1949,78,1)})

(1950,{(1950,0,1),(1950,22,1),(1950,-11,1)})

called a “bag”

= unordered collection of tuples

grouped_records: {group: chararray, filtered_records:

{year: chararray, temperature: int, quality: int}}

alias that Pig created

14

Example Pig program

Find highest temperature by year

grunt> max_temp = FOREACH grouped_records GENERATE

group, MAX(filtered_records.temperature);

grunt> DUMP max_temp;

(1949,{(1949,111,1), (1949,78,1)})

(1950,{(1950,0,1),(1950,22,1),(1950,-11,1)})

grouped_records: {group: chararray, filtered_records: {year:

chararray, temperature: int, quality: int}}

(1949,111)

(1950,22)

15

Run Pig program on a subset of your data

You saw an example run on a tiny dataset

How to do that for a larger dataset?

• Use the ILLUSTRATE command to

generate sample dataset

16

Run Pig program on a subset of your data

grunt> ILLUSTRATE max_temp;

17

How does Pig compare to SQL?

SQL: “fixed” schema

PIG: loosely defined schema, as in

records = LOAD 'input/ncdc/micro-tab/sample.txt'

AS (year:chararray, temperature:int, quality:int);

19

How does Pig compare to SQL?

SQL: supports fast, random access

(e.g., <10ms, but of course depends on

hardware, data size, and query complexity too)

PIG: batch processing

20

Pig vs SQL

http://yahoohadoop.tumblr.com/post/98294444546/comparing-pig-latin-and-sql-for-constructing-data

1. Pig Latin is procedural, where SQL is declarative.

2. Pig Latin allows pipeline developers to decide where

to checkpoint data in the pipeline.

3. Pig Latin allows the developer to select specific

operator implementations directly rather than relying on

the optimizer.

4. Pig Latin supports splits in the pipeline.

5. Pig Latin allows developers to insert their own code

almost anywhere in the data pipeline.

21

Much more to learn about PigRelational Operators, Diagnostic Operators (e.g., describe,

explain, illustrate), utility commands (cat, cd, kill, exec), etc.

22