220 likes | 828 Views
Apache Pig ile Büyük Veri Analizi. Berkin Gülay 10011038 Doğukan Murat Kabatepe 09011052 . Ajanda. MapReduce Nedir ? Apache Pig Nedir ? Apache Pig’in Özellikleri ve Avantajları Apache Pig Kullanımı Last FM Veritabanı Örneği Hadoop Kullanılarak Yapılan Apache Pig Demo Uygulaması.
E N D
ApachePig ile Büyük Veri Analizi Berkin Gülay 10011038 Doğukan Murat Kabatepe 09011052
Ajanda • MapReduce Nedir ? • ApachePig Nedir ? • ApachePig’in Özellikleri ve Avantajları • ApachePigKullanımı • Last FM Veritabanı Örneği • Hadoop Kullanılarak Yapılan ApachePig Demo Uygulaması
MapReduce • Google tarafından geliştirilmiştir • Dağıtık mimari üzerinde büyük verilerin analiz edilmesi • Java tabanlı • Map ve Reduce fonksiyonları
Map • Ana düğüm verileri alır ve işçi düğümlere dağıtır • İşçi düğümler sonuçları ana düğüme gönderir • Select cümlesi ile seçme, where ile sınırlama • İşlemler birbirinden bağımsız, paralel yapıda çalışır.
Reduce • Map aşaması sonucunda alınan verilerin analizi • Veri üzerinde count, sumhaving gibi işlemler
MapReduce • Çok büyük verileri analiz etmek için milyon dolarlık makine ihtiyacının ortadan kalkması • Google, Facebook, Twitter gibi şirketler kullanır
ApachePig nedir? • ApacheHadoop üzerinde prosedurel bir data akışı yazmayı sağlayan bir veri işleme platformu • İki parçadan oluşur --Pig Latin --PigEngine
Neden ApachePig? • Üretkenliği dramatik bir şekilde arttırır. • Pig Latin ile farklı formatta verileri yükleyip, bu veriler üzerinde filtreleme, sıralama, grouplama, aritmetik işlemler ve en önemlisi join’ler yapabiliyorsunuz. Yani SQL ile yapabildiğiniz neredeyse herşeyiPig ile yapabilmeniz mümkün. • Aslında Pig’in çalışması için Hadoop’un kurulu olması gerekmiyor. Yani “standalone” modunda da veri analizi yapılabiliyor. Bu özelliği sayesinde kodları kendi bilgisayarınızda test edebiliyorsunuz. Ancak veri işleyebilmek için veri setlerinin Hadoop üzerinden verilmesi gerekiyor. Bundan dolayı kurulum dökümanındaHadoop kurulumuna da değindik. Örnek: 18-25 yaş aralığındaki kullanıcıların en çok ziyaret ettiği 5 site --PigLatin ile 10 satır kod = Java MapReduce ile 200 satır kod --PigLatin kodu yazmak 15 dakika, Java kodu yazmak 4 saat
Pig Latin neler barındırır? • Anlaşılması kolay, yüksek seviye bir veri akış dili. • -Veri işlemleri (filter, join, order) • -İç içe geçmiş tipler (tuple, bag, map) • -Hadoop'unjava programcısı olmayanların da kullanılmasına olanak tanır.
Pig nasıl çalışır? - script yazılır -script parse edilir -optimize edilir -execution planlanır -jar dosyasıHadoop'agönderilir -tanımlananişmonitöredilir
Pig Latin scriptleri geliştirmek • -EclipsePluginleri: • PigEditor, PigPen, Pig-Eclipse • -Vim, Emacs, TextMatepluginleri
Piglatinscriptleri çalıştırmak • -HadoopMode: Hadoop'un özelliklerinden faydalanılır. • -Scripti doğrudan çalıştırma (batchmode) : • $ pig -p input=someInputscript.pig • script.pig • Lines = LOAD '$input' AS (...); • -Pig Shell: • grunt> Lines = LOAD '/data/books/' • AS (line: chararray); • grunt> Unique = DISTINCT Lines; • grunt> DUMP Unique;
Pig ne kadar hızlı? • -Ortalamada, MapReduce'dan 1.16x yavaş (PigMix2 benchmark sorgularına göre) • -Pig vs. MapReduce: Pig, MapReduce sorgularına dönüştürülür, bu yüzden iyi yazılmış bir MapReduce kodundan hızlı olamaz. Pig'de yapılan optimizasyonlar sebebiyle bazen MR kodlarından hızlı çalışabilir. MR konusunda tecrübesi olmayan programcıların yazdığı kodlar, Pig'den yavaş çalışır.
Pig Latin veri tipleri • -Skaler tipler int, long, float, double, chararray, bytearray, boolean • -Kompleks tipler Tuple: Herhangi tipte olabilen alanların dizisi ('Poland', 2, 0.66) Bag: Tuple koleksiyonu {('Poland', 2), ('Greece'), (3.14)} Map: Anahtar/Değer ikilileri. Anahtarlar karakter dizisi olmalıdır. Değer ise herhangi bir tip olabilir ['Poland'#'Euro2012']
Last.FM veri tabanı • ● Veriler tablar ile ayrılmış iki dosyada bulunur ○ yaklaşık 1000 kullanıcı tarafından dinlenen parçalar userid <tab> timestamp <tab> musicbrainz-artist-id <tab> artist-name <tab> musicbrainz-track-id <tab> track-name ○ kullanıcı profilleri userid <tab> gender ('m'|'f'|empty) <tab> age (int|empty) <tab> country (str|empty) <tab> signup (date|empty) ● ~2.35GB veri miktarı
Hadoop Kullanılarak Yapılan ApachePig Demo Uygulaması • Pig’inçalışma prensibini görmek için sadece verilerimizi yükleyip konsola basan bir script yazalım. • A = LOAD 'products.csv' USING PigStorage(); • B = FOREACH A GENERATE $0 AS id, $1 AS name; • dump B; İlk satırda A değişkenine products.csv dosyası içerisindeki verileri PigStorage ile yükleyeceğimizi belirtiyoruz. PigStorage sınıfı jenerik olarak yazılmış, csv formatındaki verileri yükleyip parçalayabilen bir sınıf. Örnek verimiz tab karakteri ile ayrılmış olduğu için başka bir parametre belirtimiz yok. İkinci satırda ise A verisi içerisinde foreach döngüsüyle dönüyoruz. Buraya kadar olan kısımda henüz yazdığımız kodlar çalışmadılar. DUMP komutu ile kodların çalışmasını ve sonucun ekrana çıkmasını sağlıyoruz.
Hadoop Kullanılarak Yapılan ApachePig Demo Uygulaması • Örneğimizi biraz ilerletirsek companies.csv dosyasını yükleyip içersindeid alanı 3 değerinden büyük olan firmaları bulan kodu test.pig dosyası içerisine yazalım. ( Companies.csv ve products.csv dosyası hadoop a import edilmiş dosyalardır ) • A = LOAD 'companies.csv' USING PigStorage() AS (productId:int, productName:chararray); • B = FILTER A BY productId > 3; • C = FOREACH B GENERATE *; • DUMP C; İlk örnekten farklı olarak B değişkenimize “FILTER” metoduyla verileri filtreleyerek atıp dump ile yazdırıyoruz.
Hadoop Kullanılarak Yapılan ApachePig Demo Uygulaması • Son olarak, products.csv ve companies.csv dosyalarını join operasyonuyla birleştirip, sonucu HDFS üzerinde pigresult klasörüne kaydeden bir örnek yapalım. • /* loadproducts */ • A1 = LOAD 'products.csv' USING PigStorage() AS (productId:int, productName:chararray); • B1 = FOREACH A1 GENERATE productId, productName; • /* loadcompanies */ • A2 = LOAD 'companies.csv' USING PigStorage() AS (productId:int, companyName:chararray); • B2 = FOREACH A2 GENERATE productId, companyName; • /* join */ • J = JOIN B1 BY productId, B2 BY productId; • R = FOREACH J GENERATE $0, $1, $3; • STORE R INTO 'pigresult' USING PigStorage();