DevVeri.com

Boğulacaksan büyük veride boğul!

Apache Pig – Domuzcuğun Hikayesi


pig-on-elephantApache Pig

Apache Pig, Apache Hadoop üzerinde prosedurel bir data akışı yazmayı sağlayan bir veri işleme platformudur. Veri kullanıcılarına Hadoop’un güçlü, dağıtık ve esnek yapısına ileri seviye java kodları yazmadan daha üst bir katmandan erişim imkanı sağlayan bir yapıdır.

Pig’in iki önemli bileşeninden Pig Latin dilini kullanarak kullanıcılar data akışı scriptleri yazabilirler ve Pig bunları Hadoop üzerinde MapReduce kodlarına çevirerek run eder. Pig’in en büyük getirisi Java bilmeyen kullanıcılara da Hadoop üzerinde üstseviye prosedurel bir script dili ile veriye ulaşma ve işleme imkanı vermesi, Map Reduce programları yazmaya gerek bırakmamasıdır.

Tabi şöyle bir problem veya risk yine buradada olacak; nasıl ki RDBMS üzerinde veri modeli, veri uzmanlığı olmayan kullanıcılar performans problemlerine yol açan anlamsız bazı SQL’ler yazabiliyorsa burada da pig latin scriptleriyle yazılan scriptlerde de benzer bir risk var. Aynen SQL’de olduğu gibi veri konusunda uzman veriyi iyi tanıyan kişilerin kontrolu altında bu data akışlar yazılmalıdır. Kullanıcı nerede hangi veriye hangi join yapacağını iyi bilmelidir.

Bu riski eski Yahoo Pig geliştirme ekibinden Alan Gates Pig’i şöyle tanımlıyor “ “Because… Pig is domestic animal, does whatever you tell it to do.”
Yani “Çünkü…Pig evcil bir hayvandır, ne söylerseniz onu yapar. ”

Pig

Pig, Yahoo bunyesindeki bir geliştirme ekibi tarafından Hadoop üzerinde veri transform ve analiz işlemlerini yazmayı hızlandırmak amacıyla geliştirildi. Alan Gates’de bu ekibin üyelerinden biriydi daha sonra kendisi şu anda Hadoop dünyasının önemli katkı veren şirketlerinden Hortonworks’un kurucularından birisi oldu.

Alan Gates’in O’Reilly’den Pig Programming kitabına ulaşmak için : http://www.gocit.vn/files/Oreilly.Programming.Pig-www.gocit.vn.pdf

Yazılan Pig Latin scripti bir dizi Map ve Reduce işlerine dönüştürülüyor ve Hadoop üzerinde çalıştırılıyor. Pig kodu geliştiricisi yazdığı Pig Latin scriptinin arka tarafta kaç adet MapReduce koduna çevrildiğini, compile edildiğini, paketlenip çalıştırılarak sonuçların getirildiğini farketmiyor. Bunu ancak logdaki ifadelere bakarak anlayabiliyor.

Nerelerde kullanılabilir

ETL (Extract-Transform-Load) işlemlerinde ve özellikle de ETL’in “T”’si Transform işlemlerinde kullanılabilir, tabi klasik RDBMS üzerindeki ETL’den farklı bir bakış gerektirecektir.

Ham Veri üzerindeki bazı ön araştırma, veri temizliği, analiz, hazırlık işlemlerinde Doğrusal veya DAG yapısında kompleks veri işleme ve dönüştürme akışlarında

Pig ismi nereden geliyor

Pig’in geliştiricilerinden Alan Gates bu konuda kendilerine çok soru geldiğini, Pig isminin bir kısaltma olmadığını ekipteki bir kişinin bu ismi bulduğunu ve sonra hoşlarına gittiğini ifade ederken, IBM’in bu konudaki yorumu bana çok daha anlamlı ve güzel geldi. “Nasılki bir domuz, önüne koyduğunuz (hatta koymadığınız) her şeyi yiyebildiği gibi, Pig’de gösterdiğiniz her türlü veriyi işleyebildiği için Pig(Domuzcuk) adını almıştır.”

Pig deyince

Aslında Pig deyince iki şeyden bahsediyoruz; birincisi Pig Latin diye isimlendirilen programlama dili, diğeri Hadoop sistemi üzerindeki Pig Latin kodlarının çalıştırıldığı ortam.

Pig latin programlama diline baktığımızda alt alta birbirini takip eden adımlar halinde prosedurel bir dil ile karşılaşıyoruz. Her adımda oluşan veri bir sonraki adıma aktarılabiliyor ancak saklanmıyor. Yani session bittiğinde ara bir adımdaki verinizi kalıcı hale getirmediyseniz ulaşamıyorsunuz. Bunu data işleme üzerine geliştirilmiş Base SAS programlama diline benzetebiliriz. SAS kodlarıda alt alta adımlardan oluşur her adımda bir işlem yapılarak devam edilir, eğer kalıcı hale getirmezseniz session bittiğinde ara adımlardaki veriler kaybolur.

Pig’i en genel haliyle 3 adımdan ibarettir diyebiliriz.

  1. Veriye ulaşma; HDFS sisteminden işlenecek veriyi load etme adımı
  2. Veri işleme veri dönüştürme amaçlı transform adımları
  3. Dump yani çıkan sonuç verisini bir yere saklama veya ekrana getirme adımı

Çalıştırma

Pig kodlarını çalıştırmak için 3 farklı opsiyonumuz var.

Script: Piglatin komutlarından oluşan .pig Script’leri oluşturmak ve bunları bir arayuz veya komut satırından çalıştırmak
Not: Normal şartlarda Pig verilen akıştaki her işlemi dönen sonuç değerine bakmaksızın baştan sona çalıştırır. Eğer akışta bir adımda hata alınırsa ve genel akışın durmasını isterseniz pig scriptinizi çalıştırırken “-F” veya “-stop_on_failure” opsiyonu verebilirsiniz. Yani;

$ pig -F pigisleri.pig
yada
$ pig -stop_on_failure pigisleri.pig
İle Pig scriptiniçalıştırmanız gerekir.
Shell mode: Grunt, Pig’in interaktif shell ortamıdır. Piglatin komutlarını shell ortamında çalıştırabilirsiniz.
Embedded: Pig programları Java kodlarının içindende çalıştırılabilir.

Pig Extensible

Pig’in güçlü yanlarından biriside Pig tarafından sağlanan fonksiyon ve komutlar sizin için yeterli olmazsa, java bilginizde yeterliyse kendi fonksiyonlarınızıda tanımlayabilir ve bunlarıda scripleriniz içinde kullanabilirsiniz.

Pig Latin’in üstün yanları

Pig’in en önemli bileşeni Hadoop üzerinde çalışan Pig Latin programlama dili veri işlemede pek çok avantaj sağlar

Prosedurel Yapısı

A = Load Data
C = Transform A
D= Transform C
Dump D

Yukarıda verilen Pig Latin’in genelleştirilmiş yapısına baktığımızda alt alta adımlarla baştan sona veri işleme akışı net olarak görülebiliyor. Her adımın sonucu bir sonraki adımda kullanılarak zincirleme anlaşılabilir bir akış sözkonusu.

Kontrol Noktaları

Pig Latin koduna baktığınızda her adımda oluşan verinin bir sonraki adıma aktarıldığını ancak saklanmadığını görüyoruz. Veri ile uğraşanlar iyi bilir, peki akışta bir yerde bir kesinti veya hata alınırsa ne olacak, çok uzun süre çalışmış veya kritik bir verinizi kaybetmeyi göze alabilir misiniz? Bunun çözümü için Pig Latin kodunuzda, akışınızın kritik noktalarına verilerinizi kalıcı tutmayı sağlayan bazı adımlar koyabilirsiniz. Yukarıdaki örnekte diyelimki C verisi kritik.

A = Load Data
C = Transform A
Store C into ‘Csakla’;
D= Transform C
Dump D

Bu şekilde C verisi Csakla ile kalıcı olarak korunur.

Optimizasyon

Pig Latin ile geliştirilmiş script kodları SQL benzeri ( Sort, Group By, Join ..) pek çok işlem yapmakta olabilirler. Bu nedenle bunları yazarken domain bilgisi, veriyi iyi tanıma, büyük veri işlemeyi bilmek gerekir.

Ayrıca Pig’in yazılan kodu nasıl yorumlayacağını nerelerde bazı hintler kullanılabileceği bilinmelidir. Optimizasyon konusu ayrı bir yazı konusudur.

DAG (Directed acyclic graph) Graf yapısı

Pig Latin kodları için veri akışı yazmaya olanak sağlar demiştik. Bu akış baştan sona birbirini takip eden adımlar olabileceği gibi bastan itibaren paralel bir şekilde ikili üçlüde devam edebilen Graf şeklinde flowlarda yapılabilir.

Pig Uzmanlığı

2008 yılında ilk versiyonu yayınlanan Apache Pig 2009 yılından hızla populer hale gelmeye basladı. Öyleki 2009 yılı sonunda Yahoo’nun aradığı hadoop job ilanlarından yarısı Pig job’larıydı.

Sonuç

Pig Latin geleneksel programlama dillerinden veya SQL’den farklı bir paralel veri işleme akışı dilidir. Veri kaynaklarının ve tiplerinin giderek çeşitlendiği, hızlı veri işlemenin daha önemli hale geldiği bir dünya Pig ‘i daha da önemli hale getirmektedir.

Pig’in ne olup ne olmadığı ile ilgili SQL ile karşılaştırmalı bir analiz yapabiliriz. SQL neredeyse günümüzde bir analiz yapmak veya bir rapor almak isteyen herkesin bildiği, tanıdığı bir sorgu dilidir. Ancak SQL bu kadar yaygın olmasına rağmen sadece RDBMS üzerinde şeması, yapısı belli veriler üzerinde sorgu için kullanılır.

Buna karşın Pig, Hadoop’un güçlü paralel ve dağıtık veri işleme yeteneğini kullanarak ham, doğal halde, farklı tiplerde pek çok veri üzerinde işlem yapmayı sağlamaktadır.

Alan Gates’in bu konuda yine güzel bir benzetme yapıyor;

“Diyelimki ben çok iyi ingilizce ve çok az da fransızca biliyorum, buna karşın eşim çok iyi fransızca konuşabiliyor. İkimizde gezmek için Fransa’ya gidiyoruz, ben Fransa gezim sırasında herkesin az çok bildiği global bir dil olan ingilizcemin geçerli olduğu daha çok turistik alanları, şehir merkezlerini rahatça gezebiliyorken, eşim ise gezisi sırasında çok iyi Fransızca biliyor olması sebebiyle, Fransa’nın pek turistlerin uğramadığı en ücra kasabalarını keşfedebiliyor, oralardaki kişilerle konuşabiliyor, benim ulaşamadığım pek çok şeyi öğrenebiliyor. Onun Fransa gezisi sonucu elde ettiği bilgiler, deneyim benden çok farklı, çünkü o yörenin ana dilini biliyor.

İşte SQL veriye ulaşma, veriyi sorgulama dünyasının ingilizcesi, herkes biliyor, herkes kullanabiliyor, ancak ulaşabildiği veriler sınırlı, Pig Latin ise lokal dilleri ifade ediyor, SQL ile ulaşılamaya yerlere, verilere ulaşıyor, daha fazla sayıda veriyi işleyebiliyor, Hadoop ile entegre olarakda paralel ve hızlı olarak bunu yapabiliyor “

Referanslar

[1] http://pig.apache.org/
[2] http://pig.apache.org/docs/r0.7.0/piglatin_ref1.html
[3] http://pig.apache.org/docs/r0.9.1/perf.html
[4] http://sites.computer.org/debull/A13mar/gates.pdf
[5] http://www-01.ibm.com/software/data/infosphere/hadoop/pig/
[6] http://developer.yahoo.com/blogs/hadoop/comparing-pig-latin-sql-constructing-data-processing-pipelines-444.html [7] http://www.slideshare.net/Hadoop_Summit/innovations-in-apache-hadoop-mapreduce-pig-hive-for-improving-query- performance
[8] http://infolab.stanford.edu/~usriv/papers/pig-latin.pdf
[9] Alan Gates, Programming Pig , O’Reilly, 2011
[10] http://hortonworks.com/blog/pig-performance-and-optimization-analysis/
[11] http://blog.cloudera.com/wp-content/uploads/2010/01/IntroToPig.pdf

, ,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.