Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

4,744 views

Published on

Türk Hadoop Kullanıcıları Grubu'nun Aralık 2013'de düzenlediği organizasyonunda yaptığım "GittiGidiyor'da Hadoop, Pig ve Hive ile Veri Analizi" sunumu

Published in: Technology
  • Dating direct: ❶❶❶ http://bit.ly/2ZDZFYj ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2ZDZFYj ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2

  1. 1. Pig ve Hive ile Veri Analizi 11.12.13 v2.1
  2. 2. Gündem ● Gitti Gidiyor ● Pig ● Hive ● Karşılaştırma ● Diğer Araçlar
  3. 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
  4. 4. DevVeri.com
  5. 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. 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. 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. 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. 9. Neler Yapılabilir? ● ● ● ● Datawarehouse Gerçek Zamanlı Raporlama Otomatik Katalog Seçimi Öneri Sistemi ○ recommendation ● Sahtecilik Önleme ○ classification ● Segmentasyon ○ clustering
  10. 10. Java ve MapReduce
  11. 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. 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. 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. 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. 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. 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;
  17. 17. İfadeler ● ● ● ● ● ● ● load store dump foreach filter group/cogroup join ● ● ● ● ● ● ● cross order distinct union split limit stream
  18. 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. 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. 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. 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. 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. 23. Hive Apache Hive, SQL yardımıyla Hadoop üzerinde sorgulama ve Veri Ambarı uygulamaları geliştirmeyi sağlayan bir araçtır.
  24. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 42. Dağıtık SQL Motorları ● Impala ● Stinger ● Presto
  43. 43. Sorular? ?
  44. 44. Teşekkürler!

×