SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
Pig ve Hive ile
 Veri Analizi
                  Nisan 2013
                        v1.2
Hakkımda
●   Marmara Üni. Elektronik
●   Software Development Supervisor
    @ Gitti Gidiyor / eBay
●   12+ yıl yazılım tecrübesi
●   Java, C, C++, C#
●   Linux!
●   Search, Big Data, NoSQL                  Hakan İlter
                                                 hilter@ebay.com
                                               twitter: devvericom
                                      http://tr.linkedin.com/in/hakanilter/
                                                http://devveri.com
Gündem
●   Hadoop
●   MapReduce
●   Pig
●   Hive
●   Karşılaştırma
Hadoop
Veri işleme amaçlı dağıtık uygulamalar
yazılmasını sağlayan bir platform ve açık
kaynaklı bir Apache projesidir.
Nereden Çıktı?
● Google!
● Dünyada üretilen verilerin %90'lık kısmı son
  2 yılda toplandı
● Dev veri (Big Data)
  ○ Yapılandırılmış (structured)
    ■ ürün, kategori, müşteri, fatura, ödeme...
  ○ Yapılandırılmamış (unstructured)
    ■ tweet, paylaşım, like, email, click...
● %90 yapılandırılmamış veri
Hadoop
● Esnek
  ○ Her türlü veriyi saklayıp analizi yapılabilir

● Ölçeklenebilir
  ○ Binlerce düğüm bir araya getirilebilir

● Ekonomik
  ○ Açık kaynaklı, "commodity" donanımda çalışabilir
Kimler Kullanıyor?
●   yahoo
●   last.fm
●   ebay
●   amazon
●   facebook
●   linkedin
●   twitter
●   microsoft
●   oracle
●   ...
Gitti Gidiyor'da Hadoop
● Arama motoru
    ○   akıllı sıralama
    ○   ilgili aramalar
    ○   otomatik tamamlama
    ○   bunu mu demek istediniz
●   Kişiselleştirme (web, mobil, email)
●   Pazarlama (özel kampanyalar)
●   Segmentasyon
●   Raporlama
Hadoop
● Hadoop Distributed File System (HDFS)
● MapReduce
HDFS
● Verinin saklanmasından sorumludur
  ○ Dağıtık bir dosya sistemidir
  ○ Birden çok düğümün disklerini birleştirir
  ○ Veriyi bloklar halinde yedekli olacak şekilde saklar
  ○ Bu sayede verinin erişilebilirliği ve güvenilirliği
      sağlanmış olur
   ○ Rastlantısal erişim yoktur (write once)
   ○ Büyük ve duraksız (streaming) veri okuma işlemine
      göre optimize edilmiştir
MapReduce
● Veriyi işleme yöntemidir
  ○ Map ve Reduce birer fonksiyondur
  ○ İşlenecek veriler bağımsız parçalara bölünür
  ○ Her bir parça paralel olarak Map fonksiyonuna
    anahtar-değer şeklinde iletilir
  ○ Map fonksiyonundan çıkan değerler gruplanıp
    sıralandıktan sonra yine paralel olarak Reduce
    fonksiyonuna iletilir
  ○ Sonuç yine HDFS üzerine yazılır
  ○ Hadoop bu işlerin nasıl yürüyeceğini kontrol eder
MapReduce
WordCount.java
● Map Metodu
  public void map(LongWritable key,
                     Text value,
                     Context context)
      throws IOException, InterruptedException
  {
      String line = value.toString().toLowerCase();
      StringTokenizer tokenizer = new StringTokenizer(line);
      while (tokenizer.hasMoreTokens()) {
          Text word = new Text(tokenizer.nextToken());
          context.write(word, new IntWritable(1));
      }
  }
WordCount.java
● Reduce Metodu
  public void reduce(Text key,
                     Iterable<IntWritable> values,
                     Context context)
      throws IOException, InterruptedException
  {
      int sum = 0;
      for (IntWritable value : values) {
          sum += value.get();
      }
      context.write(key, new IntWritable(sum));
  }
WordCount.java
● Tool Sınıfı Metodu
  public int run(String[] args) throws Exception
  {
      Job job = new Job();
      job.setJarByClass(WordCount.class);

      FileInputFormat.addInputPath(job, new Path(args[0]));
      FileOutputFormat.setOutputPath(job, new Path(args[1]));

      job.setMapperClass(WordCountMapper.class);
      job.setReducerClass(WordCountReducer.class);
      job.setOutputKeyClass(Text.class);
      job.setOutputValueClass(IntWritable.class);

      return job.waitForCompletion(true) ? 0 : 1;
  }
Hmm...
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 diller
   ○ 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 platformudur.
Pig
● Hadoop üzerindeki yapılandırılmamış verinin
  analizini kolaylaştırır
  ○ Basit dili ve yapısı sayesinde geliştirme süresini
    kısaltır
  ○ Esnek veri modeli ve standart dosya formatlarına
    destek sağlayar (text, binary, sequence, json vs.)
  ○ SQL'den alışık olduğumuz veri işleme ifadelerine
    benzer ifadeler kullanılır (group by, order by vs.)
  ○ Pig kodları optimize edilir
    ■ Örnek: İki farklı gruplama işlemi otomatik olarak
        birleştirilebilir
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;
Nasıl Çalıştırılır?
● Konsol üzerinden
  ○ grunt>
● Script olarak
  ○ pig -f source.pig
● Programatik olarak
  ○ Java yardımıyla program içerisinden çağırabilir
Pig Latin ve SQL
● SQL şema tabanlıdır, Pig Latin esnektir
● SQL sorgulama dilidir, sonuç odaklıdır,
  verinin nasıl işleneceği ile ilgilenilmez
● Pig Latin verinin işlenmesi ile ilgili
  kullanıcıya daha fazla kontrol sunar
● SQL ile aynı anda bir sorunun cevabı
  alınabilir. Birden fazla cevap için iç içe
  sorgular veya geçici tablolar kullanılır
● Pig Latin ile seri halinde uzun operasyonlar
  sırayla gerçekleştirilebilir
Pig Latin ve SQL
/* SQL ornegi */
CREATE TEMP TABLE t1 AS
    SELECT customer, sum(purchase) AS total_purchases
FROM transactions
GROUP BY customer;

SELECT customer, total_purchases, zipcode
FROM t1, customer_profile
WHERE t1.customer = customer_profile.customer;

-- Pig   ornegi
txns =   load 'transactions.csv' as (customer, purchase);
grpd =   group txns by customer;
totl =   foreach grpd generate group, SUM(txns.purchase) as tp;

prfl = load 'customer_profile.csv' as (customer, zipcode);
rslt = join totl by group, prfl by customer;
dump rslt;
Veri Tipleri
● Basit veri tipleri
   ○ int, long, float, double
   ○ bytearray, chararray

● Kompleks veri tipleri
   ○ Map
   ○ Tuple (row)
   ○ Bag (list of tuples)
Şema Kullanımı
● Şema kullanımı 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;
Pig Latin
● Veri işlemek için birçok ifadeyi destekler
  ○ Veri yükleme ve kaydetme (Load, Store, Dump)
  ○ Filtreleme (Filter, Distinct, Foreach, Sample)
  ○ Gruplama (Join, Group, Cogroup, Cross)
  ○ Sıralama (Order, Limit)
  ○ Ayırma ve birleştirme (Union, Split)
Pig Latin
● JOIN örneği
  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;


● Parallel özelliği
  txns = load 'transactions.csv' as (customer, purchase);
  -- gruplama isleminde 10 reducer kullan
  grpd = group txns by customer parallel 10;
UDF
● Java 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
● Piggybank isimli hazır fonksiyonların olduğu
  bir kütüphane de mevcuttur
Hive
Apache Hive, SQL benzeri bir arayüz
yardımıyla Hadoop üzerinde sorgulama ve Veri
Ambarı (Datawarehouse) uygulamaları
geliştirmeyi sağlayan bir projedir.
Hive
● Hadoop üzerindeki yapılandırılmış verinin
  yönetilmesini ve sorgulanmasını sağlar
  ○ Veriler HDFS üzerinde saklanır
  ○ Saklanan bu veriler tablo olarak tanımlanır
  ○ Bu tablolar üzerinden SQL benzeri HiveQL ile
    MapReduce programları yazılabilir
  ○ Zengin veri tipleri sunar (struct, array, map vs.)
  ○ Farklı formatta tutulan verileri sorgulayabilir (text,
    binary, sequence vs)
  ○ Genişletilebilir (UDF, SerDe)
  ○ Veri hakkındaki meta bilgisini de yönetir
  ○ Ölçeklenebilir ve performanslıdır
WordCount.hiveql
/* 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;
Nasıl Çalıştırılır?
● Konsol üzerinden
  ○ hive>
● Script olarak
  ○ hive -f source.sql
  ○ hive -e 'select * from test'
Veri Tipleri
● Basit veri tipleri
   ○ TINYINT, SMALLINT, INT, BIGINT
   ○ BOOLEAN, FLOAT, DOUBLE
   ○ STRING, BINARY, TIMESTAMP, DECIMAL
● Kompleks veri tipleri
   ○   ARRAY<data_type>
   ○   MAP<primitive_type, data_type>
   ○   STRUCT<col_name : data_type, ...>
   ○   UNIONTYPE<data_type, data_type, ...>
Veri Yapısı
● Tablo (Table)
  ○ Kolonlardan oluşur (int, double, date, string, vs.)
  ○ Gelişmiş tipleri de destekler (array, struct, map, vs.)
  ○ Aslında HDFS üzerindeki bir klasöre denk gelir
  ○ MANAGED tablolar hive.metastore.warehouse.dir
    ile belirtilen yerde saklanır (/user/hive/warehouse)
  ○ Tablolar EXTERNAL olarak da tanımlanabilir
  ○ Gerçek veriler düz dosyalarda (text, binary,
    sequence) tutulur
      /user/hive/warehouse/mydb.db/employees
Veri Yapısı
● Tablo yaratmak
  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 Yapısı
● Bölünmüş (Partitioned) Tablolar
  ○ Tablolar belirli kolonlarına göre bölünerek
    saklanabilir
  ○ Bölme işlemi daha sonra yapılacak sorgulamalara
    göre yapılırsa performans sağlanır
  ○ Bölünmüş tablolar alt klasörler içerisinde saklanır

  /user/hive/warehouse/mydb.db/employees/country=CA/state=AB
  /user/hive/warehouse/mydb.db/employees/country=CA/state=BC
  /user/hive/warehouse/mydb.db/employees/country=US/state=AL
  /user/hive/warehouse/mydb.db/employees/country=US/state=TX
  ...
Veri Yapısı
● Bölünmüş tablo yaratmak
  CREATE TABLE employees (
      name          STRING,
      salary        FLOAT,
      subordinates ARRAY<STRING>,
      deductions    MAP<STRING, FLOAT>,
      address       STRUCT<street:STRING, city:STRING,
                        state:STRING, zip:INT>
  ) PARTITIONED BY (country STRING, state STRING);
Metastore
● Veri hakkındaki meta bilgisini de yönetir
  ○ Tablolar ile ilgili kolonların tipleri
  ○ HDFS üzerinde dosyaların konumu
  ○ Partitioning bilgisi
  ○ SerDe ayarları
  ○ İstatistik
  ○ Datanucleus ORM ile geliştirilmiştir, Derby, MySQL
      ve benzeri RDBMS kullanılabilir
Veri Giriş Çıkışı
● LOAD DATA komutuyla veri yüklenebilir
  LOAD DATA [LOCAL] INPATH 'filepath'
  [OVERWRITE] INTO TABLE tablename
  [PARTITION (partcol1=val1, partcol2=val2 ...)]

● Sorgu sonuçları tablolara kaydedilebilir
  INSERT OVERWRITE TABLE tablename1
  [PARTITION (partcol1=val1, partcol2=val2 ...)
  [IF NOT EXISTS]] select_statement1 FROM from_statement;

● Tablolardaki veriler dışarı aktarılabilir
  INSERT OVERWRITE [LOCAL] DIRECTORY 'directory1'
  select_statement1 FROM from_statement;
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
  ○ 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)
UDF
● Kullanıcılar kendi fonksiyonlarını
  geliştirebilirler
  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
● (Se)rialization/(De)serialization işlemleri için
  SerDe arayüzünü sağlar
  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';
Sonrası?
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*
DevVeri.com
Sorular?


           ?
Teşekkürler!

Más contenido relacionado

La actualidad más candente

Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystèmeKhanh Maudoux
 
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.Zekeriya Besiroglu
 
Hadoop And Their Ecosystem
 Hadoop And Their Ecosystem Hadoop And Their Ecosystem
Hadoop And Their Ecosystemsunera pathan
 
Hadoop Hbase - Introduction
Hadoop Hbase - IntroductionHadoop Hbase - Introduction
Hadoop Hbase - IntroductionBlandine Larbret
 
Introduction to Storm
Introduction to Storm Introduction to Storm
Introduction to Storm Chandler Huang
 
Presentation Hadoop Québec
Presentation Hadoop QuébecPresentation Hadoop Québec
Presentation Hadoop QuébecMathieu Dumoulin
 
Introduction to HADOOP.pdf
Introduction to HADOOP.pdfIntroduction to HADOOP.pdf
Introduction to HADOOP.pdf8840VinayShelke
 
HBase Tutorial For Beginners | HBase Architecture | HBase Tutorial | Hadoop T...
HBase Tutorial For Beginners | HBase Architecture | HBase Tutorial | Hadoop T...HBase Tutorial For Beginners | HBase Architecture | HBase Tutorial | Hadoop T...
HBase Tutorial For Beginners | HBase Architecture | HBase Tutorial | Hadoop T...Simplilearn
 
Meet hbase 2.0
Meet hbase 2.0Meet hbase 2.0
Meet hbase 2.0enissoz
 
Introduction to HiveQL
Introduction to HiveQLIntroduction to HiveQL
Introduction to HiveQLkristinferrier
 
Hive, Presto, and Spark on TPC-DS benchmark
Hive, Presto, and Spark on TPC-DS benchmarkHive, Presto, and Spark on TPC-DS benchmark
Hive, Presto, and Spark on TPC-DS benchmarkDongwon Kim
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3Amal Abid
 
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)SANG WON PARK
 

La actualidad más candente (20)

Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystème
 
Apache Ranger
Apache RangerApache Ranger
Apache Ranger
 
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.
 
Hadoop And Their Ecosystem
 Hadoop And Their Ecosystem Hadoop And Their Ecosystem
Hadoop And Their Ecosystem
 
Hadoop Hbase - Introduction
Hadoop Hbase - IntroductionHadoop Hbase - Introduction
Hadoop Hbase - Introduction
 
Hadoop hdfs
Hadoop hdfsHadoop hdfs
Hadoop hdfs
 
Big Data Sunum
Big Data SunumBig Data Sunum
Big Data Sunum
 
Introduction to Storm
Introduction to Storm Introduction to Storm
Introduction to Storm
 
Presentation Hadoop Québec
Presentation Hadoop QuébecPresentation Hadoop Québec
Presentation Hadoop Québec
 
Introduction to HADOOP.pdf
Introduction to HADOOP.pdfIntroduction to HADOOP.pdf
Introduction to HADOOP.pdf
 
HBase Tutorial For Beginners | HBase Architecture | HBase Tutorial | Hadoop T...
HBase Tutorial For Beginners | HBase Architecture | HBase Tutorial | Hadoop T...HBase Tutorial For Beginners | HBase Architecture | HBase Tutorial | Hadoop T...
HBase Tutorial For Beginners | HBase Architecture | HBase Tutorial | Hadoop T...
 
Apache hive introduction
Apache hive introductionApache hive introduction
Apache hive introduction
 
Meet hbase 2.0
Meet hbase 2.0Meet hbase 2.0
Meet hbase 2.0
 
IBM GPFS
IBM GPFSIBM GPFS
IBM GPFS
 
Introduction to HiveQL
Introduction to HiveQLIntroduction to HiveQL
Introduction to HiveQL
 
(GFS) Google Dosya Sistemi
(GFS) Google Dosya Sistemi (GFS) Google Dosya Sistemi
(GFS) Google Dosya Sistemi
 
Hive, Presto, and Spark on TPC-DS benchmark
Hive, Presto, and Spark on TPC-DS benchmarkHive, Presto, and Spark on TPC-DS benchmark
Hive, Presto, and Spark on TPC-DS benchmark
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
 
Apache HBase™
Apache HBase™Apache HBase™
Apache HBase™
 

Similar a Pig ve Hive ile Hadoop üzerinde Veri Analizi

Hadoop @ devveri.com
Hadoop @ devveri.comHadoop @ devveri.com
Hadoop @ devveri.comHakan Ilter
 
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ıkHakan Sarıbıyık
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı GözleyelimOguz Yarimtepe
 
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 AnaliziSerkan Sakınmaz
 
Ankara JUG Big Data Presentation
Ankara JUG Big Data PresentationAnkara JUG Big Data Presentation
Ankara JUG Big Data PresentationSerkan Özal
 
Big Data Analytics
Big Data AnalyticsBig Data Analytics
Big Data AnalyticsMudur Alkan
 
Hbase Kullanım Senaryoları
Hbase Kullanım SenaryolarıHbase Kullanım Senaryoları
Hbase Kullanım SenaryolarıTalat UYARER
 
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 DataAnkara JUG
 
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şturmaHüseyin Mert
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008mtcakmak
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisationirfandurmus
 

Similar a Pig ve Hive ile Hadoop üzerinde Veri Analizi (20)

Hadoop @ devveri.com
Hadoop @ devveri.comHadoop @ devveri.com
Hadoop @ devveri.com
 
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
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı Gözleyelim
 
Python for Hackers
Python for HackersPython for Hackers
Python for Hackers
 
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
 
Ankara JUG Big Data Presentation
Ankara JUG Big Data PresentationAnkara JUG Big Data Presentation
Ankara JUG Big Data Presentation
 
Delphi 7
Delphi 7Delphi 7
Delphi 7
 
1 hafta_dersi
1  hafta_dersi1  hafta_dersi
1 hafta_dersi
 
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!
 
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ı
 
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
 
Nosql veritabanlari
Nosql veritabanlariNosql veritabanlari
Nosql veritabanlari
 
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
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
 
PostgreSQL DBA Neler Yapar?
PostgreSQL DBA Neler Yapar?PostgreSQL DBA Neler Yapar?
PostgreSQL DBA Neler Yapar?
 
NoSQL Sunumu
NoSQL SunumuNoSQL Sunumu
NoSQL Sunumu
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisation
 
Java EE Struts
Java EE StrutsJava EE Struts
Java EE Struts
 
yazılımmuh10.pptx
yazılımmuh10.pptxyazılımmuh10.pptx
yazılımmuh10.pptx
 

Pig ve Hive ile Hadoop üzerinde Veri Analizi

  • 1. Pig ve Hive ile Veri Analizi Nisan 2013 v1.2
  • 2. Hakkımda ● Marmara Üni. Elektronik ● Software Development Supervisor @ Gitti Gidiyor / eBay ● 12+ yıl yazılım tecrübesi ● Java, C, C++, C# ● Linux! ● Search, Big Data, NoSQL Hakan İlter hilter@ebay.com twitter: devvericom http://tr.linkedin.com/in/hakanilter/ http://devveri.com
  • 3. Gündem ● Hadoop ● MapReduce ● Pig ● Hive ● Karşılaştırma
  • 4. Hadoop Veri işleme amaçlı dağıtık uygulamalar yazılmasını sağlayan bir platform ve açık kaynaklı bir Apache projesidir.
  • 5. Nereden Çıktı? ● Google! ● Dünyada üretilen verilerin %90'lık kısmı son 2 yılda toplandı ● Dev veri (Big Data) ○ Yapılandırılmış (structured) ■ ürün, kategori, müşteri, fatura, ödeme... ○ Yapılandırılmamış (unstructured) ■ tweet, paylaşım, like, email, click... ● %90 yapılandırılmamış veri
  • 6. Hadoop ● Esnek ○ Her türlü veriyi saklayıp analizi yapılabilir ● Ölçeklenebilir ○ Binlerce düğüm bir araya getirilebilir ● Ekonomik ○ Açık kaynaklı, "commodity" donanımda çalışabilir
  • 7. Kimler Kullanıyor? ● yahoo ● last.fm ● ebay ● amazon ● facebook ● linkedin ● twitter ● microsoft ● oracle ● ...
  • 8. Gitti Gidiyor'da Hadoop ● Arama motoru ○ akıllı sıralama ○ ilgili aramalar ○ otomatik tamamlama ○ bunu mu demek istediniz ● Kişiselleştirme (web, mobil, email) ● Pazarlama (özel kampanyalar) ● Segmentasyon ● Raporlama
  • 9. Hadoop ● Hadoop Distributed File System (HDFS) ● MapReduce
  • 10. HDFS ● Verinin saklanmasından sorumludur ○ Dağıtık bir dosya sistemidir ○ Birden çok düğümün disklerini birleştirir ○ Veriyi bloklar halinde yedekli olacak şekilde saklar ○ Bu sayede verinin erişilebilirliği ve güvenilirliği sağlanmış olur ○ Rastlantısal erişim yoktur (write once) ○ Büyük ve duraksız (streaming) veri okuma işlemine göre optimize edilmiştir
  • 11. MapReduce ● Veriyi işleme yöntemidir ○ Map ve Reduce birer fonksiyondur ○ İşlenecek veriler bağımsız parçalara bölünür ○ Her bir parça paralel olarak Map fonksiyonuna anahtar-değer şeklinde iletilir ○ Map fonksiyonundan çıkan değerler gruplanıp sıralandıktan sonra yine paralel olarak Reduce fonksiyonuna iletilir ○ Sonuç yine HDFS üzerine yazılır ○ Hadoop bu işlerin nasıl yürüyeceğini kontrol eder
  • 13. WordCount.java ● Map Metodu public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString().toLowerCase(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { Text word = new Text(tokenizer.nextToken()); context.write(word, new IntWritable(1)); } }
  • 14. WordCount.java ● Reduce Metodu public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable value : values) { sum += value.get(); } context.write(key, new IntWritable(sum)); }
  • 15. WordCount.java ● Tool Sınıfı Metodu public int run(String[] args) throws Exception { Job job = new Job(); job.setJarByClass(WordCount.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); return job.waitForCompletion(true) ? 0 : 1; }
  • 17. 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 diller ○ Pig ○ Hive
  • 18. 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 platformudur.
  • 19. Pig ● Hadoop üzerindeki yapılandırılmamış verinin analizini kolaylaştırır ○ Basit dili ve yapısı sayesinde geliştirme süresini kısaltır ○ Esnek veri modeli ve standart dosya formatlarına destek sağlayar (text, binary, sequence, json vs.) ○ SQL'den alışık olduğumuz veri işleme ifadelerine benzer ifadeler kullanılır (group by, order by vs.) ○ Pig kodları optimize edilir ■ Örnek: İki farklı gruplama işlemi otomatik olarak birleştirilebilir
  • 20. 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;
  • 21. Nasıl Çalıştırılır? ● Konsol üzerinden ○ grunt> ● Script olarak ○ pig -f source.pig ● Programatik olarak ○ Java yardımıyla program içerisinden çağırabilir
  • 22. Pig Latin ve SQL ● SQL şema tabanlıdır, Pig Latin esnektir ● SQL sorgulama dilidir, sonuç odaklıdır, verinin nasıl işleneceği ile ilgilenilmez ● Pig Latin verinin işlenmesi ile ilgili kullanıcıya daha fazla kontrol sunar ● SQL ile aynı anda bir sorunun cevabı alınabilir. Birden fazla cevap için iç içe sorgular veya geçici tablolar kullanılır ● Pig Latin ile seri halinde uzun operasyonlar sırayla gerçekleştirilebilir
  • 23. Pig Latin ve SQL /* SQL ornegi */ CREATE TEMP TABLE t1 AS SELECT customer, sum(purchase) AS total_purchases FROM transactions GROUP BY customer; SELECT customer, total_purchases, zipcode FROM t1, customer_profile WHERE t1.customer = customer_profile.customer; -- Pig ornegi txns = load 'transactions.csv' as (customer, purchase); grpd = group txns by customer; totl = foreach grpd generate group, SUM(txns.purchase) as tp; prfl = load 'customer_profile.csv' as (customer, zipcode); rslt = join totl by group, prfl by customer; dump rslt;
  • 24. Veri Tipleri ● Basit veri tipleri ○ int, long, float, double ○ bytearray, chararray ● Kompleks veri tipleri ○ Map ○ Tuple (row) ○ Bag (list of tuples)
  • 25. Şema Kullanımı ● Şema kullanımı 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;
  • 26. Pig Latin ● Veri işlemek için birçok ifadeyi destekler ○ Veri yükleme ve kaydetme (Load, Store, Dump) ○ Filtreleme (Filter, Distinct, Foreach, Sample) ○ Gruplama (Join, Group, Cogroup, Cross) ○ Sıralama (Order, Limit) ○ Ayırma ve birleştirme (Union, Split)
  • 27. Pig Latin ● JOIN örneği 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; ● Parallel özelliği txns = load 'transactions.csv' as (customer, purchase); -- gruplama isleminde 10 reducer kullan grpd = group txns by customer parallel 10;
  • 28. UDF ● Java 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(); } }
  • 29. 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 ● Piggybank isimli hazır fonksiyonların olduğu bir kütüphane de mevcuttur
  • 30. Hive Apache Hive, SQL benzeri bir arayüz yardımıyla Hadoop üzerinde sorgulama ve Veri Ambarı (Datawarehouse) uygulamaları geliştirmeyi sağlayan bir projedir.
  • 31. Hive ● Hadoop üzerindeki yapılandırılmış verinin yönetilmesini ve sorgulanmasını sağlar ○ Veriler HDFS üzerinde saklanır ○ Saklanan bu veriler tablo olarak tanımlanır ○ Bu tablolar üzerinden SQL benzeri HiveQL ile MapReduce programları yazılabilir ○ Zengin veri tipleri sunar (struct, array, map vs.) ○ Farklı formatta tutulan verileri sorgulayabilir (text, binary, sequence vs) ○ Genişletilebilir (UDF, SerDe) ○ Veri hakkındaki meta bilgisini de yönetir ○ Ölçeklenebilir ve performanslıdır
  • 32. WordCount.hiveql /* 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;
  • 33. Nasıl Çalıştırılır? ● Konsol üzerinden ○ hive> ● Script olarak ○ hive -f source.sql ○ hive -e 'select * from test'
  • 34. Veri Tipleri ● Basit veri tipleri ○ TINYINT, SMALLINT, INT, BIGINT ○ BOOLEAN, FLOAT, DOUBLE ○ STRING, BINARY, TIMESTAMP, DECIMAL ● Kompleks veri tipleri ○ ARRAY<data_type> ○ MAP<primitive_type, data_type> ○ STRUCT<col_name : data_type, ...> ○ UNIONTYPE<data_type, data_type, ...>
  • 35. Veri Yapısı ● Tablo (Table) ○ Kolonlardan oluşur (int, double, date, string, vs.) ○ Gelişmiş tipleri de destekler (array, struct, map, vs.) ○ Aslında HDFS üzerindeki bir klasöre denk gelir ○ MANAGED tablolar hive.metastore.warehouse.dir ile belirtilen yerde saklanır (/user/hive/warehouse) ○ Tablolar EXTERNAL olarak da tanımlanabilir ○ Gerçek veriler düz dosyalarda (text, binary, sequence) tutulur /user/hive/warehouse/mydb.db/employees
  • 36. Veri Yapısı ● Tablo yaratmak 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;
  • 37. Veri Yapısı ● Bölünmüş (Partitioned) Tablolar ○ Tablolar belirli kolonlarına göre bölünerek saklanabilir ○ Bölme işlemi daha sonra yapılacak sorgulamalara göre yapılırsa performans sağlanır ○ Bölünmüş tablolar alt klasörler içerisinde saklanır /user/hive/warehouse/mydb.db/employees/country=CA/state=AB /user/hive/warehouse/mydb.db/employees/country=CA/state=BC /user/hive/warehouse/mydb.db/employees/country=US/state=AL /user/hive/warehouse/mydb.db/employees/country=US/state=TX ...
  • 38. Veri Yapısı ● Bölünmüş tablo yaratmak CREATE TABLE employees ( name STRING, salary FLOAT, subordinates ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> ) PARTITIONED BY (country STRING, state STRING);
  • 39. Metastore ● Veri hakkındaki meta bilgisini de yönetir ○ Tablolar ile ilgili kolonların tipleri ○ HDFS üzerinde dosyaların konumu ○ Partitioning bilgisi ○ SerDe ayarları ○ İstatistik ○ Datanucleus ORM ile geliştirilmiştir, Derby, MySQL ve benzeri RDBMS kullanılabilir
  • 40. Veri Giriş Çıkışı ● LOAD DATA komutuyla veri yüklenebilir LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] ● Sorgu sonuçları tablolara kaydedilebilir INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement; ● Tablolardaki veriler dışarı aktarılabilir INSERT OVERWRITE [LOCAL] DIRECTORY 'directory1' select_statement1 FROM from_statement;
  • 41. 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
  • 42. Sorgular ● JOIN örneği ○ Sadece eşitlik üzerinden bağ kurulabilir ○ 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)
  • 43. UDF ● Kullanıcılar kendi fonksiyonlarını geliştirebilirler 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(); } }
  • 44. SerDe ● (Se)rialization/(De)serialization işlemleri için SerDe arayüzünü sağlar 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';
  • 46. 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*
  • 48. Sorular? ?