SlideShare a Scribd company logo
1 of 44
Download to read offline
Pig ve Hive ile
Veri Analizi
11.12.13
v2.1
Gündem
● Gitti Gidiyor
● Pig
● Hive
● Karşılaştırma
● Diğer Araçlar
Hakkımda
● Marmara Üni. Elektronik
● Gitti Gidiyor / eBay
● 13+ Yazılım
● 4+ Yöneticilik
● Java, C, C++, C#

Hakan İlter
Software Development Supervisor

● Linux!
● Search, Big Data, NoSQL

hilter@ebay.com
twitter: hailter
http://tr.linkedin.com/in/hakanilter/
http://devveri.com
DevVeri.com
Rakamlarla Gitti Gidiyor

226M

7M

22M

12M

Ziyaret

Tekil Kullanıcı

Kayıtlı
Kullanıcı

5.3M

30M

300K

2GB

Aktif Ürün

Resim

Mobil İndirme

Günlük Log

Sayfa
Gösterimi
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
Gitti Gidiyor Hadoop

İlgili diğer aramalar
Nokkia aratılmış ama Nokia olarak
düzeltilmiş

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

"Metallica" ile ilgili diğer aramalar

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

Otomatik tamamlama verisi
Neler Yapılabilir?
●
●
●
●

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

● Sahtecilik Önleme
○ classification

● Segmentasyon
○ clustering
Java ve MapReduce
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
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.
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;
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 ...
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(.....)
Şema Kullanımı
● Şema zorunlu değildir
A = 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;
İfadeler
●
●
●
●
●
●
●

load
store
dump
foreach
filter
group/cogroup
join

●
●
●
●
●
●
●

cross
order
distinct
union
split
limit
stream
İfadelere Örnek
● Group
A = load 'student' as (name:chararray, age:int, gpa:float);
B = group A by age;
C = foreach B generate age, COUNT($0);

● Join
A1 = 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;
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();
}
}
UDF
● Register edilen jar içerisinden fonksiyonlar
çağırılabilir
register 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ılabilir
https://github.com/hakanilter/querystring-pig-loader/

● Piggybank
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
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
Hive
Apache Hive, SQL yardımıyla Hadoop üzerinde
sorgulama ve Veri Ambarı uygulamaları
geliştirmeyi sağlayan bir araçtır.
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;
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
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
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;
Veri Girişi
● 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';
Sorgular
● Standart sorgular
SELECT [ALL | DISTINCT] expr, expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[LIMIT number]

● Karmaşık sorgular
SELECT table3.col
FROM (
SELECT a+b AS col FROM table1
UNION ALL
SELECT c+d AS col FROM table2
) table3
Sorgular
● JOIN örneği
○ Sadece eşitlik üzerinden bağ kurulabilir
○ INNER | LEFT | RIGHT | FULL OUTER JOIN
○ LEFT SEMI JOIN
○ Birden fazla tablo birbirine bağlanabilir
SELECT a.val, b.val, c.val FROM a
JOIN b ON (a.key = b.key1)
JOIN c ON (c.key = b.key1)
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;
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/
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
UDF
● Kullanıcı tanımlı fonksiyonlar
public 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();
}
}
SerDe
● 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/
Nasıl Çalıştırılır?
● Konsol üzerinden
○ hive>

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

● JDBC / ODBC
org.apache.hadoop.hive.jdbc.HiveDriver

● Hue/Beeswax
○ Web arayüzünden
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
Hive Performans
● MySQL vs Hive
MySQL
138.82 sn
Hive
62.87 sn
Impala
3.74 sn

○ SELECT COUNT(*) FROM comments;
○ 60,508,760 satır kayıt
○ 8 GB veri
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*
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/
HCatalog
● Metadata ve tablo yönetim sistemi
○ Hive metadata bilgilerini kullanır

● Pig ve Hive için ortak şema ve tipler
● REST arayüzü
Dağıtık SQL Motorları
● Impala
● Stinger
● Presto
Sorular?

?
Teşekkürler!

More Related Content

What's hot

Hw09 Hadoop Development At Facebook Hive And Hdfs
Hw09   Hadoop Development At Facebook  Hive And HdfsHw09   Hadoop Development At Facebook  Hive And Hdfs
Hw09 Hadoop Development At Facebook Hive And Hdfs
Cloudera, Inc.
 

What's hot (20)

Hadoop & Cloudera Workshop
Hadoop & Cloudera WorkshopHadoop & Cloudera Workshop
Hadoop & Cloudera Workshop
 
Cloud Data Warehouses
Cloud Data WarehousesCloud Data Warehouses
Cloud Data Warehouses
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Bigdata Nedir? Hadoop Nedir? MapReduce Nedir? Big Data.
Bigdata Nedir? Hadoop Nedir? MapReduce Nedir? Big Data.Bigdata Nedir? Hadoop Nedir? MapReduce Nedir? Big Data.
Bigdata Nedir? Hadoop Nedir? MapReduce Nedir? Big Data.
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Hadoop et son écosystème - v2
Hadoop et son écosystème - v2Hadoop et son écosystème - v2
Hadoop et son écosystème - v2
 
Big Data Sunum
Big Data SunumBig Data Sunum
Big Data Sunum
 
Apache Spark : Genel Bir Bakış
Apache Spark : Genel Bir BakışApache Spark : Genel Bir Bakış
Apache Spark : Genel Bir Bakış
 
Big data Hadoop presentation
Big data  Hadoop  presentation Big data  Hadoop  presentation
Big data Hadoop presentation
 
Hadoop
HadoopHadoop
Hadoop
 
5 Critical Steps to Clean Your Data Swamp When Migrating Off of Hadoop
5 Critical Steps to Clean Your Data Swamp When Migrating Off of Hadoop5 Critical Steps to Clean Your Data Swamp When Migrating Off of Hadoop
5 Critical Steps to Clean Your Data Swamp When Migrating Off of Hadoop
 
Introduction to Hadoop
Introduction to HadoopIntroduction to Hadoop
Introduction to Hadoop
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks Autoloader
 
Hw09 Hadoop Development At Facebook Hive And Hdfs
Hw09   Hadoop Development At Facebook  Hive And HdfsHw09   Hadoop Development At Facebook  Hive And Hdfs
Hw09 Hadoop Development At Facebook Hive And Hdfs
 
Data Lakehouse Symposium | Day 1 | Part 1
Data Lakehouse Symposium | Day 1 | Part 1Data Lakehouse Symposium | Day 1 | Part 1
Data Lakehouse Symposium | Day 1 | Part 1
 
Keynote - Adrian Hornsby on Chaos Engineering
Keynote - Adrian Hornsby on Chaos EngineeringKeynote - Adrian Hornsby on Chaos Engineering
Keynote - Adrian Hornsby on Chaos Engineering
 
Impala presentation
Impala presentationImpala presentation
Impala presentation
 
Big Data Ppt PowerPoint Presentation Slides
Big Data Ppt PowerPoint Presentation Slides Big Data Ppt PowerPoint Presentation Slides
Big Data Ppt PowerPoint Presentation Slides
 
10 Common Hadoop-able Problems Webinar
10 Common Hadoop-able Problems Webinar10 Common Hadoop-able Problems Webinar
10 Common Hadoop-able Problems Webinar
 
Redis
RedisRedis
Redis
 

Viewers also liked

August 2016 HUG: Open Source Big Data Ingest with StreamSets Data Collector
August 2016 HUG: Open Source Big Data Ingest with StreamSets Data Collector August 2016 HUG: Open Source Big Data Ingest with StreamSets Data Collector
August 2016 HUG: Open Source Big Data Ingest with StreamSets Data Collector
Yahoo Developer Network
 
August 2016 HUG: Better together: Fast Data with Apache Spark™ and Apache Ign...
August 2016 HUG: Better together: Fast Data with Apache Spark™ and Apache Ign...August 2016 HUG: Better together: Fast Data with Apache Spark™ and Apache Ign...
August 2016 HUG: Better together: Fast Data with Apache Spark™ and Apache Ign...
Yahoo Developer Network
 
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Kai Wähner
 

Viewers also liked (15)

Hadoop @ devveri.com
Hadoop @ devveri.comHadoop @ devveri.com
Hadoop @ devveri.com
 
TRHUG 2015 - Veloxity Big Data Migration Use Case
TRHUG 2015 - Veloxity Big Data Migration Use CaseTRHUG 2015 - Veloxity Big Data Migration Use Case
TRHUG 2015 - Veloxity Big Data Migration Use Case
 
Apache Hadoop YARN: Understanding the Data Operating System of Hadoop
Apache Hadoop YARN: Understanding the Data Operating System of HadoopApache Hadoop YARN: Understanding the Data Operating System of Hadoop
Apache Hadoop YARN: Understanding the Data Operating System of Hadoop
 
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - TürkçeApache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
 
August 2016 HUG: Open Source Big Data Ingest with StreamSets Data Collector
August 2016 HUG: Open Source Big Data Ingest with StreamSets Data Collector August 2016 HUG: Open Source Big Data Ingest with StreamSets Data Collector
August 2016 HUG: Open Source Big Data Ingest with StreamSets Data Collector
 
Analyzing Hadoop Data Using Sparklyr

Analyzing Hadoop Data Using Sparklyr
Analyzing Hadoop Data Using Sparklyr

Analyzing Hadoop Data Using Sparklyr

 
Part 1: Cloudera’s Analytic Database: BI & SQL Analytics in a Hybrid Cloud World
Part 1: Cloudera’s Analytic Database: BI & SQL Analytics in a Hybrid Cloud WorldPart 1: Cloudera’s Analytic Database: BI & SQL Analytics in a Hybrid Cloud World
Part 1: Cloudera’s Analytic Database: BI & SQL Analytics in a Hybrid Cloud World
 
August 2016 HUG: Better together: Fast Data with Apache Spark™ and Apache Ign...
August 2016 HUG: Better together: Fast Data with Apache Spark™ and Apache Ign...August 2016 HUG: Better together: Fast Data with Apache Spark™ and Apache Ign...
August 2016 HUG: Better together: Fast Data with Apache Spark™ and Apache Ign...
 
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
 
Data Engineering: Elastic, Low-Cost Data Processing in the Cloud
Data Engineering: Elastic, Low-Cost Data Processing in the CloudData Engineering: Elastic, Low-Cost Data Processing in the Cloud
Data Engineering: Elastic, Low-Cost Data Processing in the Cloud
 
Part 1: Lambda Architectures: Simplified by Apache Kudu
Part 1: Lambda Architectures: Simplified by Apache KuduPart 1: Lambda Architectures: Simplified by Apache Kudu
Part 1: Lambda Architectures: Simplified by Apache Kudu
 
Part 2: Cloudera’s Operational Database: Unlocking New Benefits in the Cloud
Part 2: Cloudera’s Operational Database: Unlocking New Benefits in the CloudPart 2: Cloudera’s Operational Database: Unlocking New Benefits in the Cloud
Part 2: Cloudera’s Operational Database: Unlocking New Benefits in the Cloud
 
August 2016 HUG: Recent development in Apache Oozie
August 2016 HUG: Recent development in Apache OozieAugust 2016 HUG: Recent development in Apache Oozie
August 2016 HUG: Recent development in Apache Oozie
 
Part 2: Apache Kudu: Extending the Capabilities of Operational and Analytic D...
Part 2: Apache Kudu: Extending the Capabilities of Operational and Analytic D...Part 2: Apache Kudu: Extending the Capabilities of Operational and Analytic D...
Part 2: Apache Kudu: Extending the Capabilities of Operational and Analytic D...
 
Enabling the Connected Car Revolution

Enabling the Connected Car Revolution
Enabling the Connected Car Revolution

Enabling the Connected Car Revolution

 

Similar to Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

AnkaraJUG Haziran 2013 - No SQL / Big Data
AnkaraJUG Haziran 2013 - No SQL / Big DataAnkaraJUG Haziran 2013 - No SQL / Big Data
AnkaraJUG Haziran 2013 - No SQL / Big Data
Ankara JUG
 
Veri̇ tabani oluşturma ve yapilandirma
Veri̇ tabani oluşturma ve yapilandirmaVeri̇ tabani oluşturma ve yapilandirma
Veri̇ tabani oluşturma ve yapilandirma
oktaygokgol
 
Stored procedure
Stored procedureStored procedure
Stored procedure
oktaygokgol
 

Similar to Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2 (20)

Veri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan SarıbıyıkVeri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan Sarıbıyık
 
Delphi 7
Delphi 7Delphi 7
Delphi 7
 
NoSQL Sunumu
NoSQL SunumuNoSQL Sunumu
NoSQL Sunumu
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı Gözleyelim
 
Sql Server 2.hafta
Sql Server 2.haftaSql Server 2.hafta
Sql Server 2.hafta
 
AnkaraJUG Haziran 2013 - No SQL / Big Data
AnkaraJUG Haziran 2013 - No SQL / Big DataAnkaraJUG Haziran 2013 - No SQL / Big Data
AnkaraJUG Haziran 2013 - No SQL / Big Data
 
Hadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri AnaliziHadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
 
Big Data Analytics
Big Data AnalyticsBig Data Analytics
Big Data Analytics
 
Hbase Kullanım Senaryoları
Hbase Kullanım SenaryolarıHbase Kullanım Senaryoları
Hbase Kullanım Senaryoları
 
Active Directory ve Powershell ile Hyper-V Taşıma
Active Directory ve Powershell ile Hyper-V TaşımaActive Directory ve Powershell ile Hyper-V Taşıma
Active Directory ve Powershell ile Hyper-V Taşıma
 
Veri̇ tabani oluşturma ve yapilandirma
Veri̇ tabani oluşturma ve yapilandirmaVeri̇ tabani oluşturma ve yapilandirma
Veri̇ tabani oluşturma ve yapilandirma
 
Veri Tabani: SQL'e Giriş (Hafta 2)
Veri Tabani: SQL'e Giriş (Hafta 2)Veri Tabani: SQL'e Giriş (Hafta 2)
Veri Tabani: SQL'e Giriş (Hafta 2)
 
1 hafta_dersi
1  hafta_dersi1  hafta_dersi
1 hafta_dersi
 
Java EE Struts
Java EE StrutsJava EE Struts
Java EE Struts
 
MongoDB Overview
MongoDB OverviewMongoDB Overview
MongoDB Overview
 
Ceph Türkiye 2.meetup İstanbul
Ceph Türkiye 2.meetup İstanbulCeph Türkiye 2.meetup İstanbul
Ceph Türkiye 2.meetup İstanbul
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
 
Graph Databases & NEO4J
Graph Databases & NEO4JGraph Databases & NEO4J
Graph Databases & NEO4J
 
PostgreSQL Hem Güçlü Hem Güzel!
PostgreSQL Hem Güçlü Hem Güzel!PostgreSQL Hem Güçlü Hem Güzel!
PostgreSQL Hem Güçlü Hem Güzel!
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 

Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

  • 1. Pig ve Hive ile Veri Analizi 11.12.13 v2.1
  • 2. Gündem ● Gitti Gidiyor ● Pig ● Hive ● Karşılaştırma ● Diğer Araçlar
  • 3. Hakkımda ● Marmara Üni. Elektronik ● Gitti Gidiyor / eBay ● 13+ Yazılım ● 4+ Yöneticilik ● Java, C, C++, C# Hakan İlter Software Development Supervisor ● Linux! ● Search, Big Data, NoSQL hilter@ebay.com twitter: hailter http://tr.linkedin.com/in/hakanilter/ http://devveri.com
  • 5. Rakamlarla Gitti Gidiyor 226M 7M 22M 12M Ziyaret Tekil Kullanıcı Kayıtlı Kullanıcı 5.3M 30M 300K 2GB Aktif Ürün Resim Mobil İndirme Günlük Log Sayfa Gösterimi
  • 6. 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
  • 7. Gitti Gidiyor Hadoop İlgili diğer aramalar Nokkia aratılmış ama Nokia olarak düzeltilmiş Nokia kelimesiyle daha ilgili olduğu için Cep telefonu kategorisi daha üstte yer alıyor
  • 8. Gitti Gidiyor Hadoop "Metallica" ile ilgili diğer aramalar Mobil uygulama ana sayfada kişiselleştirilmiş ürün gösterimi Otomatik tamamlama verisi
  • 9. Neler Yapılabilir? ● ● ● ● Datawarehouse Gerçek Zamanlı Raporlama Otomatik Katalog Seçimi Öneri Sistemi ○ recommendation ● Sahtecilik Önleme ○ classification ● Segmentasyon ○ clustering
  • 11. 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
  • 12. 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.
  • 13. 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;
  • 14. 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 ...
  • 15. 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(.....)
  • 16. Şema Kullanımı ● Şema zorunlu değildir A = 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;
  • 18. İfadelere Örnek ● Group A = load 'student' as (name:chararray, age:int, gpa:float); B = group A by age; C = foreach B generate age, COUNT($0); ● Join A1 = 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;
  • 19. 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(); } }
  • 20. UDF ● Register edilen jar içerisinden fonksiyonlar çağırılabilir register 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ılabilir https://github.com/hakanilter/querystring-pig-loader/ ● Piggybank
  • 21. 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
  • 22. 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
  • 23. Hive Apache Hive, SQL yardımıyla Hadoop üzerinde sorgulama ve Veri Ambarı uygulamaları geliştirmeyi sağlayan bir araçtır.
  • 24. 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;
  • 25. 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
  • 26. 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
  • 27. 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;
  • 28. Veri Girişi ● 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';
  • 29. Sorgular ● Standart sorgular SELECT [ALL | DISTINCT] expr, expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [LIMIT number] ● Karmaşık sorgular SELECT table3.col FROM ( SELECT a+b AS col FROM table1 UNION ALL SELECT c+d AS col FROM table2 ) table3
  • 30. Sorgular ● JOIN örneği ○ Sadece eşitlik üzerinden bağ kurulabilir ○ INNER | LEFT | RIGHT | FULL OUTER JOIN ○ LEFT SEMI JOIN ○ Birden fazla tablo birbirine bağlanabilir SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)
  • 31. 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;
  • 32. 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/
  • 33. 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
  • 34. UDF ● Kullanıcı tanımlı fonksiyonlar public 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(); } }
  • 35. SerDe ● 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/
  • 36. Nasıl Çalıştırılır? ● Konsol üzerinden ○ hive> ● Script olarak ○ hive -f source.sql ○ hive -e 'select * from test' ● JDBC / ODBC org.apache.hadoop.hive.jdbc.HiveDriver ● Hue/Beeswax ○ Web arayüzünden
  • 37. 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
  • 38. Hive Performans ● MySQL vs Hive MySQL 138.82 sn Hive 62.87 sn Impala 3.74 sn ○ SELECT COUNT(*) FROM comments; ○ 60,508,760 satır kayıt ○ 8 GB veri
  • 39. 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*
  • 40. 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/
  • 41. HCatalog ● Metadata ve tablo yönetim sistemi ○ Hive metadata bilgilerini kullanır ● Pig ve Hive için ortak şema ve tipler ● REST arayüzü
  • 42. Dağıtık SQL Motorları ● Impala ● Stinger ● Presto