pig ve hive ile hadoop Üzerinde veri analizi v2

44
Pig ve Hive ile Veri Analizi 11.12.13 v2.1

Upload: hakan-ilter

Post on 13-Jul-2015

1.762 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Pig ve Hive ile Veri Analizi

11.12.13v2.1

Page 2: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Gündem

● Gitti Gidiyor

● Pig

● Hive

● Karşılaştırma

● Diğer Araçlar

Page 3: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Hakkımda

● Marmara Üni. Elektronik

● Gitti Gidiyor / eBay

● 13+ Yazılım

● 4+ Yöneticilik

● Java, C, C++, C#

● Linux!

● Search, Big Data, NoSQL

Hakan İlterSoftware Development Supervisor

[email protected]: hailter

http://tr.linkedin.com/in/hakanilter/http://devveri.com

Page 4: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

DevVeri.com

Page 5: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Rakamlarla Gitti Gidiyor

226MSayfa

Gösterimi

22MZiyaret

12MTekil Kullanıcı

7MKayıtlı

Kullanıcı

5.3MAktif Ürün

30MResim

300KMobil İndirme

2GBGünlük Log

Page 6: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Gitti Gidiyor Hadoop

● Arama motoru○ Akıllı Sıralama, İlgili Aramalar, Otomatik

Tamamlama, Bunu mu demek istediniz?

● Kişiselleştirme ○ Web, Mobil, Email vs

● Pazarlama (özel kampanyalar)● Segmentasyon● Raporlama● A/B Testleri

Page 7: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Gitti Gidiyor Hadoop

Nokia kelimesiyle daha ilgili olduğu için Cep telefonu kategorisi daha üstte yer alıyor

İlgili diğer aramalar

Nokkia aratılmış ama Nokia olarak düzeltilmiş

Page 8: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Gitti Gidiyor Hadoop "Metallica" ile ilgili diğer aramalar

Mobil uygulama ana sayfada kişiselleştirilmiş ürün gösterimi

Otomatik tamamlama verisi

Page 9: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Neler Yapılabilir?

● Datawarehouse● Gerçek Zamanlı Raporlama● Otomatik Katalog Seçimi● Öneri Sistemi

○ recommendation

● Sahtecilik Önleme ○ classification

● Segmentasyon○ clustering

Page 10: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Java ve MapReduce

Page 11: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Java ve MapReduce

● Büyük verilerin analizi için uygun fakat;

○ Geliştirmesi zor!

○ Düşük seviyeli (assembly gibi)

○ Hata yapmaya açık

○ Herkes Java geliştirmiyor

● Çözüm, daha yüksek seviyeli araçlar

○ Pig

○ Hive

Page 12: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Pig

Apache Pig, Hadoop üzerindeki büyük verileri işlemek için geliştirilmiş, Pig Latin olarak isimlendirilen yüksek seviyeli bir dile sahip veri işleme aracıdır.

Page 13: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

WordCount.pig

-- hdfs://host/users/user/data.txt dosyasini yukle

input = load 'data.txt' as (line);

-- TOKENIZE ile her satirdaki verileri kelimelerine ayir

-- flatten ile her bir kelimeyi bir satira donustur

words = foreach input generate flatten(TOKENIZE(line)) as word;

-- kelimeleri grupla ve say

grpd = group words by word;

cntd = foreach grpd generate group, COUNT(words);

-- ekrana bas

dump cntd;

Page 14: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Pig Özellikleri

● Map Reduce yazımını kolaylaştırır

● Basit dil, yeniden kullanılabilirlik

● Standart dosya formatlarını destekler ○ text, json, sequence, binary, avro…

● Esnek veri modeli○ Basit tipler: int, long, float, double …○ Kompleks tipler: Map, Tuple, Bag

● SQL benzeri ifadeler kullanılır○ Filtreleme, Gruplama, Sıralama ...

Page 15: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Formatlar

● Her türlü format işlenebilir-- tab ile ayrilmis dosya

tsv = load 'data.tsv' as (id, name, email);

-- virgul ile ayrilmis dosya

csv = load 'data.csv'

using PigStorage(',') as (id, name, email);

-- hcatalog uzerindeki tablo

table = load 'tablename'

using org.apache.hcatalog.pig.HCatLoader();

-- hbase uzerindeki tablo

col = load 'hbase://SomeTableName' using

org.apache.pig.backend.hadoop.hbase.HBaseStorage(.....)

Page 16: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Şema Kullanımı

● Şema zorunlu değildirA = load 'data';

B = filter A by $1 > 100;

● Mevcut şemayı destekler○ Tip kontrolü ve optimizasyonda kullanılır

A = load 'data' as (customer:int, purchase:double);

B = filter A by purchase > 100;

Page 17: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

İfadeler

● load● store ● dump● foreach● filter● group/cogroup● join

● cross● order● distinct● union● split● limit● stream

Page 18: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

İfadelere Örnek

● GroupA = load 'student' as (name:chararray, age:int, gpa:float);

B = group A by age;

C = foreach B generate age, COUNT($0);

● JoinA1 = load 'products.csv' as (productId, productName);

A2 = load 'companies.csv' as (productId, companyName);

J = join A1 by productId, A2 BY productId;

R = foreach J generate $0, $1, $3;

Page 19: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

UDF

● Java ve Python ile kullanıcı tanımlı fonksiyonlar yazılabilir

package myudfs;

public class UPPER extends EvalFunc<String> {

public String exec(Tuple input) throws IOException {

if (input == null || input.size() == 0)

return null;

String str = (String) input.get(0);

return str.toUpperCase();

}

}

Page 20: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

UDF

● Register edilen jar içerisinden fonksiyonlar çağırılabilirregister myudfs.jar;

A = load 'student_data' as (name: chararray, age: int, gpa:

float);

B = foreach A generate myudfs.UPPER(name);

dump B;

● Loader ve Storage sınıfları da yazılabilirhttps://github.com/hakanilter/querystring-pig-loader/

● Piggybank

Page 21: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Pig Nasıl Çalıştırılır?

● Local/MapReduce

● Konsol○ grunt>

● Script○ pig -f helloworld.pig

● Programatik ○ Java ile JDBC benzeri bir arayüzle

● Hue○ Web arayüzünden

Page 22: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Pig Avantajları

● Pig kodları MapReduce kodlarına çevrilir

● Güçlü dil, ifadeler, fonksiyonlar, UDF

● Ölçeklenebilirlik ve Performans

● SQL benzeri, SQL’den daha anlaşılır

● Şema zorunlu değildir

● Yapılandırılmamış veriye çok uygun

● ETL işleri için kullanılabilir

Page 23: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Hive

Apache Hive, SQL yardımıyla Hadoop üzerinde sorgulama ve Veri Ambarı uygulamaları geliştirmeyi sağlayan bir araçtır.

Page 24: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

WordCount.sql

/* docs tablosunu yarat */

CREATE TABLE docs (line STRING);

/* docs dosyasini docs tablosu icerisine aktar */

LOAD DATA INPATH 'docs' OVERWRITE INTO TABLE docs;

/* kelimeleri sayarak yeni bir tablo olustur */

CREATE TABLE word_counts AS

SELECT word, count(1) AS count FROM

(SELECT explode(split(line, '\s')) AS word FROM docs) w

GROUP BY word

ORDER BY word;

Page 25: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Hive Özellikleri

● SQL ile MapReduce yazılmasını sağlar

● SQL-92 standartlarına yakın

● Veriler HDFS üzerinde saklanır

● Dosyalar tablo olarak tanımlanır

● UPDATE ve DELETE desteklemez!

● Metadata yönetimi

Page 26: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Hive Özellikleri

● Standart dosya formatlarını destekler ○ text, json, sequence, binary, avro…

● Karmaşık veri tiplerini de destekler○ struct, array, map

● Partitioning, Bucketing

● TRANSFORM

● UDF, SerDe

Page 27: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Tablo Tanımlama

CREATE TABLE employees (

name STRING,

salary FLOAT,

subordinates ARRAY<STRING>,

deductions MAP<STRING, FLOAT>,

address STRUCT<street:STRING, city:STRING,

state:STRING, zip:INT>

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\001'

COLLECTION ITEMS TERMINATED BY '\002'

MAP KEYS TERMINATED BY '\003'

LINES TERMINATED BY '\n'

STORED AS TEXTFILE;

Page 28: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

● LOAD DATA komutu○ HDFS üzerindeki dosyalar içeri aktarılır

LOAD DATA INPATH 'data.csv' INTO TABLE employees;

○ Lokal diskteki veriler de aktarılabilir

LOAD DATA LOCAL INPATH '/path/data.csv' OVERWRITE INTO TABLE employees;

● External table○ Belirli dizindeki dosyaların kullanımı

CREATE TABLE customers (id INT, email STRING) STORED AS TEXTFILE LOCATION '/home/admin/userdata';

Veri Girişi

Page 29: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Sorgular

● Standart sorgularSELECT [ALL | DISTINCT] expr, expr, ...

FROM table_reference[WHERE where_condition][GROUP BY col_list][LIMIT number]

● Karmaşık sorgularSELECT table3.col

FROM ( SELECT a+b AS col FROM table1

UNION ALL SELECT c+d AS col FROM table2

) table3

Page 30: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Sorgular

● JOIN örneği○ Sadece eşitlik üzerinden bağ kurulabilir

○ INNER | LEFT | RIGHT | FULL OUTER JOIN

○ LEFT SEMI JOIN

○ Birden fazla tablo birbirine bağlanabilirSELECT a.val, b.val, c.val FROM a

JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)

Page 31: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Veri Çıkışı

● INSERT OVERWRITE komutu

○ Sorgu sonuçları tabloya yazılabilir

INSERT OVERWRITE TABLE table SELECT * FROM employees;

○ Sonuçlar belirli bir dizine de yazılabilir

INSERT OVERWRITE LOCAL DIRECTORY '/path/file.dat' SELECT * FROM employees;

○ CREATE TABLE komutu kullanılabilir

CREATE TABLE table AS SELECT * FROM employees;

Page 32: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

ACID

● HIVE-5317 - Implement insert, update, and delete in Hive with full ACID support○ deltaFile○ InputFormat○ OutputFormat○ compaction

http://hortonworks.com/blog/adding-acid-to-apache-hive/

Page 33: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Metastore

● Metadata’yı yönetir○ Tablolar ile ilgili kolonların tipleri

○ HDFS üzerinde dosyaların konumu

○ Partitioning bilgisi

○ SerDe ayarları

○ İstatistik

● Datanucleus ORM kullanır○ Derby, MySQL ve benzeri RDBMS kullanılabilir

Page 34: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

UDF

● Kullanıcı tanımlı fonksiyonlarpublic class UnixtimeToDate extends UDF {

public Text evaluate(Text text) {

if (text == null) return null;

long timestamp = Long.parseLong(text.toString());

return new Text(toDate(timestamp));

}

private String toDate(long timestamp) {

Date date = new Date (timestamp * 1000);

return DateFormat.getInstance().

format(date).toString();

}

}

Page 35: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

● Serialization / Deserialization CREATE EXTERNAL TABLE IF NOT EXISTS event_data (

event_id int,

timestamp string,

type string

)

ROW FORMAT SERDE 'org.my.project.CustomDataFileSerDe'

STORED AS

INPUTFORMAT 'org.my.project.MyInputFormat'

OUTPUTFORMAT 'org.my.project.MyInputFormat'

LOCATION '/data/mydata';

https://github.com/hakanilter/querystring-serde/

SerDe

Page 36: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Nasıl Çalıştırılır?

● Konsol üzerinden○ hive>

● Script olarak○ hive -f source.sql○ hive -e 'select * from test'

● JDBC / ODBCorg.apache.hadoop.hive.jdbc.HiveDriver

● Hue/Beeswax○ Web arayüzünden

Page 37: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Hive Avantajları

● SQL kolaylığı○ Herkes SQL biliyor

● Ölçeklenebilirlik ve Performans○ Küme üzerinde çalışır

● Anlık sorgular değil büyük sorgular○ DWH sorguları

● Entegrasyon kolaylığı○ Mevcut araçlarla olan entegrasyon

Page 38: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Hive Performans

● MySQL vs Hive

○ SELECT COUNT(*) FROM comments;

○ 60,508,760 satır kayıt

○ 8 GB veri

MySQL 138.82 sn

Hive62.87 sn

Impala 3.74 sn

Page 39: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Karşılaştırma

Özellik Pig Hive

Amaç ETL Veri Ambarı

Dil Pig Latin SQL*

Şema Esnek Zorunlu

Zengin veri tipleri (map vs) Var Var

Join Var Var

Genişleyebilme UDF UDF

Farklı Dosya Formatları UDF SerDe

JDBC/ODBC Yok Var*

NoSQL entegrasyonu Var* Var*

Page 40: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Sqoop

● SQL to Hadoop○ RDBMS -> HDFS○ HDFS -> RDBMS

> sqoop import \

--driver com.mysql.jdbc.Driver \

--connect "jdbc:mysql://localhost:3306/db" \

--table test \

--username user \

--password pass \

--as-textfile \

--direct \

--target-dir /user/hadoop/sqoop/

Page 41: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

HCatalog

● Metadata ve tablo yönetim sistemi○ Hive metadata bilgilerini kullanır

● Pig ve Hive için ortak şema ve tipler● REST arayüzü

Page 42: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Dağıtık SQL Motorları

● Impala● Stinger● Presto

Page 43: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Sorular?

?

Page 44: Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

Teşekkürler!