34
HIVE Data Warehousing & Analytics on Hadoop Ashish Thusoo, Facebook Data Team

Hive Apachecon 2008

  • Upload
    athusoo

  • View
    16.115

  • Download
    0

Embed Size (px)

DESCRIPTION

Summary:Presentation of Hive in the Hadoop Camp at ApacheCon 2008, New Oreleans, LAPresented By: Ashish Thusoo,Facebook Data Infrastructure Team

Citation preview

Page 1: Hive Apachecon 2008

HIVE

Data Warehousing & Analytics on Hadoop

Ashish Thusoo,Facebook Data Team

Page 2: Hive Apachecon 2008

Why Another Data Warehousing System?

Problem: Data, data and more data– 200GB per day in March 2008 – 2+TB(compressed) raw data per day today

The Hadoop Experiment– Superior to availability/scalability/manageability of commercial DBs– Efficiency not that great, but throw more hardware– Partial Availability/resilience/scale more important than ACID

Problem: Programmability and Metadata– Map-reduce hard to program (users know sql/bash/python)– Need to publish data in well known schemas

Solution: HIVE

Page 3: Hive Apachecon 2008

What is HIVE?

A system for managing and querying structured data built on top of Hadoop– Uses Map-Reduce for execution– HDFS for storage– Extensible to other Data Repositories

Key Building Principles:– SQL on structured data as a familiar data warehousing tool– Extensibility (Pluggable map/reduce scripts in the language

of your choice, Rich and User Defined data types, User Defined Functions)

– Interoperability (Extensible framework to support different file and data formats)

– Performance

Page 4: Hive Apachecon 2008

Hive/Hadoop Usage @ Facebook

Types of Applications:– Summarization

Eg: Daily/Weekly aggregations of impression/click counts Complex measures of user engagement

– Ad hoc Analysis Eg: how many group admins broken down by state/country

– Data Mining (Assembling training data) Eg: User Engagement as a function of user attributes

– Spam Detection Anomalous patterns for Site Integrity Application API usage patterns

– Ad Optimization– Too many to count ..

Page 5: Hive Apachecon 2008

Data Warehousing at Facebook Today

Web Servers Scribe Servers

Filers

Hive on Hadoop ClusterOracle RAC Federated MySQL

Page 6: Hive Apachecon 2008

HIVE: Components

HDFS

Hive CLIDDL QueriesBrowsing

Map Reduce

MetaStore

Thrift API

SerDeThrift Jute JSON..

Execution

Hive QL

Parser

Planner

Web U

I

Page 7: Hive Apachecon 2008

Data Model

Logical Partitioning

Hash Partitioning

Schema

Library

clicks

HDFS MetaStore

/hive/clicks/hive/clicks/ds=2008-03-25

/hive/clicks/ds=2008-03-25/0

Tables

#Buckets=32Bucketing InfoPartitioning Cols

Page 8: Hive Apachecon 2008

MetaStore

Stores Table/Partition properties:– Table schema and SerDe library– Table Location on HDFS– Logical Partitioning keys and types– Partition level metadata– Other information

Thrift API– Current clients in Php (Web Interface), Python interface to

Hive, Java (Query Engine and CLI) Metadata stored in any SQL backend or an

Embedded Derby Database Future

– Statistics– Schema Evolution

Page 9: Hive Apachecon 2008

Hive Query Language

Basic SQL– From clause subquery– ANSI JOIN (equi-join only)– Multi-table Insert– Multi group-by– Sampling– Objects traversal

Extensibility– Pluggable Map-reduce scripts in the language of your choice

using TRANSFORM (Syntax changing soon!!)– Pluggable User Defined Functions– Pluggable User Defined Types– Pluggable SerDes to read different kinds of Data Formats

Page 10: Hive Apachecon 2008

Machine 2

Machine 1

<k1, v1><k2, v2><k3, v3>

<k4, v4><k5, v5><k6, v6>

(Simplified) Map Reduce Review

<nk1, nv1><nk2, nv2><nk3, nv3>

<nk2, nv4><nk2, nv5><nk1, nv6>

LocalMap

<nk2, nv4><nk2, nv5><nk2, nv2>

<nk1, nv1><nk3, nv3><nk1, nv6>

GlobalShuffle

<nk1, nv1><nk1, nv6><nk3, nv3>

<nk2, nv4><nk2, nv5><nk2, nv2>

LocalSort

<nk2, 3>

<nk1, 2><nk3, 1>

LocalReduce

Page 11: Hive Apachecon 2008

Hive QL – Join

• SQL:INSERT INTO TABLE pv_usersSELECT pv.pageid, u.ageFROM page_view pv JOIN user u ON (pv.userid = u.userid);

pageid

userid

time

1 111 9:08:01

2 111 9:08:13

1 222 9:08:14

userid

age gender

111 25 female

222 32 male

pageid

age

1 25

2 25

1 32

X =

page_viewuser

pv_users

Page 12: Hive Apachecon 2008

Hive QL – Join in Map Reduce

key value

111 <1,1>

111 <1,2>

222 <1,1>

pageid

userid

time

1 111 9:08:01

2 111 9:08:13

1 222 9:08:14useri

dage gende

r

111 25 female

222 32 male

page_view

user

key value

111 <2,25>

222 <2,32>

Map

key value

111 <1,1>

111 <1,2>

111 <2,25>

key value

222 <1,1>

222 <2,32>

ShuffleSort

Pageid age

1 25

2 25

pageid

age

1 32

Reduce

Page 13: Hive Apachecon 2008

Joins

• Outer JoinsINSERT INTO TABLE pv_users SELECT pv.*, u.gender, u.age

FROM page_view pv FULL OUTER JOIN user u ON (pv.userid = u.id)

WHERE pv.date = 2008-03-03;

Page 14: Hive Apachecon 2008

Join To Map Reduce

Only Equality Joins with conjunctions supported Performance Improvements being Worked On

– Pruning of values send from map to reduce on the basis of projections

– Make Cartesian product more memory efficient– Map side joins

Hash Joins if one of the tables is very small Use Semi Joins (proposed by Jun Rao et. al. @ IBM) Exploit pre-sorted data by doing map-side merge join

Estimate number of reducers– Hard to measure effect of filters– Run map side for small part of input to estimate #reducers

Page 15: Hive Apachecon 2008

Joining multiple tables in a single Map Reduce

SQL:– SELECT… FROM a join b on (a.key = b.key) join c on (a.key =

c.key)

key

av bv

1 111

222

key av

1 111

A

Map Reducekey bv

1 222

B

key cv

1 333

C

AB

Map Reducekey

av bv cv

1 111

222 333

ABC

Page 16: Hive Apachecon 2008

Hive QL – Group By

SELECT pageid, age, count(1)FROM pv_usersGROUP BY pageid, age;

pageid

age

1 25

2 25

1 32

2 25

pv_users

pageid

age count

1 25 1

2 25 2

1 32 1

Page 17: Hive Apachecon 2008

Hive QL – Group By in Map Reduce

pageid

age

1 25

2 25

pv_users

pageid

age count

1 25 1

1 32 1

pageid

age

1 32

2 25

Map

key value

<1,25>

1

<2,25>

1

key value

<1,32>

1

<2,25>

1

key value

<1,25>

1

<1,32>

1

key value

<2,25>

1

<2,25>

1

ShuffleSort

pageid

age count

2 25 2

Reduce

Page 18: Hive Apachecon 2008

Hive QL – Group By with Distinct

SELECT pageid, COUNT(DISTINCT userid)FROM page_view GROUP BY pageid

pageid

userid

time

1 111 9:08:01

2 111 9:08:13

1 222 9:08:14

2 111 9:08:20

page_view

pageid count_distinct_userid

1 2

2 1

Page 19: Hive Apachecon 2008

Hive QL – Group By with Distinct in Map Reduce

page_view

pageid

count

1 1

2 1ShuffleandSort

pageid

count

1 1

Reduce

pageid

userid

time

1 111 9:08:01

2 111 9:08:13

pageid

userid

time

1 222 9:08:14

2 111 9:08:20

key v

<1,111>

<2,111>

<2,111>key v

<1,222>

MapReduce

Page 20: Hive Apachecon 2008

Group by Optimizations

Map side partial aggregations– Hash Based aggregates– Serialized key/values in hash tables

Optimizations being Worked On:– Exploit pre-sorted data for distinct counts– Partial aggregations and Combiners– Be smarter about how to avoid multiple stage– Exploit table/column statistics for deciding strategy

Page 21: Hive Apachecon 2008

Inserts into Files, Tables and Local Files

FROM pv_users INSERT INTO TABLE pv_gender_sum

SELECT pv_users.gender, count_distinct(pv_users.userid)

GROUP BY(pv_users.gender) INSERT INTO DIRECTORY

‘/user/facebook/tmp/pv_age_sum.dir’ SELECT pv_users.age, count_distinct(pv_users.userid) GROUP BY(pv_users.age)

INSERT INTO LOCAL DIRECTORY ‘/home/me/pv_age_sum.dir’ FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY \013

SELECT pv_users.age, count_distinct(pv_users.userid) GROUP BY(pv_users.age);

Page 22: Hive Apachecon 2008

Extensibility - Custom Map/Reduce Scripts

FROM ( FROM pv_users SELECT TRANSFORM(pv_users.userid, pv_users.date)

USING 'map_script' AS(dt, uid) CLUSTER BY(dt)) map

INSERT INTO TABLE pv_users_reduced SELECT TRANSFORM(map.dt, map.uid) USING

'reduce_script' AS (date, count);

Custom ‘map_script’ in map side TRANSFORM

Custom ‘reduce_script’ in reduce side TRANSFORM

Key dt between map and reduce using CLUSTER BY

Page 23: Hive Apachecon 2008

Extensibility – User Defined Functions

interface UDF

class com.example.myUDF

implements UDF

myUDF.jar

hive.aux.jars

CREATE TEMPORARY FUNCTIONmyudf AS ‘com.example.myUDF’;

SELECT myudf(t.c1)FROM t;

drop in the jar

register udf

use udf

use udf

Page 24: Hive Apachecon 2008

Extensibility- User Defined Data Formats

101010….

interface serde2.DeSerialize

classcom.example.myDeSerializerextends serde2.DeSerialize

interface serde2.Serialize

classcom.example.mySerializerextends serde2.Serialize

RowObject

hive.aux.jarsplug & play

myExtensions.jar

ObjectInspector

Page 25: Hive Apachecon 2008

Extensibility – User Defined Types

struct { map<string, smallint> f11; struct { list<double> f21; int f22; } f12;}

new StandardStructObjectInspector

f11:

f12: new StandardStructObjectInspector

f21:

f22: PrimitiveObjectInspector(int)

new StandardMapObjectInspector

key:PrimitiveObjectInspector(string)

val: PrimitiveObjectInspector(smallint)

new StandardListObjectInspector

elem:PrimitiveObjectInspector(double)

hive.aux.jarsmyExtensions.jar

drop in the jar

Page 26: Hive Apachecon 2008

Extensibility- Reading Rich Data

Create the table:

CREATE TABLE tab

ROW FORMAT SERDE ‘com.example.mySerDe’

WITH SERDEPROPERTIES(…);

Use the table:

SELECT tab.f11[‘abc’], tab.f12.f21[size(tab.f12.f21)]

FROM tab;

Page 27: Hive Apachecon 2008

Extensibility- Reading Rich Data

Easy to write a SerDe for old data stored in your own format– You can write your own SerDe (XML, JSON …)

Existing SerDe families– Thrift DDL based SerDe

– Delimited text based SerDe

– Dynamic SerDe to read data with delimited maps, lists and primitive types

Page 28: Hive Apachecon 2008

Interoperability – External Tables

Data already in hdfs Use External Tables to associate metadata with

existing hdfs data

CREATE EXTERNAL TABLE page_view_stg(viewTime INT, userid BIGINT,

page_url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the

User', country STRING)

COMMENT 'This is the staging page view table' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054' LINES TERMINATED BY

'\012' STORED AS TEXTFILE LOCATION '/data/page_view';

Page 29: Hive Apachecon 2008

Interoperability – JDBC driver

A simple JDBC driver being worked on Allows other applications to interoperate – primarily

BI tools in facebook

ExternalApplication

(e.g. BI)

HiveJDBC Driver

MetaStore

NameNode

JobTracker

Hadoop Cluster

Page 30: Hive Apachecon 2008

Evolving Open Source Community

Apart from Facebook some other contributions coming in from external developers:– DDL for Session Level User Defined Functions (Tom White)– JDBC driver (Michi and Raghu @stanford)– Web UI (Edward Capriolo)– CLI bug fixes (Jeremy Huylebroeck)

Still early days and still evolving

Page 31: Hive Apachecon 2008

Future Work – Longer Term

Cost-based optimization Multiple interfaces (JDBC…)/Integration with BI Performance Improvements and Smarter Plans More SQL Constructs (order by, having clause…) Data Compression

– Columnar storage schemes – Exploit lazy/functional Hive field retrieval interfaces

Better data locality– Co-locate hash partitions on same rack– Exploit high intra-rack bandwidth for merge joins

Advanced operators– Cubes/Frequent Item Sets/Window Functions

Page 32: Hive Apachecon 2008

Information

Available as a contrib project in hadoop- http://svn.apache.org/repos/asf/hadoop/core/- Checkout src/contrib/hive from 0.19 onwards- Soon to be made a Sub Project so this will change!!

Temporarily Latest distributions (including for hadoop-0.17) at:http://mirror.facebook.com/facebook/hive/

Mailing Lists: – Temporarily: [email protected]– Moving to: hive-{user,dev,commits}@hadoop.apache.org

Page 33: Hive Apachecon 2008

Most Importantly – People @fb

Contributors to Hive– Suresh Anthony– Zheng Shao– Prasad Chakka– Pete Wyckoff– Namit Jain– Raghu Murthy– Joydeep Sen Sarma– Ashish Thusoo

Contributors to HiPal(FBs Internal Web Interface to Hive)– Hao Liu– Zheng Shao– David Wei

Credits– Dhruba Borthakur– Jeff Hammerbacher

Page 34: Hive Apachecon 2008

Questions?