Apache Pig - Hızlı Kılavuz
Apache Pig nedir?
Apache Pig, MapReduce üzerinde bir soyutlamadır. Veri akışları olarak temsil eden daha büyük veri kümelerini analiz etmek için kullanılan bir araç / platformdur. Domuz genellikleHadoop; Apache Pig kullanarak Hadoop'ta tüm veri işleme işlemlerini gerçekleştirebiliriz.
Veri analizi programları yazmak için Pig, şu adla bilinen üst düzey bir dil sağlar: Pig Latin. Bu dil, programcıların verileri okumak, yazmak ve işlemek için kendi işlevlerini geliştirebilecekleri çeşitli operatörler sağlar.
Verileri kullanarak analiz etmek için Apache Pigprogramcıların Pig Latin dilini kullanarak komut dosyaları yazması gerekir. Tüm bu komut dosyaları dahili olarak Harita ve Azaltma görevlerine dönüştürülür. Apache Pig olarak bilinen bir bileşen vardırPig Engine Pig Latin komut dosyalarını girdi olarak kabul eder ve bu komut dosyalarını MapReduce işlerine dönüştürür.
Apache Pig'e Neden İhtiyacımız Var?
Java konusunda çok iyi olmayan programcılar normalde Hadoop ile çalışırken, özellikle de herhangi bir MapReduce görevini gerçekleştirirken zorluk çekerlerdi. Apache Pig, bu tür tüm programcılar için bir nimettir.
Kullanma Pig Latinprogramcılar, Java'da karmaşık kodlar yazmak zorunda kalmadan MapReduce görevlerini kolayca gerçekleştirebilirler.
Apache Pig kullanır multi-query approach, böylece kodların uzunluğunu azaltır. Örneğin, Java'da 200 satır kod (LoC) yazmanızı gerektiren bir işlem, Apache Pig'de sadece 10 LoC'den daha az yazı yazarak kolayca yapılabilir. Sonuçta Apache Pig, geliştirme süresini neredeyse 16 kat azaltır.
Domuz Latince SQL-like language ve SQL'e aşina olduğunuzda Apache Pig'i öğrenmek kolaydır.
Apache Pig, birleştirmeler, filtreler, sıralama vb. Gibi veri işlemlerini desteklemek için birçok yerleşik operatör sağlar. Ayrıca, MapReduce'ta eksik olan tuple, çanta ve haritalar gibi iç içe veri türleri de sağlar.
Domuzun Özellikleri
Apache Pig aşağıdaki özelliklerle birlikte gelir -
Rich set of operators - Birçok operatörün birleştirme, sıralama, filtreleme vb. İşlemleri gerçekleştirmesini sağlar.
Ease of programming - Pig Latin, SQL'e benzer ve SQL'de iyiyseniz Pig komut dosyası yazmak kolaydır.
Optimization opportunities - Apache Pig'deki görevler, yürütmelerini otomatik olarak optimize eder, bu nedenle programcıların yalnızca dilin anlambilimine odaklanmaları gerekir.
Extensibility - Kullanıcılar, mevcut operatörleri kullanarak verileri okumak, işlemek ve yazmak için kendi işlevlerini geliştirebilirler.
UDF’s - Pig tesisin yaratmasını sağlar User-defined Functions Java gibi diğer programlama dillerinde ve bunları Pig Komut Dosyalarına çağırın veya gömün.
Handles all kinds of data- Apache Pig, hem yapılandırılmış hem de yapılandırılmamış her türlü veriyi analiz eder. Sonuçları HDFS'de depolar.
Apache Pig Vs MapReduce
Aşağıda, Apache Pig ve MapReduce arasındaki başlıca farklar listelenmiştir.
Apaçi Domuzu | Harita indirgeme |
---|---|
Apache Pig bir veri akışı dilidir. | MapReduce bir veri işleme paradigmasıdır. |
Yüksek seviyeli bir dildir. | MapReduce düşük seviyeli ve katıdır. |
Apache Pig'de bir Birleştirme işlemi gerçekleştirmek oldukça basittir. | Veri kümeleri arasında bir Birleştirme işlemi gerçekleştirmek MapReduce'ta oldukça zordur. |
Temel SQL bilgisine sahip herhangi bir acemi programcı Apache Pig ile rahatça çalışabilir. | Java'ya maruz kalma, MapReduce ile çalışmalıdır. |
Apache Pig, çoklu sorgulama yaklaşımını kullanır, böylece kodların uzunluğunu büyük ölçüde azaltır. | MapReduce, aynı görevi gerçekleştirmek için neredeyse 20 kat daha fazla satır gerektirir. |
Derlemeye gerek yoktur. Yürütme sırasında, her Apache Pig operatörü dahili olarak bir MapReduce işine dönüştürülür. | MapReduce işlerinin uzun bir derleme süreci vardır. |
Apache Pig ve SQL
Aşağıda Apache Pig ve SQL arasındaki temel farklar listelenmiştir.
Domuz | SQL |
---|---|
Domuz Latince bir procedural dil. | SQL bir declarative dil. |
Apaçi Domuzunda, schemaİsteğe bağlı. Bir şema tasarlamadan verileri depolayabiliriz (değerler şu şekilde saklanır$01, $02 vb.) | SQL'de şema zorunludur. |
Apache Pig'deki veri modeli nested relational. | SQL'de kullanılan veri modeli is flat relational. |
Apache Pig, aşağıdakiler için sınırlı fırsat sağlar: Query optimization. | SQL'de sorgu optimizasyonu için daha fazla fırsat var. |
Yukarıdaki farklılıklara ek olarak, Apache Pig Latin -
- İşlem hattında bölmelere izin verir.
- Geliştiricilerin ardışık düzen içinde herhangi bir yerde veri depolamasına izin verir.
- Uygulama planlarını açıklar.
- Operatörlerin ETL (Çıkart, Dönüştür ve Yükle) işlevlerini gerçekleştirmesini sağlar.
Apache Pig Vs Kovan
MapReduce işleri oluşturmak için hem Apache Pig hem de Hive kullanılır. Ve bazı durumlarda, Hive, HDFS üzerinde Apache Pig'in yaptığı gibi çalışır. Aşağıdaki tabloda, Apache Pig'i Hive'dan ayıran birkaç önemli noktayı listeledik.
Apaçi Domuzu | Kovan |
---|---|
Apache Pig, Pig Latin. Başlangıçta şu saatte oluşturuldu:Yahoo. | Hive adlı bir dil kullanır HiveQL. Başlangıçta şu saatte oluşturuldu:Facebook. |
Domuz Latince bir veri akışı dilidir. | HiveQL, bir sorgu işleme dilidir. |
Pig Latince prosedürel bir dildir ve boru hattı paradigmasına uymaktadır. | HiveQL, bildirim temelli bir dildir. |
Apache Pig, yapılandırılmış, yapılandırılmamış ve yarı yapılandırılmış verileri işleyebilir. | Hive, çoğunlukla yapılandırılmış veriler içindir. |
Apache Pig Uygulamaları
Apache Pig, genellikle veri bilimcileri tarafından geçici işleme ve hızlı prototip oluşturmayı içeren görevleri gerçekleştirmek için kullanılır. Apache Pig kullanılır -
- Web günlükleri gibi büyük veri kaynaklarını işlemek için.
- Arama platformları için veri işlemeyi gerçekleştirmek.
- Zamana duyarlı veri yüklerini işlemek için.
Apache Pig - Tarihçe
İçinde 2006Apache Pig, özellikle her veri kümesinde MapReduce işleri oluşturmak ve yürütmek için Yahoo'da bir araştırma projesi olarak geliştirildi. İçinde2007Apache Pig, Apache inkübatörü aracılığıyla açık kaynaklıydı. İçinde2008Apache Pig'in ilk sürümü çıktı. İçinde2010Apache Pig, Apache üst düzey proje olarak mezun oldu.
Pig kullanarak Hadoop'ta verileri analiz etmek için kullanılan dil şu şekilde bilinir: Pig Latin. Veriler üzerinde çeşitli işlemleri gerçekleştirmek için zengin bir veri türü ve operatör kümesi sağlayan yüksek düzeyli bir veri işleme dilidir.
Programcıların Pig kullanarak belirli bir görevi gerçekleştirmek için, programcıların Pig Latin dilini kullanarak bir Pig betiği yazmaları ve bunları yürütme mekanizmalarından herhangi birini (Grunt Shell, UDFs, Embedded) kullanarak yürütmeleri gerekir. Yürütmeden sonra, bu komut dosyaları istenen çıktıyı üretmek için Pig Framework tarafından uygulanan bir dizi dönüşümden geçecektir.
Apache Pig, dahili olarak bu komut dosyalarını bir dizi MapReduce işine dönüştürür ve böylece programcının işini kolaylaştırır. Apache Pig'in mimarisi aşağıda gösterilmiştir.
Apache Pig Bileşenleri
Şekilde gösterildiği gibi, Apache Pig çerçevesinde çeşitli bileşenler bulunmaktadır. Ana bileşenlere bir göz atalım.
Ayrıştırıcı
Başlangıçta Domuz Komut Dosyaları, Ayrıştırıcı tarafından işlenir. Komut dizisinin sözdizimini kontrol eder, tip kontrolü ve diğer çeşitli kontroller yapar. Ayrıştırıcının çıktısı, Pig Latin ifadelerini ve mantıksal işleçleri temsil eden bir DAG (döngüsel olmayan grafik) olacaktır.
DAG'de, komut dosyasının mantıksal operatörleri düğümler olarak temsil edilir ve veri akışları kenarlar olarak temsil edilir.
Optimizer
Mantıksal plan (DAG), projeksiyon ve aşağı itme gibi mantıksal optimizasyonları gerçekleştiren mantıksal optimize ediciye aktarılır.
Derleyici
Derleyici, optimize edilmiş mantıksal planı bir dizi MapReduce görevi halinde derler.
Yürütme motoru
Son olarak, MapReduce işleri sıralı bir sırada Hadoop'a gönderilir. Son olarak, bu MapReduce işleri, istenen sonuçları vererek Hadoop'ta yürütülür.
Domuz Latin Veri Modeli
Pig Latin veri modeli tamamen yuvalanmıştır ve aşağıdaki gibi karmaşık atomik olmayan veri türlerine izin verir. map ve tuple. Aşağıda, Pig Latin'in veri modelinin şematik temsilidir.
Atom
Pig Latince'deki herhangi bir tek değer, verilerinden bağımsız olarak, tür olarak bilinir Atom. String olarak saklanır ve string ve sayı olarak kullanılabilir. int, long, float, double, chararray ve bytearray Pig'in atomik değerleridir. Bir veri parçası veya basit bir atomik değer,field.
Example - 'raja' veya '30'
Tuple
Sıralı bir alan kümesi tarafından oluşturulan bir kayıt, bir demet olarak bilinir, alanlar herhangi bir türde olabilir. Bir demet, RDBMS tablosundaki bir satıra benzer.
Example - (Raja, 30)
Sırt çantası
Çanta, sıralanmamış bir demet kümesidir. Başka bir deyişle, bir grup (benzersiz olmayan) bir çanta olarak bilinir. Her demet herhangi bir sayıda alana sahip olabilir (esnek şema). Çanta, '{}' ile temsil edilir. RDBMS'deki bir tabloya benzer, ancak RDBMS'deki bir tablodan farklı olarak, her dizinin aynı sayıda alan içermesi veya aynı konumdaki (sütun) alanların aynı türe sahip olması gerekmez.
Example - {(Raja, 30), (Muhammed, 45)}
Çanta, ilişkideki bir alan olabilir; bu bağlamda olarak bilinirinner bag.
Example- {Raja, 30, {9848022338, [email protected],} }
Harita
Bir harita (veya veri haritası), bir dizi anahtar-değer çiftidir. keychararray türünde olmalı ve benzersiz olmalıdır. valueherhangi bir türde olabilir. "[]" İle temsil edilir
Example - [isim # Raja, 30 yaşında]
İlişki
Bir ilişki bir demet torbasıdır. Domuz Latince'deki ilişkiler sırasızdır (tupleların belirli bir sırada işleneceğinin garantisi yoktur).
Bu bölüm nasıl indirileceğini, kurulacağını ve kurulacağını açıklar Apache Pig sisteminizde.
Önkoşullar
Apache Pig'e gitmeden önce sisteminizde Hadoop ve Java'nın kurulu olması önemlidir. Bu nedenle, Apache Pig'i yüklemeden önce, aşağıdaki bağlantıda verilen adımları izleyerek Hadoop ve Java'yı yükleyin -
http://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm
Apache Pig'i indirin
Öncelikle, aşağıdaki web sitesinden Apache Pig'in en son sürümünü indirin - https://pig.apache.org/
Aşama 1
Apache Pig web sitesinin ana sayfasını açın. Bölümün altındaNews, linki tıkla release page aşağıdaki anlık görüntüde gösterildiği gibi.
Adım 2
Belirtilen bağlantıya tıkladığınızda, şuraya yönlendirileceksiniz: Apache Pig Releasessayfa. Bu sayfada, altındaDownload bölümünde, iki bağlantınız olacak, yani Pig 0.8 and later ve Pig 0.7 and before. Linki tıklaPig 0.8 and later, ardından bir dizi aynanın bulunduğu sayfaya yönlendirileceksiniz.
Aşama 3
Aşağıda gösterildiği gibi bu aynalardan herhangi birini seçin ve tıklayın.
4. adım
Bu aynalar sizi Pig Releasessayfa. Bu sayfa, Apache Pig'in çeşitli sürümlerini içerir. Aralarında en son sürüme tıklayın.
Adım 5
Bu klasörler içinde, çeşitli dağıtımlarda Apache Pig'in kaynak ve ikili dosyalarına sahip olacaksınız. Apache Pig 0.15'in kaynak ve ikili dosyalarının tar dosyalarını indirin,pig0.15.0-src.tar.gz ve pig-0.15.0.tar.gz.
Apache Pig'i yükleyin
Apache Pig yazılımını indirdikten sonra, aşağıda verilen adımları takip ederek Linux ortamınıza kurun.
Aşama 1
Kurulum dizinlerinin bulunduğu dizinde Pig adıyla bir dizin oluşturun. Hadoop, Java,ve diğer yazılımlar yüklendi. (Eğitimimizde, Hadoop adlı kullanıcıda Pig dizinini oluşturduk).
$ mkdir Pig
Adım 2
İndirilen tar dosyalarını aşağıda gösterildiği gibi çıkarın.
$ cd Downloads/
$ tar zxvf pig-0.15.0-src.tar.gz $ tar zxvf pig-0.15.0.tar.gz
Aşama 3
İçeriğini taşı pig-0.15.0-src.tar.gz dosyaya Pig aşağıda gösterildiği gibi daha önce oluşturulmuş dizin.
$ mv pig-0.15.0-src.tar.gz/* /home/Hadoop/Pig/
Apache Pig'i yapılandırın
Apache Pig'i kurduktan sonra, onu yapılandırmamız gerekiyor. Yapılandırmak için iki dosyayı düzenlememiz gerekiyor -bashrc and pig.properties.
.bashrc dosyası
İçinde .bashrc dosya, aşağıdaki değişkenleri ayarlayın -
PIG_HOME Apache Pig kurulum klasörüne klasör,
PATH bin klasörüne ortam değişkeni ve
PIG_CLASSPATH Hadoop kurulumlarınızın etc (konfigürasyon) klasörüne (core-site.xml, hdfs-site.xml ve mapred-site.xml dosyalarını içeren dizin) ortam değişkeni.
export PIG_HOME = /home/Hadoop/Pig
export PATH = $PATH:/home/Hadoop/pig/bin
export PIG_CLASSPATH = $HADOOP_HOME/conf
pig.properties dosyası
İçinde conf Pig klasörü, adında bir dosyamız var pig.properties. Pig.properties dosyasında, aşağıda verildiği gibi çeşitli parametreleri ayarlayabilirsiniz.
pig -h properties
Aşağıdaki özellikler desteklenmektedir -
Logging: verbose = true|false; default is false. This property is the same as -v
switch brief=true|false; default is false. This property is the same
as -b switch debug=OFF|ERROR|WARN|INFO|DEBUG; default is INFO.
This property is the same as -d switch aggregate.warning = true|false; default is true.
If true, prints count of warnings of each type rather than logging each warning.
Performance tuning: pig.cachedbag.memusage=<mem fraction>; default is 0.2 (20% of all memory).
Note that this memory is shared across all large bags used by the application.
pig.skewedjoin.reduce.memusagea=<mem fraction>; default is 0.3 (30% of all memory).
Specifies the fraction of heap available for the reducer to perform the join.
pig.exec.nocombiner = true|false; default is false.
Only disable combiner as a temporary workaround for problems.
opt.multiquery = true|false; multiquery is on by default.
Only disable multiquery as a temporary workaround for problems.
opt.fetch=true|false; fetch is on by default.
Scripts containing Filter, Foreach, Limit, Stream, and Union can be dumped without MR jobs.
pig.tmpfilecompression = true|false; compression is off by default.
Determines whether output of intermediate jobs is compressed.
pig.tmpfilecompression.codec = lzo|gzip; default is gzip.
Used in conjunction with pig.tmpfilecompression. Defines compression type.
pig.noSplitCombination = true|false. Split combination is on by default.
Determines if multiple small files are combined into a single map.
pig.exec.mapPartAgg = true|false. Default is false.
Determines if partial aggregation is done within map phase, before records are sent to combiner.
pig.exec.mapPartAgg.minReduction=<min aggregation factor>. Default is 10.
If the in-map partial aggregation does not reduce the output num records by this factor, it gets disabled.
Miscellaneous: exectype = mapreduce|tez|local; default is mapreduce. This property is the same as -x switch
pig.additional.jars.uris=<comma seperated list of jars>. Used in place of register command.
udf.import.list=<comma seperated list of imports>. Used to avoid package names in UDF.
stop.on.failure = true|false; default is false. Set to true to terminate on the first error.
pig.datetime.default.tz=<UTC time offset>. e.g. +08:00. Default is the default timezone of the host.
Determines the timezone used to handle datetime datatype and UDFs.
Additionally, any Hadoop property can be specified.
Kurulumu Doğrulama
Version komutunu yazarak Apache Pig kurulumunu doğrulayın. Kurulum başarılı olursa, aşağıda gösterildiği gibi Apache Pig sürümünü alacaksınız.
$ pig –version
Apache Pig version 0.15.0 (r1682971)
compiled Jun 01 2015, 11:44:35
Önceki bölümde Apache Pig'in nasıl kurulacağını anlatmıştık. Bu bölümde Apache Pig'in nasıl çalıştırılacağını tartışacağız.
Apache Pig Yürütme Modları
Apache Pig'i iki modda çalıştırabilirsiniz: Local Mode ve HDFS mode.
Yerel mod
Bu modda, tüm dosyalar yerel ana bilgisayarınızdan ve yerel dosya sisteminizden yüklenir ve çalıştırılır. Hadoop veya HDFS'ye gerek yoktur. Bu mod genellikle test amaçlı kullanılır.
MapReduce Modu
MapReduce modu, Apache Pig kullanarak Hadoop Dosya Sisteminde (HDFS) bulunan verileri yüklediğimiz veya işlediğimiz yerdir. Bu modda, veriyi işlemek için Pig Latin ifadelerini her çalıştırdığımızda, HDFS'de bulunan veriler üzerinde belirli bir işlemi gerçekleştirmek için arka uçta bir MapReduce işi başlatılır.
Apache Domuz Yürütme Mekanizmaları
Apache Pig komut dosyaları etkileşimli mod, toplu mod ve gömülü mod olmak üzere üç şekilde yürütülebilir.
Interactive Mode(Grunt shell) - Grunt kabuğunu kullanarak Apache Pig'i etkileşimli modda çalıştırabilirsiniz. Bu kabukta, Pig Latin ifadelerini girebilir ve çıktıyı alabilirsiniz (Dump operatörünü kullanarak).
Batch Mode (Script) - Pig Latin komut dosyasını tek bir dosyaya yazarak Apache Pig'i Toplu modda çalıştırabilirsiniz. .pig uzantı.
Embedded Mode (UDF) - Apache Pig, kendi işlevlerimizi tanımlama hükmünü sağlar (User Dtanımlanmış Functions) Java gibi programlama dillerinde ve bunları komut dosyamızda kullanarak.
Grunt Shell'i Çağırmak
Grunt kabuğunu istediğiniz bir modda (local / MapReduce) çağırabilirsiniz. −x seçeneği aşağıda gösterildiği gibi.
Yerel mod | MapReduce modu |
---|---|
Command − $ ./pig –x yerel |
Command − $ ./pig -x mapreduce |
Output - |
Output - |
Bu komutlardan herhangi biri size aşağıda gösterildiği gibi Grunt kabuğu komutunu verir.
grunt>
Grunt kabuğundan çıkabilirsiniz. ‘ctrl + d’.
Grunt kabuğunu çağırdıktan sonra, doğrudan Pig Latin ifadelerini içine girerek bir Pig betiğini çalıştırabilirsiniz.
grunt> customers = LOAD 'customers.txt' USING PigStorage(',');
Apache Pig'i Toplu Kipte Yürütme
Tüm bir Pig Latin alfabesini bir dosyaya yazabilir ve bunu kullanarak çalıştırabilirsiniz. –x command. Adlı bir dosyada Pig betiğimiz olduğunu varsayalım.sample_script.pig Aşağıda gösterildiği gibi.
Sample_script.pig
student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING
PigStorage(',') as (id:int,name:chararray,city:chararray);
Dump student;
Şimdi, yukarıdaki dosyadaki komut dosyasını aşağıda gösterildiği gibi çalıştırabilirsiniz.
Yerel mod | MapReduce modu |
---|---|
$ pig -x yerel Sample_script.pig | $ domuz -x mapreduce Sample_script.pig |
Note - Pig betiğinin nasıl çalıştırılacağını ayrıntılı olarak tartışacağız. Bach mode ve embedded mode sonraki bölümlerde.
Grunt kabuğunu çalıştırdıktan sonra, Pig komut dosyalarınızı kabukta çalıştırabilirsiniz. Buna ek olarak, Grunt kabuğu tarafından sağlanan bazı yararlı kabuk ve yardımcı program komutları vardır. Bu bölüm, Grunt kabuğu tarafından sağlanan kabuk ve yardımcı program komutlarını açıklamaktadır.
Note - Bu bölümün bazı kısımlarında aşağıdaki gibi komutlar Load ve Storekullanılmış. Bunlar hakkında ayrıntılı bilgi almak için ilgili bölümlere bakın.
Kabuk Komutları
Apache Pig'in Grunt kabuğu, çoğunlukla Pig Latince komut dosyalarını yazmak için kullanılır. Bundan önce, kullanarak herhangi bir kabuk komutunu çağırabiliriz.sh ve fs.
sh Komutu
Kullanma shkomutuyla, Grunt kabuğundan herhangi bir kabuk komutunu çağırabiliriz. Kullanmash Grunt kabuğundan gelen komut, kabuk ortamının bir parçası olan komutları yürütemiyoruz (ex - cd).
Syntax
Aşağıda verilen sözdizimi sh komut.
grunt> sh shell command parameters
Example
Çağırabiliriz ls Grunt kabuğundan Linux kabuğunun komutu, shseçeneği aşağıda gösterildiği gibi. Bu örnekte, içindeki dosyaları listeler./pig/bin/ dizin.
grunt> sh ls
pig
pig_1444799121955.log
pig.cmd
pig.py
fs Komutu
Kullanmak fs komutu, Grunt kabuğundan herhangi bir FsShell komutunu çağırabiliriz.
Syntax
Aşağıda verilen sözdizimi fs komut.
grunt> sh File System command parameters
Example
HDFS'nin ls komutunu fs komutunu kullanarak Grunt kabuğundan çağırabiliriz. Aşağıdaki örnekte, HDFS kök dizinindeki dosyaları listeler.
grunt> fs –ls
Found 3 items
drwxrwxrwx - Hadoop supergroup 0 2015-09-08 14:13 Hbase
drwxr-xr-x - Hadoop supergroup 0 2015-09-09 14:52 seqgen_data
drwxr-xr-x - Hadoop supergroup 0 2015-09-08 11:30 twitter_data
Aynı şekilde, Grunt kabuğundaki diğer tüm dosya sistemi kabuk komutlarını kullanarak fs komut.
Yardımcı Program Komutları
Grunt kabuğu, bir dizi yardımcı program komutu sağlar. Bunlar, aşağıdaki gibi yardımcı program komutlarını içerir:clear, help, history, quit, ve set; ve gibi komutlarexec, kill, ve runGrunt kabuğundan Pig'i kontrol etmek için. Aşağıda, Grunt kabuğu tarafından sağlanan yardımcı program komutlarının açıklaması verilmiştir.
temizle Komutu
clear komutu Grunt kabuğunun ekranını temizlemek için kullanılır.
Syntax
Grunt shell ekranını, clear komutu aşağıda gösterildiği gibi.
grunt> clear
yardım Komutu
help komutu size Pig komutlarının veya Pig özelliklerinin bir listesini verir.
Usage
Kullanarak Pig komutlarının bir listesini alabilirsiniz. help komutu aşağıda gösterildiği gibi.
grunt> help
Commands: <pig latin statement>; - See the PigLatin manual for details:
http://hadoop.apache.org/pig
File system commands:fs <fs arguments> - Equivalent to Hadoop dfs command:
http://hadoop.apache.org/common/docs/current/hdfs_shell.html
Diagnostic Commands:describe <alias>[::<alias] - Show the schema for the alias.
Inner aliases can be described as A::B.
explain [-script <pigscript>] [-out <path>] [-brief] [-dot|-xml]
[-param <param_name>=<pCram_value>]
[-param_file <file_name>] [<alias>] -
Show the execution plan to compute the alias or for entire script.
-script - Explain the entire script.
-out - Store the output into directory rather than print to stdout.
-brief - Don't expand nested plans (presenting a smaller graph for overview).
-dot - Generate the output in .dot format. Default is text format.
-xml - Generate the output in .xml format. Default is text format.
-param <param_name - See parameter substitution for details.
-param_file <file_name> - See parameter substitution for details.
alias - Alias to explain.
dump <alias> - Compute the alias and writes the results to stdout.
Utility Commands: exec [-param <param_name>=param_value] [-param_file <file_name>] <script> -
Execute the script with access to grunt environment including aliases.
-param <param_name - See parameter substitution for details.
-param_file <file_name> - See parameter substitution for details.
script - Script to be executed.
run [-param <param_name>=param_value] [-param_file <file_name>] <script> -
Execute the script with access to grunt environment.
-param <param_name - See parameter substitution for details.
-param_file <file_name> - See parameter substitution for details.
script - Script to be executed.
sh <shell command> - Invoke a shell command.
kill <job_id> - Kill the hadoop job specified by the hadoop job id.
set <key> <value> - Provide execution parameters to Pig. Keys and values are case sensitive.
The following keys are supported:
default_parallel - Script-level reduce parallelism. Basic input size heuristics used
by default.
debug - Set debug on or off. Default is off.
job.name - Single-quoted name for jobs. Default is PigLatin:<script name>
job.priority - Priority for jobs. Values: very_low, low, normal, high, very_high.
Default is normal stream.skippath - String that contains the path.
This is used by streaming any hadoop property.
help - Display this message.
history [-n] - Display the list statements in cache.
-n Hide line numbers.
quit - Quit the grunt shell.
tarih Komutanlığı
Bu komut, Grunt satışının başlatılmasından bu yana şu ana kadar yürütülen / kullanılan ifadelerin bir listesini görüntüler.
Usage
Grunt kabuğunu açtığımızdan beri üç ifade yürüttüğümüzü varsayalım.
grunt> customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',');
grunt> orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',');
grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING PigStorage(',');
Daha sonra history komutu aşağıdaki çıktıyı üretecektir.
grunt> history
customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',');
orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',');
student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING PigStorage(',');
Komut ayarla
set komutu, Pig'de kullanılan tuşlara değerleri göstermek / atamak için kullanılır.
Usage
Bu komutu kullanarak aşağıdaki tuşlara değerler ayarlayabilirsiniz.
Anahtar | Açıklama ve değerler |
---|---|
default_parallel | Herhangi bir tam sayıyı bu anahtara bir değer olarak geçirerek bir harita işi için azaltıcı sayısını ayarlayabilirsiniz. |
debug | Bu anahtara açıp / kapatarak Pig'deki hata ayıklama freature'ı kapatabilir veya açabilirsiniz. |
job.name | Bu anahtara bir dize değeri ileterek İş adını gerekli işe ayarlayabilirsiniz. |
job.priority | Aşağıdaki değerlerden birini bu anahtara geçirerek iş önceliğini bir işe ayarlayabilirsiniz -
|
stream.skippath | Akış için, istenen yolu bir dize biçiminde bu anahtara ileterek verilerin aktarılmayacağı yolu ayarlayabilirsiniz. |
Komutu bırak
Bu komutu kullanarak Grunt kabuğundan çıkabilirsiniz.
Usage
Aşağıda gösterildiği gibi Grunt kabuğundan çıkın.
grunt> quit
Şimdi Apache Pig'i Grunt kabuğundan kontrol edebileceğiniz komutlara bir göz atalım.
exec Komutu
Kullanmak exec komutu, Grunt kabuğundan Pig betiklerini çalıştırabiliriz.
Syntax
Aşağıda, yardımcı program komutunun sözdizimi verilmiştir. exec.
grunt> exec [–param param_name = param_value] [–param_file file_name] [script]
Example
Adında bir dosya olduğunu varsayalım student.txt içinde /pig_data/ aşağıdaki içeriğe sahip HDFS dizini.
Student.txt
001,Rajiv,Hyderabad
002,siddarth,Kolkata
003,Rajesh,Delhi
Ve adında bir komut dosyamız olduğunu varsayalım. sample_script.pig içinde /pig_data/ aşağıdaki içeriğe sahip HDFS dizini.
Sample_script.pig
student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING PigStorage(',')
as (id:int,name:chararray,city:chararray);
Dump student;
Şimdi, yukarıdaki betiği Grunt kabuğundan çalıştıralım. exec komutu aşağıda gösterildiği gibi.
grunt> exec /sample_script.pig
Output
exec komutu, komut dosyasını sample_script.pig. Komut dosyasında belirtildiği gibi,student.txt dosyasını Pig'e aktarır ve size aşağıdaki içeriği görüntüleyen Dump işlecinin sonucunu verir.
(1,Rajiv,Hyderabad)
(2,siddarth,Kolkata)
(3,Rajesh,Delhi)
Komutu öldür
Bu komutu kullanarak Grunt kabuğundan bir işi öldürebilirsiniz.
Syntax
Aşağıda verilen sözdizimi kill komut.
grunt> kill JobId
Example
Kimliği olan çalışan bir Pig işi olduğunu varsayalım Id_0055, onu kullanarak Grunt kabuğundan öldürebilirsiniz. kill komutu aşağıda gösterildiği gibi.
grunt> kill Id_0055
Komutu çalıştır
Grunt kabuğundan bir Pig komut dosyası çalıştırabilirsiniz. run komut
Syntax
Aşağıda verilen sözdizimi run komut.
grunt> run [–param param_name = param_value] [–param_file file_name] script
Example
Adında bir dosya olduğunu varsayalım student.txt içinde /pig_data/ aşağıdaki içeriğe sahip HDFS dizini.
Student.txt
001,Rajiv,Hyderabad
002,siddarth,Kolkata
003,Rajesh,Delhi
Ve adında bir komut dosyamız olduğunu varsayalım. sample_script.pig aşağıdaki içeriğe sahip yerel dosya sisteminde.
Sample_script.pig
student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING
PigStorage(',') as (id:int,name:chararray,city:chararray);
Şimdi yukarıdaki betiği aşağıda gösterildiği gibi çalıştır komutunu kullanarak Grunt kabuğundan çalıştıralım.
grunt> run /sample_script.pig
Komut dosyasının çıktısını, Dump operator Aşağıda gösterildiği gibi.
grunt> Dump;
(1,Rajiv,Hyderabad)
(2,siddarth,Kolkata)
(3,Rajesh,Delhi)
Note - arasındaki fark exec ve run komut, eğer kullanırsak run, komut dosyasındaki ifadeler komut geçmişinde mevcuttur.
Domuz Latin, Apache Pig kullanarak Hadoop'taki verileri analiz etmek için kullanılan dildir. Bu bölümde, Pig Latince ifadeleri, veri türleri, genel ve ilişkisel operatörler ve Pig Latin UDF'ler gibi Pig Latince'nin temellerini tartışacağız.
Domuz Latin - Veri Modeli
Önceki bölümlerde tartışıldığı gibi, Pig'in veri modeli tamamen iç içe geçmiştir. BirRelationPig Latin veri modelinin en dıştaki yapısıdır. Ve bu birbag nerede -
- Çanta, bir demet koleksiyonudur.
- Demet, sıralı bir alan kümesidir.
- Alan, bir veri parçasıdır.
Domuz Latin - Statemets
Pig Latin kullanarak verileri işlerken, statements temel yapılardır.
Bu ifadeler ile çalışır relations. İçerirlerexpressions ve schemas.
Her ifade bir noktalı virgülle (;) biter.
Pig Latin tarafından sağlanan operatörleri kullanarak ifadeler aracılığıyla çeşitli işlemleri gerçekleştireceğiz.
LOAD ve STORE dışında, diğer tüm işlemleri gerçekleştirirken, Pig Latin ifadeleri girdi olarak bir ilişki alır ve çıktı olarak başka bir ilişki üretir.
Bir girdiğiniz anda Loadifadesi Grunt kabuğundaki anlamsal denetimi yapılacaktır. Şemanın içeriğini görmek için,DumpŞebeke. Sadece yaptıktan sonradump işlem, verilerin dosya sistemine yüklenmesi için MapReduce işi gerçekleştirilecektir.
Misal
Aşağıda, verileri Apache Pig'e yükleyen bir Pig Latince ifadesi verilmiştir.
grunt> Student_data = LOAD 'student_data.txt' USING PigStorage(',')as
( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );
Domuz Latin - Veri türleri
Aşağıdaki tablo, Domuz Latin veri türlerini açıklamaktadır.
SN | Veri tipi | Açıklama ve Örnek |
---|---|---|
1 | int | İmzalı bir 32 bit tamsayıyı temsil eder. Example : 8 |
2 | uzun | İmzalı bir 64 bit tamsayıyı temsil eder. Example : 5L |
3 | yüzen | İşaretli bir 32 bit kayan noktayı temsil eder. Example : 5.5F |
4 | çift | 64 bitlik bir kayan noktayı temsil eder. Example : 10.5 |
5 | chararray | Unicode UTF-8 biçiminde bir karakter dizisini (dizeyi) temsil eder. Example : 'öğreticiler noktası' |
6 | Bytearray | Bir Bayt dizisini (blob) temsil eder. |
7 | Boole | Bir Boolean değerini temsil eder. Example : doğru yanlış. |
8 | Tarih saat | Bir tarih-saati temsil eder. Example : 1970-01-01T00: 00: 00.000 + 00: 00 |
9 | Biginteger | Java BigInteger'ı temsil eder. Example : 60708090709 |
10 | Büyük ondalık | Java BigDecimal'i temsil eder Example : 185.98376256272893883 |
Karmaşık Tipler | ||
11 | Tuple | Demet, sıralı bir alan kümesidir. Example : (raja, 30) |
12 | Sırt çantası | Çanta, bir demet koleksiyonudur. Example : {(raju, 30), (Mohhammad, 45)} |
13 | Harita | Harita, bir dizi anahtar / değer çiftidir. Example : ["ad" # "Raju", "yaş" # 30] |
Boş Değerler
Yukarıdaki veri türlerinin tümü için değerler NULL olabilir. Apache Pig, boş değerleri SQL'e benzer şekilde ele alır.
Boş, bilinmeyen bir değer veya var olmayan bir değer olabilir. İsteğe bağlı değerler için yer tutucu olarak kullanılır. Bu boşluklar doğal olarak ortaya çıkabilir veya bir işlemin sonucu olabilir.
Domuz Latin - Aritmetik Operatörler
Aşağıdaki tablo Pig Latince'nin aritmetik işleçlerini açıklamaktadır. A = 10 ve b = 20 varsayalım.
Şebeke | Açıklama | Misal |
---|---|---|
+ | Addition - Operatörün her iki tarafına da değerler ekler |
a + b 30 verir |
- | Subtraction - Sağ el operandını sol el operandından çıkarır |
a - b, −10 verir |
* | Multiplication - Operatörün her iki tarafındaki değerleri çarpar |
a * b 200 verir |
/ | Division - Sol el işleneni sağ el işlenene böler |
b / a 2 verecek |
% | Modulus - Sol el işleneni sağ el işlenene böler ve kalanı döndürür |
b% a 0 verir |
? : | Bincond- Boolean operatörlerini değerlendirir. Aşağıda gösterildiği gibi üç işlenen vardır. değişken x = (ifade)? value1 doğruysa :value2 eğer yanlışsa . |
b = (a == 1)? 20: 30; a = 1 ise b'nin değeri 20'dir. a! = 1 ise b'nin değeri 30'dur. |
DURUM NE ZAMAN SONRA BAŞKA SON |
Case - Vaka operatörü, iç içe yerleştirilmiş bin saniye operatörüne eşdeğerdir. |
DURUM f2% 2 NE ZAMAN 0 SONRA 'çift' NE ZAMAN 1 SONRA "tuhaf" SON |
Domuz Latin - Karşılaştırma Operatörleri
Aşağıdaki tablo Pig Latince'nin karşılaştırma operatörlerini açıklamaktadır.
Şebeke | Açıklama | Misal |
---|---|---|
== | Equal- İki işlenenin değerlerinin eşit olup olmadığını kontrol eder; evet ise, o zaman durum gerçek olur. |
(a = b) doğru değil |
! = | Not Equal- İki işlenenin değerlerinin eşit olup olmadığını kontrol eder. Değerler eşit değilse, koşul doğru olur. |
(a! = b) doğrudur. |
> | Greater than- Sol işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder. Evet ise, durum gerçek olur. |
(a> b) doğru değil. |
< | Less than- Sol işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol eder. Evet ise, durum gerçek olur. |
(a <b) doğrudur. |
> = | Greater than or equal to- Sol işlenenin değerinin sağ işlenenin değerinden büyük veya ona eşit olup olmadığını kontrol eder. Evet ise, durum gerçek olur. |
(a> = b) doğru değil. |
<= | Less than or equal to- Soldaki işlenenin değerinin sağ işlenenin değerinden küçük veya ona eşit olup olmadığını kontrol eder. Evet ise, durum gerçek olur. |
(a <= b) doğrudur. |
maçlar | Pattern matching - Sol taraftaki dizenin sağ taraftaki sabitle eşleşip eşleşmediğini kontrol eder. |
f1, '. * tutorial. *' ile eşleşir |
Pig Latin - Tipi İnşaat Operatörleri
Aşağıdaki tablo, Pig Latince'nin Tip yapım operatörlerini açıklamaktadır.
Şebeke | Açıklama | Misal |
---|---|---|
() | Tuple constructor operator - Bu operatör, bir demet oluşturmak için kullanılır. |
(Raju, 30) |
{} | Bag constructor operator - Bu operatör, bir çanta yapmak için kullanılır. |
{(Raju, 30), (Muhammed, 45)} |
[] | Map constructor operator - Bu operatör, bir demet oluşturmak için kullanılır. |
[isim # Raja, 30 yaşında] |
Domuz Latin - İlişkisel İşlemler
Aşağıdaki tablo Pig Latince'nin ilişkisel operatörlerini açıklamaktadır.
Şebeke | Açıklama |
---|---|
Loading and Storing | |
YÜK | Dosya sisteminden (yerel / HDFS) verileri bir ilişkiye yüklemek için. |
MAĞAZA | Dosya sistemiyle (yerel / HDFS) bir ilişki kaydetmek için. |
Filtreleme | |
FİLTRE | Bir ilişkiden istenmeyen satırları kaldırmak için. |
DISTINCT | Bir ilişkiden yinelenen satırları kaldırmak için. |
ÖNCEKİ, OLUŞTUR | Veri sütunlarına dayalı veri dönüşümleri oluşturmak için. |
AKIŞ | Bir ilişkiyi harici bir program kullanarak dönüştürmek için. |
Gruplama ve Birleştirme | |
KATILMAK | İki veya daha fazla ilişkiye katılmak için. |
COGROUP | Verileri iki veya daha fazla ilişkide gruplamak için. |
GRUP | Verileri tek bir ilişkide gruplamak için. |
ÇAPRAZ | İki veya daha fazla ilişkinin çapraz çarpımını oluşturmak için. |
Sıralama | |
SİPARİŞ | Bir ilişkiyi bir veya daha fazla alana (artan veya azalan) göre sıralanmış bir düzende düzenlemek için. |
SINIR | Bir ilişkiden sınırlı sayıda tuple almak için. |
Birleştirme ve Bölme | |
BİRLİK | İki veya daha fazla ilişkiyi tek bir ilişkide birleştirmek. |
BÖLÜNMÜŞ | Tek bir ilişkiyi iki veya daha fazla ilişkiye bölmek. |
Teşhis Operatörleri | |
DÖKÜM | Konsolda bir ilişkinin içeriğini yazdırmak için. |
TANIMLAMAK | Bir ilişkinin şemasını tanımlamak için. |
AÇIKLAMAK | Bir ilişkiyi hesaplamak için mantıksal, fiziksel veya MapReduce yürütme planlarını görüntülemek için. |
GÖZÜNDE CANLANDIRMAK | Bir dizi ifadenin adım adım yürütülmesini görüntülemek için. |
Genel olarak Apache Pig, Hadoop'un üzerinde çalışır. İçinde bulunan büyük veri kümelerini analiz eden analitik bir araçtır.Halışmak File System. Apache Pig kullanarak verileri analiz etmek için, önce verileri Apache Pig'e yüklememiz gerekir. Bu bölümde verilerin HDFS'den Apache Pig'e nasıl yükleneceği açıklanmaktadır.
HDFS hazırlama
MapReduce modunda Pig, verileri HDFS'den okur (yükler) ve sonuçları HDFS'ye geri depolar. Bu nedenle, HDFS'yi başlatalım ve aşağıdaki örnek verileri HDFS'de oluşturalım.
Öğrenci Kimliği | İsim | Soyadı | Telefon | Kent |
---|---|---|---|---|
001 | Rajiv | Reddy | 9848022337 | Haydarabad |
002 | Siddarth | Battacharya | 9848022338 | Kalküta |
003 | Rajesh | Khanna | 9848022339 | Delhi |
004 | Preethi | Agarwal | 9848022330 | Pune |
005 | Trupthi | Mohanthy | 9848022336 | Bhuwaneshwar |
006 | Archana | Mishra | 9848022335 | Chennai |
Yukarıdaki veri seti, altı öğrencinin kimliği, adı, soyadı, telefon numarası ve şehri gibi kişisel ayrıntıları içerir.
1. Adım: Hadoop'u doğrulama
Öncelikle, aşağıda gösterildiği gibi, Hadoop sürüm komutunu kullanarak kurulumu doğrulayın.
$ hadoop version
Sisteminiz Hadoop içeriyorsa ve PATH değişkenini ayarladıysanız, aşağıdaki çıktıyı alırsınız -
Hadoop 2.6.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1
Compiled by jenkins on 2014-11-13T21:10Z
Compiled with protoc 2.5.0
From source with checksum 18e43357c8f927c0695f1e9522859d6a
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop
common-2.6.0.jar
Adım 2: HDFS'yi Başlatma
Göz atın sbin Hadoop dizini ve başlangıç yarn ve Hadoop dfs (dağıtılmış dosya sistemi) aşağıda gösterildiği gibi.
cd /$Hadoop_Home/sbin/
$ start-dfs.sh
localhost: starting namenode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-datanode-localhost.localdomain.out
Starting secondary namenodes [0.0.0.0]
starting secondarynamenode, logging to /home/Hadoop/hadoop/logs/hadoop-Hadoopsecondarynamenode-localhost.localdomain.out
$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/Hadoop/hadoop/logs/yarn-Hadoopresourcemanager-localhost.localdomain.out
localhost: starting nodemanager, logging to /home/Hadoop/hadoop/logs/yarnHadoop-nodemanager-localhost.localdomain.out
3. Adım: HDFS'de Dizin Oluşturun
Hadoop DFS'de şu komutu kullanarak dizinler oluşturabilirsiniz. mkdir. HDFS'de adla yeni bir dizin oluşturunPig_Data aşağıda gösterildiği gibi gerekli yolda.
$cd /$Hadoop_Home/bin/
$ hdfs dfs -mkdir hdfs://localhost:9000/Pig_Data
Adım 4: Verileri HDFS'ye yerleştirme
Pig'in girdi dosyası her bir tuple / kaydı ayrı satırlarda içerir. Ve kaydın varlıkları bir sınırlayıcıyla ayrılır (Örneğimizde kullandık“,”).
Yerel dosya sisteminde bir girdi dosyası oluşturun student_data.txt aşağıda gösterilen verileri içeren.
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.
Şimdi, dosyayı yerel dosya sisteminden HDFS'ye taşıyın. putkomutu aşağıda gösterildiği gibi. (KullanabilirsinizcopyFromLocal komut da.)
$ cd $HADOOP_HOME/bin $ hdfs dfs -put /home/Hadoop/Pig/Pig_Data/student_data.txt dfs://localhost:9000/pig_data/
Dosyayı doğrulama
Kullanabilirsiniz cat aşağıda gösterildiği gibi dosyanın HDFS'ye taşınmış olup olmadığını doğrulamak için komut.
$ cd $HADOOP_HOME/bin
$ hdfs dfs -cat hdfs://localhost:9000/pig_data/student_data.txt
Çıktı
Dosyanın içeriğini aşağıda gösterildiği gibi görebilirsiniz.
15/10/01 12:16:55 WARN util.NativeCodeLoader: Unable to load native-hadoop
library for your platform... using builtin-java classes where applicable
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai
Yük Operatörü
Dosya sisteminden (HDFS / Yerel) Apache Pig'e veri yükleyebilirsiniz. LOAD operatörü Pig Latin.
Sözdizimi
Yük ifadesi, "=" operatörüne bölünen iki bölümden oluşur. Sol tarafta, ilişkinin adını belirtmemiz gerekiyorwhere verileri saklamak istiyoruz ve sağ tarafta, howverileri saklıyoruz. Aşağıda verilen sözdizimiLoad Şebeke.
Relation_name = LOAD 'Input file path' USING function as schema;
Nerede,
relation_name - Verileri saklamak istediğimiz ilişkiden bahsetmeliyiz.
Input file path- Dosyanın saklandığı HDFS dizininden bahsetmemiz gerekiyor. (MapReduce modunda)
function - Apache Pig tarafından sağlanan yükleme işlevleri kümesinden bir işlev seçmeliyiz (BinStorage, JsonLoader, PigStorage, TextLoader).
Schema- Verilerin şemasını tanımlamalıyız. Gerekli şemayı şu şekilde tanımlayabiliriz -
(column1 : data type, column2 : data type, column3 : data type);
Note- Şema belirtmeden verileri yüklüyoruz. Bu durumda, sütunlar 01 $, 02 $ vb. Olarak ele alınacaktır. (Kontrol edin).
Misal
Örnek olarak, verileri şuraya yükleyelim: student_data.txt Pig adlı şema altında Student kullanmak LOAD komut.
Pig Grunt Shell'i başlatın
Öncelikle Linux terminalini açın. Pig Grunt kabuğunu aşağıda gösterildiği gibi MapReduce modunda başlatın.
$ Pig –x mapreduce
Pig Grunt kabuğunu aşağıda gösterildiği gibi başlatacaktır.
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
2015-10-01 12:33:38,080 [main] INFO org.apache.pig.Main - Apache Pig version 0.15.0 (r1682971) compiled Jun 01 2015, 11:44:35
2015-10-01 12:33:38,080 [main] INFO org.apache.pig.Main - Logging error messages to: /home/Hadoop/pig_1443683018078.log
2015-10-01 12:33:38,242 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/Hadoop/.pigbootup not found
2015-10-01 12:33:39,630 [main]
INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:9000
grunt>
Yük İfadesini Yürüt
Şimdi verileri dosyadan yükleyin student_data.txt Grunt kabuğunda aşağıdaki Pig Latince ifadesini yürüterek Pig'e aktarın.
grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt'
USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray,
city:chararray );
Yukarıdaki ifadenin açıklaması aşağıdadır.
İlişki adı | Verileri şemada sakladık student. | ||||||||||||
Dosya yolunu girin | Dosyadan veri okuyoruz student_data.txt, HDFS'nin / pig_data / dizininde bulunan. | ||||||||||||
Depolama işlevi | Kullandık PigStorage()işlevi. Verileri yapılandırılmış metin dosyaları olarak yükler ve depolar. Parametre olarak, bir başlığın her bir öğesinin ayrıldığı bir sınırlayıcı alır. Varsayılan olarak, parametre olarak '\ t' alır. | ||||||||||||
şema | Verileri aşağıdaki şemayı kullanarak sakladık.
|
Note - loadifadesi, verileri Pig'de belirtilen ilişkiye yükleyecektir. Yürütmeyi doğrulamak içinLoad ifadesi, kullanmanız gerekir Diagnostic Operators sonraki bölümlerde tartışılacaktır.
Önceki bölümde, verilerin Apache Pig'e nasıl yükleneceğini öğrendik. Yüklenen verileri dosya sisteminde saklayabilirsiniz.storeŞebeke. Bu bölüm, verilerin Apache Pig'de nasıl saklanacağını açıklar.Store Şebeke.
Sözdizimi
Aşağıda, Mağaza bildiriminin sözdizimi verilmiştir.
STORE Relation_name INTO ' required_directory_path ' [USING function];
Misal
Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.
Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.
grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt'
USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray,
city:chararray );
Şimdi ilişkiyi HDFS dizininde saklayalım “/pig_Output/” Aşağıda gösterildiği gibi.
grunt> STORE student INTO ' hdfs://localhost:9000/pig_Output/ ' USING PigStorage (',');
Çıktı
Çalıştırdıktan sonra storeifadesi, aşağıdaki çıktıyı alacaksınız. Belirtilen adla bir dizin oluşturulur ve veriler bu dizinde depolanır.
2015-10-05 13:05:05,429 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.
MapReduceLau ncher - 100% complete
2015-10-05 13:05:05,429 [main] INFO org.apache.pig.tools.pigstats.mapreduce.SimplePigStats -
Script Statistics:
HadoopVersion PigVersion UserId StartedAt FinishedAt Features
2.6.0 0.15.0 Hadoop 2015-10-0 13:03:03 2015-10-05 13:05:05 UNKNOWN
Success!
Job Stats (time in seconds):
JobId Maps Reduces MaxMapTime MinMapTime AvgMapTime MedianMapTime
job_14459_06 1 0 n/a n/a n/a n/a
MaxReduceTime MinReduceTime AvgReduceTime MedianReducetime Alias Feature
0 0 0 0 student MAP_ONLY
OutPut folder
hdfs://localhost:9000/pig_Output/
Input(s): Successfully read 0 records from: "hdfs://localhost:9000/pig_data/student_data.txt"
Output(s): Successfully stored 0 records in: "hdfs://localhost:9000/pig_Output"
Counters:
Total records written : 0
Total bytes written : 0
Spillable Memory Manager spill count : 0
Total bags proactively spilled: 0
Total records proactively spilled: 0
Job DAG: job_1443519499159_0006
2015-10-05 13:06:06,192 [main] INFO org.apache.pig.backend.hadoop.executionengine
.mapReduceLayer.MapReduceLau ncher - Success!
Doğrulama
Depolanan verileri aşağıda gösterildiği gibi doğrulayabilirsiniz.
Aşama 1
Her şeyden önce, adlı dizindeki dosyaları listeleyin pig_output kullanmak ls komutu aşağıda gösterildiği gibi.
hdfs dfs -ls 'hdfs://localhost:9000/pig_Output/'
Found 2 items
rw-r--r- 1 Hadoop supergroup 0 2015-10-05 13:03 hdfs://localhost:9000/pig_Output/_SUCCESS
rw-r--r- 1 Hadoop supergroup 224 2015-10-05 13:03 hdfs://localhost:9000/pig_Output/part-m-00000
Çalıştırdıktan sonra iki dosyanın oluşturulduğunu görebilirsiniz. store Beyan.
Adım 2
Kullanma cat komut, adlı dosyanın içeriğini listeleyin part-m-00000 Aşağıda gösterildiği gibi.
$ hdfs dfs -cat 'hdfs://localhost:9000/pig_Output/part-m-00000'
1,Rajiv,Reddy,9848022337,Hyderabad
2,siddarth,Battacharya,9848022338,Kolkata
3,Rajesh,Khanna,9848022339,Delhi
4,Preethi,Agarwal,9848022330,Pune
5,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
6,Archana,Mishra,9848022335,Chennai
loadifadesi basitçe verileri Apache Pig'de belirtilen ilişkiye yükleyecektir. Yürütmeyi doğrulamak içinLoad ifadesi, kullanmanız gerekir Diagnostic Operators. Pig Latin, dört farklı tipte teşhis operatörü sağlar -
- Döküm operatörü
- Operatörü tanımlayın
- Açıklama operatörü
- İllüstrasyon operatörü
Bu bölümde, Domuz Latince'nin Dump operatörlerini tartışacağız.
Döküm Operatörü
DumpOperatör, Pig Latin ifadelerini çalıştırmak ve sonuçları ekranda görüntülemek için kullanılır. Genellikle hata ayıklama Amacı için kullanılır.
Sözdizimi
Aşağıda verilen sözdizimi Dump Şebeke.
grunt> Dump Relation_Name
Misal
Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.
Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.
grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt'
USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray,
city:chararray );
Şimdi, ilişkinin içeriğini kullanarak Dump operator Aşağıda gösterildiği gibi.
grunt> Dump student
Yukarıdakileri uyguladıktan sonra Pig Latinifadesi, HDFS'den veri okumak için bir MapReduce işi başlatacaktır. Aşağıdaki çıktıyı üretecektir.
2015-10-01 15:05:27,642 [main]
INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher -
100% complete
2015-10-01 15:05:27,652 [main]
INFO org.apache.pig.tools.pigstats.mapreduce.SimplePigStats - Script Statistics:
HadoopVersion PigVersion UserId StartedAt FinishedAt Features
2.6.0 0.15.0 Hadoop 2015-10-01 15:03:11 2015-10-01 05:27 UNKNOWN
Success!
Job Stats (time in seconds):
JobId job_14459_0004
Maps 1
Reduces 0
MaxMapTime n/a
MinMapTime n/a
AvgMapTime n/a
MedianMapTime n/a
MaxReduceTime 0
MinReduceTime 0
AvgReduceTime 0
MedianReducetime 0
Alias student
Feature MAP_ONLY
Outputs hdfs://localhost:9000/tmp/temp580182027/tmp757878456,
Input(s): Successfully read 0 records from: "hdfs://localhost:9000/pig_data/
student_data.txt"
Output(s): Successfully stored 0 records in: "hdfs://localhost:9000/tmp/temp580182027/
tmp757878456"
Counters: Total records written : 0 Total bytes written : 0 Spillable Memory Manager
spill count : 0Total bags proactively spilled: 0 Total records proactively spilled: 0
Job DAG: job_1443519499159_0004
2015-10-01 15:06:28,403 [main]
INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLau ncher - Success!
2015-10-01 15:06:28,441 [main] INFO org.apache.pig.data.SchemaTupleBackend -
Key [pig.schematuple] was not set... will not generate code.
2015-10-01 15:06:28,485 [main]
INFO org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths
to process : 1
2015-10-01 15:06:28,485 [main]
INFO org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths
to process : 1
(1,Rajiv,Reddy,9848022337,Hyderabad) (2,siddarth,Battacharya,9848022338,Kolkata) (3,Rajesh,Khanna,9848022339,Delhi) (4,Preethi,Agarwal,9848022330,Pune) (5,Trupthi,Mohanthy,9848022336,Bhuwaneshwar) (6,Archana,Mishra,9848022335,Chennai)
describe operatör, bir ilişkinin şemasını görüntülemek için kullanılır.
Sözdizimi
Sözdizimi describe operatör aşağıdaki gibidir -
grunt> Describe Relation_name
Misal
Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.
Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.
grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );
Şimdi isimli ilişkiyi tanımlayalım student ve şemayı aşağıda gösterildiği gibi doğrulayın.
grunt> describe student;
Çıktı
Yukarıdakileri uyguladıktan sonra Pig Latin ifadesi aşağıdaki çıktıyı üretecektir.
grunt> student: { id: int,firstname: chararray,lastname: chararray,phone: chararray,city: chararray }
explain operatörü, bir ilişkinin mantıksal, fiziksel ve MapReduce yürütme planlarını görüntülemek için kullanılır.
Sözdizimi
Aşağıda verilen sözdizimi explain Şebeke.
grunt> explain Relation_name;
Misal
Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.
Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.
grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );
Şimdi, öğrenci adlı ilişkiyi kullanarak açıklayalım. explain Operatör aşağıda gösterildiği gibi.
grunt> explain student;
Çıktı
Aşağıdaki çıktıyı üretecektir.
$ explain student;
2015-10-05 11:32:43,660 [main]
2015-10-05 11:32:43,660 [main] INFO org.apache.pig.newplan.logical.optimizer
.LogicalPlanOptimizer -
{RULES_ENABLED=[AddForEach, ColumnMapKeyPrune, ConstantCalculator,
GroupByConstParallelSetter, LimitOptimizer, LoadTypeCastInserter, MergeFilter,
MergeForEach, PartitionFilterOptimizer, PredicatePushdownOptimizer,
PushDownForEachFlatten, PushUpFilter, SplitFilter, StreamTypeCastInserter]}
#-----------------------------------------------
# New Logical Plan:
#-----------------------------------------------
student: (Name: LOStore Schema:
id#31:int,firstname#32:chararray,lastname#33:chararray,phone#34:chararray,city#
35:chararray)
|
|---student: (Name: LOForEach Schema:
id#31:int,firstname#32:chararray,lastname#33:chararray,phone#34:chararray,city#
35:chararray)
| |
| (Name: LOGenerate[false,false,false,false,false] Schema:
id#31:int,firstname#32:chararray,lastname#33:chararray,phone#34:chararray,city#
35:chararray)ColumnPrune:InputUids=[34, 35, 32, 33,
31]ColumnPrune:OutputUids=[34, 35, 32, 33, 31]
| | |
| | (Name: Cast Type: int Uid: 31)
| | | | | |---id:(Name: Project Type: bytearray Uid: 31 Input: 0 Column: (*))
| | |
| | (Name: Cast Type: chararray Uid: 32)
| | |
| | |---firstname:(Name: Project Type: bytearray Uid: 32 Input: 1
Column: (*))
| | |
| | (Name: Cast Type: chararray Uid: 33)
| | |
| | |---lastname:(Name: Project Type: bytearray Uid: 33 Input: 2
Column: (*))
| | |
| | (Name: Cast Type: chararray Uid: 34)
| | |
| | |---phone:(Name: Project Type: bytearray Uid: 34 Input: 3 Column:
(*))
| | |
| | (Name: Cast Type: chararray Uid: 35)
| | |
| | |---city:(Name: Project Type: bytearray Uid: 35 Input: 4 Column:
(*))
| |
| |---(Name: LOInnerLoad[0] Schema: id#31:bytearray)
| |
| |---(Name: LOInnerLoad[1] Schema: firstname#32:bytearray)
| |
| |---(Name: LOInnerLoad[2] Schema: lastname#33:bytearray)
| |
| |---(Name: LOInnerLoad[3] Schema: phone#34:bytearray)
| |
| |---(Name: LOInnerLoad[4] Schema: city#35:bytearray)
|
|---student: (Name: LOLoad Schema:
id#31:bytearray,firstname#32:bytearray,lastname#33:bytearray,phone#34:bytearray
,city#35:bytearray)RequiredFields:null
#-----------------------------------------------
# Physical Plan: #-----------------------------------------------
student: Store(fakefile:org.apache.pig.builtin.PigStorage) - scope-36
|
|---student: New For Each(false,false,false,false,false)[bag] - scope-35
| |
| Cast[int] - scope-21
| |
| |---Project[bytearray][0] - scope-20
| |
| Cast[chararray] - scope-24
| |
| |---Project[bytearray][1] - scope-23
| |
| Cast[chararray] - scope-27
| |
| |---Project[bytearray][2] - scope-26
| |
| Cast[chararray] - scope-30
| |
| |---Project[bytearray][3] - scope-29
| |
| Cast[chararray] - scope-33
| |
| |---Project[bytearray][4] - scope-32
|
|---student: Load(hdfs://localhost:9000/pig_data/student_data.txt:PigStorage(',')) - scope19
2015-10-05 11:32:43,682 [main]
INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MRCompiler -
File concatenation threshold: 100 optimistic? false
2015-10-05 11:32:43,684 [main]
INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MultiQueryOp timizer -
MR plan size before optimization: 1 2015-10-05 11:32:43,685 [main]
INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.
MultiQueryOp timizer - MR plan size after optimization: 1
#--------------------------------------------------
# Map Reduce Plan
#--------------------------------------------------
MapReduce node scope-37
Map Plan
student: Store(fakefile:org.apache.pig.builtin.PigStorage) - scope-36
|
|---student: New For Each(false,false,false,false,false)[bag] - scope-35
| |
| Cast[int] - scope-21
| |
| |---Project[bytearray][0] - scope-20
| |
| Cast[chararray] - scope-24
| |
| |---Project[bytearray][1] - scope-23
| |
| Cast[chararray] - scope-27
| |
| |---Project[bytearray][2] - scope-26
| |
| Cast[chararray] - scope-30
| |
| |---Project[bytearray][3] - scope-29
| |
| Cast[chararray] - scope-33
| |
| |---Project[bytearray][4] - scope-32
|
|---student:
Load(hdfs://localhost:9000/pig_data/student_data.txt:PigStorage(',')) - scope
19-------- Global sort: false
----------------
illustrate operatörü size bir dizi ifadenin adım adım çalıştırılmasını sağlar.
Sözdizimi
Aşağıda verilen sözdizimi illustrate Şebeke.
grunt> illustrate Relation_name;
Misal
Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.
Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.
grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );
Şimdi, öğrenci isimli ilişkiyi aşağıda gösterildiği gibi gösterelim.
grunt> illustrate student;
Çıktı
Yukarıdaki ifadeyi çalıştırdığınızda, aşağıdaki çıktıyı alacaksınız.
grunt> illustrate student;
INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapOnly$M ap - Aliases
being processed per job phase (AliasName[line,offset]): M: student[1,10] C: R:
---------------------------------------------------------------------------------------------
|student | id:int | firstname:chararray | lastname:chararray | phone:chararray | city:chararray |
---------------------------------------------------------------------------------------------
| | 002 | siddarth | Battacharya | 9848022338 | Kolkata |
---------------------------------------------------------------------------------------------
GROUPoperatörü, verileri bir veya daha fazla ilişkide gruplamak için kullanılır. Aynı anahtara sahip verileri toplar.
Sözdizimi
Aşağıda verilen sözdizimi group Şebeke.
grunt> Group_data = GROUP Relation_name BY age;
Misal
Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.
student_details.txt
001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai
Ve bu dosyayı Apache Pig'e ilişki adı ile yükledik. student_details Aşağıda gösterildiği gibi.
grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);
Şimdi, ilişkideki kayıtları / tupleleri aşağıda gösterildiği gibi yaşa göre gruplayalım.
grunt> group_data = GROUP student_details by age;
Doğrulama
İlişkiyi doğrulayın group_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump group_data;
Çıktı
Ardından adlı ilişkinin içeriğini görüntüleyen çıktı alacaksınız. group_dataAşağıda gösterildiği gibi. Burada ortaya çıkan şemanın iki sütuna sahip olduğunu gözlemleyebilirsiniz -
Biri age, bununla ilişkiyi grupladık.
Diğeri bir bagtuple grubunu içeren, ilgili yaş ile öğrenci kayıtları.
(21,{(4,Preethi,Agarwal,21,9848022330,Pune),(1,Rajiv,Reddy,21,9848022337,Hydera bad)})
(22,{(3,Rajesh,Khanna,22,9848022339,Delhi),(2,siddarth,Battacharya,22,984802233 8,Kolkata)})
(23,{(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336 ,Bhuwaneshwar)})
(24,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334, trivendram)})
Kullanarak verileri gruplandırdıktan sonra tablonun şemasını görebilirsiniz. describe komutu aşağıda gösterildiği gibi.
grunt> Describe group_data;
group_data: {group: int,student_details: {(id: int,firstname: chararray,
lastname: chararray,age: int,phone: chararray,city: chararray)}}
Aynı şekilde, şemanın örnek gösterimini kullanarak illustrate komutu aşağıda gösterildiği gibi.
$ Illustrate group_data;
Aşağıdaki çıktıyı üretecektir -
-------------------------------------------------------------------------------------------------
|group_data| group:int | student_details:bag{:tuple(id:int,firstname:chararray,lastname:chararray,age:int,phone:chararray,city:chararray)}|
-------------------------------------------------------------------------------------------------
| | 21 | { 4, Preethi, Agarwal, 21, 9848022330, Pune), (1, Rajiv, Reddy, 21, 9848022337, Hyderabad)}|
| | 2 | {(2,siddarth,Battacharya,22,9848022338,Kolkata),(003,Rajesh,Khanna,22,9848022339,Delhi)}|
-------------------------------------------------------------------------------------------------
Birden Çok Sütuna Göre Gruplama
İlişkiyi aşağıda gösterildiği gibi yaşa ve şehre göre gruplayalım.
grunt> group_multiple = GROUP student_details by (age, city);
Adlı ilişkinin içeriğini doğrulayabilirsiniz group_multiple Dump operatörünü aşağıda gösterildiği gibi kullanarak.
grunt> Dump group_multiple;
((21,Pune),{(4,Preethi,Agarwal,21,9848022330,Pune)})
((21,Hyderabad),{(1,Rajiv,Reddy,21,9848022337,Hyderabad)})
((22,Delhi),{(3,Rajesh,Khanna,22,9848022339,Delhi)})
((22,Kolkata),{(2,siddarth,Battacharya,22,9848022338,Kolkata)})
((23,Chennai),{(6,Archana,Mishra,23,9848022335,Chennai)})
((23,Bhuwaneshwar),{(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar)})
((24,Chennai),{(8,Bharathi,Nambiayar,24,9848022333,Chennai)})
(24,trivendram),{(7,Komal,Nayak,24,9848022334,trivendram)})
Tümünü Grupla
Bir ilişkiyi aşağıda gösterildiği gibi tüm sütunlara göre gruplayabilirsiniz.
grunt> group_all = GROUP student_details All;
Şimdi, ilişkinin içeriğini doğrulayın group_all Aşağıda gösterildiği gibi.
grunt> Dump group_all;
(all,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334 ,trivendram),
(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336,Bhuw aneshwar),
(4,Preethi,Agarwal,21,9848022330,Pune),(3,Rajesh,Khanna,22,9848022339,Delhi),
(2,siddarth,Battacharya,22,9848022338,Kolkata),(1,Rajiv,Reddy,21,9848022337,Hyd erabad)})
COGROUPoperatörü aşağı yukarı GROUP operatörü ile aynı şekilde çalışır . İki operatör arasındaki tek fark,group işleci normalde bir ilişkiyle kullanılırken cogroup operatör, iki veya daha fazla ilişkiyi içeren ifadelerde kullanılır.
Cogroup Kullanarak İki İlişkiyi Gruplama
İki dosyamız olduğunu varsayalım: student_details.txt ve employee_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.
student_details.txt
001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai
employee_details.txt
001,Robin,22,newyork
002,BOB,23,Kolkata
003,Maya,23,Tokyo
004,Sara,25,London
005,David,23,Bhuwaneshwar
006,Maggy,22,Chennai
Ve bu dosyaları ilişki isimleriyle Pig'e yükledik. student_details ve employee_details sırasıyla, aşağıda gösterildiği gibi.
grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);
grunt> employee_details = LOAD 'hdfs://localhost:9000/pig_data/employee_details.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, city:chararray);
Şimdi ilişkilerin kayıtlarını / kayıtlarını gruplayalım student_details ve employee_details aşağıda gösterildiği gibi anahtar yaş ile.
grunt> cogroup_data = COGROUP student_details by age, employee_details by age;
Doğrulama
İlişkiyi doğrulayın cogroup_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump cogroup_data;
Çıktı
İsimli ilişkinin içeriğini görüntüleyerek aşağıdaki çıktıyı üretecektir. cogroup_data Aşağıda gösterildiği gibi.
(21,{(4,Preethi,Agarwal,21,9848022330,Pune), (1,Rajiv,Reddy,21,9848022337,Hyderabad)},
{ })
(22,{ (3,Rajesh,Khanna,22,9848022339,Delhi), (2,siddarth,Battacharya,22,9848022338,Kolkata) },
{ (6,Maggy,22,Chennai),(1,Robin,22,newyork) })
(23,{(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336 ,Bhuwaneshwar)},
{(5,David,23,Bhuwaneshwar),(3,Maya,23,Tokyo),(2,BOB,23,Kolkata)})
(24,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334, trivendram)},
{ })
(25,{ },
{(4,Sara,25,London)})
cogroup operatör, her bir ilişkiden tuple'ları, her grubun belirli bir yaş değerini tasvir ettiği yaşa göre gruplandırır.
Örneğin, sonucun 1. grubunu ele alırsak, 21 yaşına göre gruplandırılır ve iki torba içerir -
ilk torba ilk ilişkideki tüm tupleları tutar (student_details bu durumda) 21 yaşında olmak ve
ikinci torba, ikinci ilişkiden (employee_details bu durumda) 21 yaşında olmak.
Bir ilişkinin 21 yaş değerine sahip demetleri yoksa boş bir torba döndürür.
JOINoperatörü, iki veya daha fazla ilişkiden kayıtları birleştirmek için kullanılır. Bir birleştirme işlemi gerçekleştirirken, her ilişkiden bir (veya bir grup) tuple (ler) i anahtar olarak ilan ederiz. Bu anahtarlar eşleştiğinde, iki belirli tuple eşleşir, aksi takdirde kayıtlar düşer. Birleştirmeler aşağıdaki türlerde olabilir -
- Self-join
- Inner-join
- Dış birleştirme - sol birleştirme, sağ birleştirme ve tam birleştirme
Bu bölüm örneklerle birleştirme operatörünün Pig Latince'de nasıl kullanılacağını açıklar. İki dosyamız olduğunu varsayalım:customers.txt ve orders.txt içinde /pig_data/ HDFS dizini aşağıda gösterildiği gibi.
customers.txt
1,Ramesh,32,Ahmedabad,2000.00
2,Khilan,25,Delhi,1500.00
3,kaushik,23,Kota,2000.00
4,Chaitali,25,Mumbai,6500.00
5,Hardik,27,Bhopal,8500.00
6,Komal,22,MP,4500.00
7,Muffy,24,Indore,10000.00
orders.txt
102,2009-10-08 00:00:00,3,3000
100,2009-10-08 00:00:00,3,1500
101,2009-11-20 00:00:00,2,1560
103,2008-05-20 00:00:00,4,2060
Ve bu iki dosyayı ilişkilerle birlikte Pig'e yükledik. customers ve orders Aşağıda gösterildiği gibi.
grunt> customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, address:chararray, salary:int);
grunt> orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',')
as (oid:int, date:chararray, customer_id:int, amount:int);
Şimdi bu iki ilişki üzerinde çeşitli Birleştirme işlemleri gerçekleştirelim.
Kendi kendine katıl
Self-join tablo iki ilişkiymiş gibi bir tabloyu kendisiyle birleştirmek için kullanılır, en az bir ilişkiyi geçici olarak yeniden adlandırır.
Genel olarak, Apache Pig'de, kendi kendine birleştirme gerçekleştirmek için, aynı verileri farklı adlar (adlar) altında birçok kez yükleyeceğiz. Bu nedenle dosyanın içeriğini yükleyelimcustomers.txt aşağıda gösterildiği gibi iki tablo olarak.
grunt> customers1 = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, address:chararray, salary:int);
grunt> customers2 = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, address:chararray, salary:int);
Sözdizimi
Aşağıda, performans sözdizimi verilmiştir self-join kullanarak operasyon JOIN Şebeke.
grunt> Relation3_name = JOIN Relation1_name BY key, Relation2_name BY key ;
Misal
Gerçekleştirelim self-join ilişki üzerinde işlem customers, iki ilişkiye katılarak customers1 ve customers2 Aşağıda gösterildiği gibi.
grunt> customers3 = JOIN customers1 BY id, customers2 BY id;
Doğrulama
İlişkiyi doğrulayın customers3 kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump customers3;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir customers.
(1,Ramesh,32,Ahmedabad,2000,1,Ramesh,32,Ahmedabad,2000)
(2,Khilan,25,Delhi,1500,2,Khilan,25,Delhi,1500)
(3,kaushik,23,Kota,2000,3,kaushik,23,Kota,2000)
(4,Chaitali,25,Mumbai,6500,4,Chaitali,25,Mumbai,6500)
(5,Hardik,27,Bhopal,8500,5,Hardik,27,Bhopal,8500)
(6,Komal,22,MP,4500,6,Komal,22,MP,4500)
(7,Muffy,24,Indore,10000,7,Muffy,24,Indore,10000)
İç birleşim
Inner Joinoldukça sık kullanılır; olarak da anılırequijoin. Her iki tabloda da bir eşleşme olduğunda bir iç birleşim satırları döndürür.
Birleştirme yüklemine dayalı olarak iki ilişkinin sütun değerlerini (örneğin A ve B) birleştirerek yeni bir ilişki oluşturur. Sorgu, birleşim koşulunu karşılayan tüm satır çiftlerini bulmak için her A satırını her B satırıyla karşılaştırır. Birleştirme koşulu karşılandığında, eşleşen her A ve B satır çiftinin sütun değerleri bir sonuç satırında birleştirilir.
Sözdizimi
İşte performans söz dizimi inner join kullanarak operasyon JOIN Şebeke.
grunt> result = JOIN relation1 BY columnname, relation2 BY columnname;
Misal
Gerçekleştirelim inner join iki ilişkide operasyon customers ve orders Aşağıda gösterildiği gibi.
grunt> coustomer_orders = JOIN customers BY id, orders BY customer_id;
Doğrulama
İlişkiyi doğrulayın coustomer_orders kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump coustomer_orders;
Çıktı
Adlı ilişkinin içeriğini alacak aşağıdaki çıktıyı alacaksınız coustomer_orders.
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
Note -
Dış Birleştirme : İç birleşimin aksine,outer joinilişkilerden en az birindeki tüm satırları döndürür. Bir dış birleştirme işlemi üç şekilde gerçekleştirilir -
- Sol dış katılma
- Sağ dış birleşim
- Tam dış birleşim
Sol dış katılma
left outer Join işlem, sağ ilişkide eşleşme olmasa bile soldaki tablodaki tüm satırları döndürür.
Sözdizimi
Aşağıda, performans sözdizimi verilmiştir left outer join kullanarak operasyon JOIN Şebeke.
grunt> Relation3_name = JOIN Relation1_name BY id LEFT OUTER, Relation2_name BY customer_id;
Misal
İki ilişki müşterisi ve siparişi üzerinde aşağıda gösterildiği gibi sol dış birleştirme işlemi yapalım.
grunt> outer_left = JOIN customers BY id LEFT OUTER, orders BY customer_id;
Doğrulama
İlişkiyi doğrulayın outer_left kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump outer_left;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir outer_left.
(1,Ramesh,32,Ahmedabad,2000,,,,)
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
(5,Hardik,27,Bhopal,8500,,,,)
(6,Komal,22,MP,4500,,,,)
(7,Muffy,24,Indore,10000,,,,)
Sağ Dış Birleştirme
right outer join işlem, soldaki tabloda eşleşme olmasa bile, sağ tablodaki tüm satırları döndürür.
Sözdizimi
Aşağıda, performans sözdizimi verilmiştir right outer join kullanarak operasyon JOIN Şebeke.
grunt> outer_right = JOIN customers BY id RIGHT, orders BY customer_id;
Misal
Gerçekleştirelim right outer join iki ilişkide operasyon customers ve orders Aşağıda gösterildiği gibi.
grunt> outer_right = JOIN customers BY id RIGHT, orders BY customer_id;
Doğrulama
İlişkiyi doğrulayın outer_right kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump outer_right
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir outer_right.
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
Tam Dış Birleştirme
full outer join İşlem, ilişkilerden birinde bir eşleşme olduğunda satır döndürür.
Sözdizimi
Aşağıda, performans sözdizimi verilmiştir full outer join kullanmak JOIN Şebeke.
grunt> outer_full = JOIN customers BY id FULL OUTER, orders BY customer_id;
Misal
Gerçekleştirelim full outer join iki ilişkide operasyon customers ve orders Aşağıda gösterildiği gibi.
grunt> outer_full = JOIN customers BY id FULL OUTER, orders BY customer_id;
Doğrulama
İlişkiyi doğrulayın outer_full kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grun> Dump outer_full;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir outer_full.
(1,Ramesh,32,Ahmedabad,2000,,,,)
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
(5,Hardik,27,Bhopal,8500,,,,)
(6,Komal,22,MP,4500,,,,)
(7,Muffy,24,Indore,10000,,,,)
Çoklu Tuşların Kullanılması
JOIN işlemini birden fazla anahtar kullanarak gerçekleştirebiliriz.
Sözdizimi
Birden çok anahtar kullanarak iki tabloda bir JOIN işlemini nasıl gerçekleştirebileceğiniz aşağıda açıklanmıştır.
grunt> Relation3_name = JOIN Relation2_name BY (key1, key2), Relation3_name BY (key1, key2);
İki dosyamız olduğunu varsayalım: employee.txt ve employee_contact.txt içinde /pig_data/ HDFS dizini aşağıda gösterildiği gibi.
employee.txt
001,Rajiv,Reddy,21,programmer,003
002,siddarth,Battacharya,22,programmer,003
003,Rajesh,Khanna,22,programmer,003
004,Preethi,Agarwal,21,programmer,003
005,Trupthi,Mohanthy,23,programmer,003
006,Archana,Mishra,23,programmer,003
007,Komal,Nayak,24,teamlead,002
008,Bharathi,Nambiayar,24,manager,001
employee_contact.txt
001,9848022337,[email protected],Hyderabad,003
002,9848022338,[email protected],Kolkata,003
003,9848022339,[email protected],Delhi,003
004,9848022330,[email protected],Pune,003
005,9848022336,[email protected],Bhuwaneshwar,003
006,9848022335,[email protected],Chennai,003
007,9848022334,[email protected],trivendram,002
008,9848022333,[email protected],Chennai,001
Ve bu iki dosyayı ilişkilerle birlikte Pig'e yükledik. employee ve employee_contact Aşağıda gösterildiği gibi.
grunt> employee = LOAD 'hdfs://localhost:9000/pig_data/employee.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, age:int, designation:chararray, jobid:int);
grunt> employee_contact = LOAD 'hdfs://localhost:9000/pig_data/employee_contact.txt' USING PigStorage(',')
as (id:int, phone:chararray, email:chararray, city:chararray, jobid:int);
Şimdi bu iki ilişkinin içeriğini JOIN Operatör aşağıda gösterildiği gibi.
grunt> emp = JOIN employee BY (id,jobid), employee_contact BY (id,jobid);
Doğrulama
İlişkiyi doğrulayın emp kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump emp;
Çıktı
İsimli ilişkinin içeriğini görüntüleyerek aşağıdaki çıktıyı üretecektir. emp Aşağıda gösterildiği gibi.
(1,Rajiv,Reddy,21,programmer,113,1,9848022337,[email protected],Hyderabad,113)
(2,siddarth,Battacharya,22,programmer,113,2,9848022338,[email protected],Kolka ta,113)
(3,Rajesh,Khanna,22,programmer,113,3,9848022339,[email protected],Delhi,113)
(4,Preethi,Agarwal,21,programmer,113,4,9848022330,[email protected],Pune,113)
(5,Trupthi,Mohanthy,23,programmer,113,5,9848022336,[email protected],Bhuwaneshw ar,113)
(6,Archana,Mishra,23,programmer,113,6,9848022335,[email protected],Chennai,113)
(7,Komal,Nayak,24,teamlead,112,7,9848022334,[email protected],trivendram,112)
(8,Bharathi,Nambiayar,24,manager,111,8,9848022333,[email protected],Chennai,111)
CROSSoperatör, iki veya daha fazla ilişkinin çapraz çarpımını hesaplar. Bu bölümde çapraz operatörün Pig Latince'de nasıl kullanılacağı örneklerle açıklanmaktadır.
Sözdizimi
Aşağıda verilen sözdizimi CROSS Şebeke.
grunt> Relation3_name = CROSS Relation1_name, Relation2_name;
Misal
İki dosyamız olduğunu varsayalım: customers.txt ve orders.txt içinde /pig_data/ HDFS dizini aşağıda gösterildiği gibi.
customers.txt
1,Ramesh,32,Ahmedabad,2000.00
2,Khilan,25,Delhi,1500.00
3,kaushik,23,Kota,2000.00
4,Chaitali,25,Mumbai,6500.00
5,Hardik,27,Bhopal,8500.00
6,Komal,22,MP,4500.00
7,Muffy,24,Indore,10000.00
orders.txt
102,2009-10-08 00:00:00,3,3000
100,2009-10-08 00:00:00,3,1500
101,2009-11-20 00:00:00,2,1560
103,2008-05-20 00:00:00,4,2060
Ve bu iki dosyayı ilişkilerle birlikte Pig'e yükledik. customers ve orders Aşağıda gösterildiği gibi.
grunt> customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, address:chararray, salary:int);
grunt> orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',')
as (oid:int, date:chararray, customer_id:int, amount:int);
Şimdi bu iki ilişkinin çapraz çarpımını, cross bu iki ilişkide operatör aşağıda gösterildiği gibi.
grunt> cross_data = CROSS customers, orders;
Doğrulama
İlişkiyi doğrulayın cross_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump cross_data;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir cross_data.
(7,Muffy,24,Indore,10000,103,2008-05-20 00:00:00,4,2060)
(7,Muffy,24,Indore,10000,101,2009-11-20 00:00:00,2,1560)
(7,Muffy,24,Indore,10000,100,2009-10-08 00:00:00,3,1500)
(7,Muffy,24,Indore,10000,102,2009-10-08 00:00:00,3,3000)
(6,Komal,22,MP,4500,103,2008-05-20 00:00:00,4,2060)
(6,Komal,22,MP,4500,101,2009-11-20 00:00:00,2,1560)
(6,Komal,22,MP,4500,100,2009-10-08 00:00:00,3,1500)
(6,Komal,22,MP,4500,102,2009-10-08 00:00:00,3,3000)
(5,Hardik,27,Bhopal,8500,103,2008-05-20 00:00:00,4,2060)
(5,Hardik,27,Bhopal,8500,101,2009-11-20 00:00:00,2,1560)
(5,Hardik,27,Bhopal,8500,100,2009-10-08 00:00:00,3,1500)
(5,Hardik,27,Bhopal,8500,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
(4,Chaitali,25,Mumbai,6500,101,2009-20 00:00:00,4,2060)
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(2,Khilan,25,Delhi,1500,100,2009-10-08 00:00:00,3,1500)
(2,Khilan,25,Delhi,1500,102,2009-10-08 00:00:00,3,3000)
(1,Ramesh,32,Ahmedabad,2000,103,2008-05-20 00:00:00,4,2060)
(1,Ramesh,32,Ahmedabad,2000,101,2009-11-20 00:00:00,2,1560)
(1,Ramesh,32,Ahmedabad,2000,100,2009-10-08 00:00:00,3,1500)
(1,Ramesh,32,Ahmedabad,2000,102,2009-10-08 00:00:00,3,3000)-11-20 00:00:00,2,1560)
(4,Chaitali,25,Mumbai,6500,100,2009-10-08 00:00:00,3,1500)
(4,Chaitali,25,Mumbai,6500,102,2009-10-08 00:00:00,3,3000)
(3,kaushik,23,Kota,2000,103,2008-05-20 00:00:00,4,2060)
(3,kaushik,23,Kota,2000,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(2,Khilan,25,Delhi,1500,103,2008-05-20 00:00:00,4,2060)
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(2,Khilan,25,Delhi,1500,100,2009-10-08 00:00:00,3,1500)
(2,Khilan,25,Delhi,1500,102,2009-10-08 00:00:00,3,3000)
(1,Ramesh,32,Ahmedabad,2000,103,2008-05-20 00:00:00,4,2060)
(1,Ramesh,32,Ahmedabad,2000,101,2009-11-20 00:00:00,2,1560)
(1,Ramesh,32,Ahmedabad,2000,100,2009-10-08 00:00:00,3,1500)
(1,Ramesh,32,Ahmedabad,2000,102,2009-10-08 00:00:00,3,3000)
UNIONPig Latin operatörü, iki ilişkinin içeriğini birleştirmek için kullanılır. UNION işlemini iki ilişkide gerçekleştirmek için, bunların sütunları ve etki alanları aynı olmalıdır.
Sözdizimi
Aşağıda verilen sözdizimi UNION Şebeke.
grunt> Relation_name3 = UNION Relation_name1, Relation_name2;
Misal
İki dosyamız olduğunu varsayalım: student_data1.txt ve student_data2.txt içinde /pig_data/ HDFS dizini aşağıda gösterildiği gibi.
Student_data1.txt
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.
Student_data2.txt
7,Komal,Nayak,9848022334,trivendram.
8,Bharathi,Nambiayar,9848022333,Chennai.
Ve bu iki dosyayı ilişkilerle birlikte Pig'e yükledik. student1 ve student2 Aşağıda gösterildiği gibi.
grunt> student1 = LOAD 'hdfs://localhost:9000/pig_data/student_data1.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray);
grunt> student2 = LOAD 'hdfs://localhost:9000/pig_data/student_data2.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray);
Şimdi bu iki ilişkinin içeriğini UNION Operatör aşağıda gösterildiği gibi.
grunt> student = UNION student1, student2;
Doğrulama
İlişkiyi doğrulayın student kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump student;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı gösterecektir. student.
(1,Rajiv,Reddy,9848022337,Hyderabad) (2,siddarth,Battacharya,9848022338,Kolkata)
(3,Rajesh,Khanna,9848022339,Delhi)
(4,Preethi,Agarwal,9848022330,Pune)
(5,Trupthi,Mohanthy,9848022336,Bhuwaneshwar)
(6,Archana,Mishra,9848022335,Chennai)
(7,Komal,Nayak,9848022334,trivendram)
(8,Bharathi,Nambiayar,9848022333,Chennai)
SPLIT işleci, bir ilişkiyi iki veya daha fazla ilişkiye bölmek için kullanılır.
Sözdizimi
Aşağıda verilen sözdizimi SPLIT Şebeke.
grunt> SPLIT Relation1_name INTO Relation2_name IF (condition1), Relation2_name (condition2),
Misal
Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.
student_details.txt
001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai
Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.
student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);
Şimdi ilişkiyi ikiye ayıralım, biri 23 yaşın altındaki çalışanları, diğeriyse 22-25 yaş arası çalışanları listeleyelim.
SPLIT student_details into student_details1 if age<23, student_details2 if (22<age and age>25);
Doğrulama
İlişkileri doğrulayın student_details1 ve student_details2 kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump student_details1;
grunt> Dump student_details2;
Çıktı
İlişkilerin içeriğini gösteren aşağıdaki çıktıyı üretecektir. student_details1 ve student_details2 sırasıyla.
grunt> Dump student_details1;
(1,Rajiv,Reddy,21,9848022337,Hyderabad)
(2,siddarth,Battacharya,22,9848022338,Kolkata)
(3,Rajesh,Khanna,22,9848022339,Delhi)
(4,Preethi,Agarwal,21,9848022330,Pune)
grunt> Dump student_details2;
(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar)
(6,Archana,Mishra,23,9848022335,Chennai)
(7,Komal,Nayak,24,9848022334,trivendram)
(8,Bharathi,Nambiayar,24,9848022333,Chennai)
FILTER işleci, bir koşula bağlı olarak bir ilişkiden gerekli tupleları seçmek için kullanılır.
Sözdizimi
Aşağıda verilen sözdizimi FILTER Şebeke.
grunt> Relation2_name = FILTER Relation1_name BY (condition);
Misal
Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.
student_details.txt
001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai
Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.
grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);
Şimdi Chennai şehrine mensup öğrencilerin ayrıntılarını almak için Filtre operatörünü kullanalım.
filter_data = FILTER student_details BY city == 'Chennai';
Doğrulama
İlişkiyi doğrulayın filter_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump filter_data;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir filter_data aşağıdaki gibi.
(6,Archana,Mishra,23,9848022335,Chennai)
(8,Bharathi,Nambiayar,24,9848022333,Chennai)
DISTINCT işleci, bir ilişkiden fazlalık (yinelenen) demetleri kaldırmak için kullanılır.
Sözdizimi
Aşağıda verilen sözdizimi DISTINCT Şebeke.
grunt> Relation_name2 = DISTINCT Relatin_name1;
Misal
Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.
student_details.txt
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai
006,Archana,Mishra,9848022335,Chennai
Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.
grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray);
Şimdi gereksiz (yinelenen) tupleları isimli ilişkiden kaldıralım. student_details kullanmak DISTINCT işleci ve adında başka bir ilişki olarak saklayın distinct_data Aşağıda gösterildiği gibi.
grunt> distinct_data = DISTINCT student_details;
Doğrulama
İlişkiyi doğrulayın distinct_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump distinct_data;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir distinct_data aşağıdaki gibi.
(1,Rajiv,Reddy,9848022337,Hyderabad)
(2,siddarth,Battacharya,9848022338,Kolkata)
(3,Rajesh,Khanna,9848022339,Delhi)
(4,Preethi,Agarwal,9848022330,Pune)
(5,Trupthi,Mohanthy,9848022336,Bhuwaneshwar)
(6,Archana,Mishra,9848022335,Chennai)
FOREACH işleci, sütun verilerine dayalı olarak belirtilen veri dönüşümlerini oluşturmak için kullanılır.
Sözdizimi
Aşağıda verilen sözdizimi FOREACH Şebeke.
grunt> Relation_name2 = FOREACH Relatin_name1 GENERATE (required data);
Misal
Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.
student_details.txt
001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai
Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.
grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray,age:int, phone:chararray, city:chararray);
Şimdi her öğrencinin id, yaş ve şehir değerlerini ilişkiden alalım. student_details ve bunu başka bir ilişkide saklayın foreach_data kullanmak foreach Operatör aşağıda gösterildiği gibi.
grunt> foreach_data = FOREACH student_details GENERATE id,age,city;
Doğrulama
İlişkiyi doğrulayın foreach_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump foreach_data;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir foreach_data.
(1,21,Hyderabad)
(2,22,Kolkata)
(3,22,Delhi)
(4,21,Pune)
(5,23,Bhuwaneshwar)
(6,23,Chennai)
(7,24,trivendram)
(8,24,Chennai)
ORDER BY işleci, bir ilişkinin içeriğini bir veya daha fazla alana göre sıralanmış bir düzende görüntülemek için kullanılır.
Sözdizimi
Aşağıda verilen sözdizimi ORDER BY Şebeke.
grunt> Relation_name2 = ORDER Relatin_name1 BY (ASC|DESC);
Misal
Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.
student_details.txt
001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai
Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.
grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray,age:int, phone:chararray, city:chararray);
Şimdi ilişkiyi öğrencinin yaşına göre azalan bir sırayla sıralayalım ve onu adlı başka bir ilişkide saklayalım. order_by_data kullanmak ORDER BY Operatör aşağıda gösterildiği gibi.
grunt> order_by_data = ORDER student_details BY age DESC;
Doğrulama
İlişkiyi doğrulayın order_by_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump order_by_data;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir order_by_data.
(8,Bharathi,Nambiayar,24,9848022333,Chennai)
(7,Komal,Nayak,24,9848022334,trivendram)
(6,Archana,Mishra,23,9848022335,Chennai)
(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar)
(3,Rajesh,Khanna,22,9848022339,Delhi)
(2,siddarth,Battacharya,22,9848022338,Kolkata)
(4,Preethi,Agarwal,21,9848022330,Pune)
(1,Rajiv,Reddy,21,9848022337,Hyderabad)
LIMIT operatörü, bir ilişkiden sınırlı sayıda tuple almak için kullanılır.
Sözdizimi
Aşağıda verilen sözdizimi LIMIT Şebeke.
grunt> Result = LIMIT Relation_name required number of tuples;
Misal
Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.
student_details.txt
001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai
Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.
grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray,age:int, phone:chararray, city:chararray);
Şimdi, ilişkiyi öğrencinin yaşına göre azalan sırada sıralayalım ve adını başka bir ilişkide saklayalım. limit_data kullanmak ORDER BY Operatör aşağıda gösterildiği gibi.
grunt> limit_data = LIMIT student_details 4;
Doğrulama
İlişkiyi doğrulayın limit_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.
grunt> Dump limit_data;
Çıktı
İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir limit_data aşağıdaki gibi.
(1,Rajiv,Reddy,21,9848022337,Hyderabad)
(2,siddarth,Battacharya,22,9848022338,Kolkata)
(3,Rajesh,Khanna,22,9848022339,Delhi)
(4,Preethi,Agarwal,21,9848022330,Pune)
Apache Pig çeşitli yerleşik işlevler sağlar: eval, load, store, math, string, bag ve tuple fonksiyonlar.
Değerlendirme Fonksiyonları
Aşağıda verilenler listesi eval Apache Pig tarafından sağlanan işlevler.
SN | İşlev ve Açıklama |
---|---|
1 | AVG () Bir torba içindeki sayısal değerlerin ortalamasını hesaplamak için. |
2 | BagToString () Bir çantanın öğelerini bir dizeye birleştirmek için. Birleştirirken, bu değerler arasına bir sınırlayıcı yerleştirebiliriz (isteğe bağlı). |
3 | CONCAT () Aynı türden iki veya daha fazla ifadeyi birleştirmek için. |
4 | MİKTAR() Bir çantadaki tuple sayısını sayarken bir çantadaki elemanların sayısını elde etmek için. |
5 | COUNT_STAR () Şuna benzer COUNT()işlevi. Bir çantadaki element sayısını elde etmek için kullanılır. |
6 | FARKLI () Bir demetteki iki çantayı (alanı) karşılaştırmak için. |
7 | Boş() Bir çantanın veya haritanın boş olup olmadığını kontrol etmek için. |
8 | MAKS () Tek sütunlu bir torbada bir sütunun en yüksek değerini (sayısal değerler veya karakter dizileri) hesaplamak için. |
9 | MIN () Tek sütunlu bir torbada belirli bir sütun için minimum (en düşük) değeri (sayısal veya karakter dizisi) elde etmek için. |
10 | PluckTuple () Domuz Latince Kullanımı PluckTuple() işlev, bir önek dizisi tanımlayabilir ve verilen önek ile başlayan bir ilişkideki sütunları filtreleyebiliriz. |
11 | BOYUT() Herhangi bir Pig veri türüne göre eleman sayısını hesaplamak için. |
12 | ÇIKARMA () İki torba çıkarmak için. Giriş olarak iki torba alır ve ikinci torbada olmayan ilk torbanın tuplelerini içeren bir torba döndürür. |
13 | TOPLA () Tek sütunlu bir torbada bir sütunun sayısal değerlerinin toplamını almak için. |
14 | TOKENİZE () Bir dizeyi (bir grup kelime içeren) tek bir demete bölmek ve bölme işleminin çıktısını içeren bir torba döndürmek. |
Load ve StoreApache Pig'deki işlevler, verilerin Pig'ten nasıl çıkacağını belirlemek için kullanılır. Bu fonksiyonlar, yükleme ve depolama operatörleri ile kullanılır. Aşağıda, Pig'de bulunan yükleme ve saklama işlevlerinin listesi verilmiştir.
SN | İşlev ve Açıklama |
---|---|
1 | PigStorage () Yapılandırılmış dosyaları yüklemek ve saklamak için. |
2 | TextLoader () Yapılandırılmamış verileri Pig'e yüklemek için. |
3 | BinStorage () Makine tarafından okunabilir formatı kullanarak verileri Pig'e yüklemek ve depolamak için. |
4 | Sıkıştırma İşlemi Pig Latin'de sıkıştırılmış verileri yükleyebilir ve depolayabiliriz. |
Aşağıda verilen Çanta ve Tuple işlevlerinin listesidir.
SN | İşlev ve Açıklama |
---|---|
1 | TOBAG () İki veya daha fazla ifadeyi torbaya dönüştürmek için. |
2 | ÜST() Zirveye ulaşmak için N bir ilişkinin demetleri. |
3 | TOTUPLE () Bir veya daha fazla ifadeyi demete dönüştürmek için. |
4 | HARİTAYA() Anahtar / değer çiftlerini bir Haritaya dönüştürmek için. |
Apache Pig'de aşağıdaki String işlevlerine sahibiz.
SN | Fonksiyonlar ve Açıklama |
---|---|
1 | ENDSWITH (dize, testAgainst) Belirli bir dizenin belirli bir alt dizeyle bitip bitmediğini doğrulamak için. |
2 | STARTSWITH (dize, alt dize) İki dize parametresini kabul eder ve ilk dizenin ikinciyle başlayıp başlamadığını doğrular. |
3 | SUBSTRING (dize, startIndex, stopIndex) Belirli bir dizeden bir alt dizeyi döndürür. |
4 | EqualsIgnoreCase (dize1; dize2) Davayı görmezden gelerek iki sokmayı karşılaştırmak. |
5 | INDEXOF (dize, 'karakter', startIndex) Bir dizedeki bir karakterin ilk oluşumunu, bir başlangıç dizininden ileriye doğru arayarak döndürür. |
6 | LAST_INDEX_OF (ifade) Bir dizedeki bir karakterin son oluşumunun dizinini, başlangıç dizininden geriye doğru arayarak döndürür. |
7 | LCFIRST (ifade) Bir dizedeki ilk karakteri küçük harfe dönüştürür. |
8 | UCFIRST (ifade) İlk karakteri büyük harfe dönüştürülmüş bir dize döndürür. |
9 | UPPER (ifade) UPPER (ifade) Büyük harfe dönüştürülmüş bir dizge döndürür. |
10 | LOWER (ifade) Bir dizedeki tüm karakterleri küçük harfe dönüştürür. |
11 | REPLACE (string, 'oldChar', 'newChar'); Bir dizedeki mevcut karakterleri yeni karakterlerle değiştirmek için. |
12 | STRSPLIT (dize, normal ifade, sınır) Bir dizeyi belirli bir düzenli ifadenin eşleşmelerine göre bölmek için. |
13 | STRSPLITTOBAG (dize, normal ifade, sınır) Benzer STRSPLIT() işlevi, dizeyi verilen sınırlayıcıya böler ve sonucu bir torba içinde döndürür. |
14 | TRIM (ifade) Baştaki ve sondaki boşlukları kaldırılmış bir dizenin bir kopyasını döndürür. |
15 | LTRIM (ifade) Baştaki boşlukları kaldırılmış bir dizenin bir kopyasını döndürür. |
16 | RTRIM (ifade) Sondaki boşlukları kaldırılmış bir dizenin bir kopyasını döndürür. |
Apache Pig aşağıdaki Tarih ve Saat işlevlerini sağlar -
SN | Fonksiyonlar ve Açıklama |
---|---|
1 | ToDate (milisaniye) Bu fonksiyon, verilen parametrelere göre bir tarih-saat nesnesi döndürür. Bu işlev için diğer alternatifler ToDate (iosstring), ToDate (userstring, format), ToDate (userstring, format, timezone) |
2 | Şimdiki zaman() geçerli zamanın tarih-saat nesnesini döndürür. |
3 | GetDay (tarih saat) Tarih-saat nesnesinden bir ayın gününü döndürür. |
4 | GetHour (tarih saat) Tarih-saat nesnesinden bir günün saatini döndürür. |
5 | GetMilliSecond (tarih saat) Tarih-saat nesnesinden bir saniyenin milisaniyesini döndürür. |
6 | GetMinute (tarih saat) Tarih-saat nesnesinden bir saatin dakikasını döndürür. |
7 | GetMonth (tarih saat) Tarih-saat nesnesinden bir yılın ayını döndürür. |
8 | GetSecond (tarih saat) Tarih-saat nesnesinden bir dakikanın saniyesini döndürür. |
9 | GetWeek (tarih saat) Tarih-saat nesnesinden bir yılın haftasını döndürür. |
10 | GetWeekYear (tarihsaat) Tarih-saat nesnesinden hafta yılını döndürür. |
11 | GetYear (tarih saat) Tarih-saat nesnesinden yılı döndürür. |
12 | AddDuration (tarih saat, süre) Süre nesnesiyle birlikte bir tarih-saat nesnesinin sonucunu döndürür. |
13 | Çıkarma Süresi (tarih saat, süre) Süre nesnesini Tarih-Saat nesnesinden çıkarır ve sonucu döndürür. |
14 | DaysBetween (datetime1, datetime2) İki tarih-saat nesnesi arasındaki gün sayısını döndürür. |
15 | HoursBetween (datetime1, datetime2) İki tarih-saat nesnesi arasındaki saat sayısını döndürür. |
16 | MilliSecondsBetween (datetime1, datetime2) İki tarih-saat nesnesi arasındaki milisaniye sayısını döndürür. |
17 | MinutesBetween (datetime1, datetime2) İki tarih-saat nesnesi arasındaki dakika sayısını döndürür. |
18 | MonthsBetween (datetime1, datetime2) İki tarih-saat nesnesi arasındaki ayların sayısını döndürür. |
19 | SecondsBetween (datetime1, datetime2) İki tarih-saat nesnesi arasındaki saniye sayısını döndürür. |
20 | WeeksBetween (datetime1, datetime2) İki tarih-saat nesnesi arasındaki hafta sayısını döndürür. |
21 | YearsBetween (datetime1, datetime2) İki tarih-saat nesnesi arasındaki yılların sayısını döndürür. |
Apache Pig'de aşağıdaki Matematik işlevlerine sahibiz -
SN | Fonksiyonlar ve Açıklama |
---|---|
1 | ABS (ifade) Bir ifadenin mutlak değerini almak için. |
2 | ACOS (ifade) Bir ifadenin ark kosinüsünü elde etmek için. |
3 | ASIN (ifade) Bir ifadenin yay sinüsünü elde etmek için. |
4 | ATAN (ifade) Bu fonksiyon, bir ifadenin yay tanjantını elde etmek için kullanılır. |
5 | TCMB (ifade) Bu işlev, bir ifadenin küp kökünü elde etmek için kullanılır. |
6 | CEIL (ifade) Bu fonksiyon, bir ifadenin değerini en yakın tam sayıya yuvarlamak için kullanılır. |
7 | COS (ifade) Bu fonksiyon, bir ifadenin trigonometrik kosinüsünü elde etmek için kullanılır. |
8 | COSH (ifade) Bu işlev, bir ifadenin hiperbolik kosinüsünü elde etmek için kullanılır. |
9 | EXP (ifade) Bu fonksiyon, Euler'in e sayısını x kuvvetine yükseltmek için kullanılır. |
10 | FLOOR (ifade) En yakın tam sayıya yuvarlanmış bir ifadenin değerini almak için. |
11 | LOG (ifade) Bir ifadenin doğal logaritmasını (e tabanı) elde etmek için. |
12 | LOG10 (ifade) Bir ifadenin 10 tabanlı logaritmasını elde etmek için. |
13 | RASTGELE () 0.0'a eşit veya 0.0'dan büyük ve 1.0'dan küçük bir rasgele sayı (double yazın) elde etmek için. |
14 | ROUND (ifade) Bir tam sayıya yuvarlanmış bir ifadenin değerini (sonuç türü float ise) veya uzun bir sayıya yuvarlanmış (sonuç türü çift ise) almak için. |
15 | SIN (ifade) Bir ifadenin sinüsünü elde etmek için. |
16 | SINH (ifade) Bir ifadenin hiperbolik sinüsünü elde etmek için. |
17 | SQRT (ifade) Bir ifadenin pozitif karekökünü elde etmek için. |
18 | TAN (ifade) Bir açının trigonometrik tanjantını elde etmek için. |
19 | TANH (ifade) Bir ifadenin hiperbolik tanjantını elde etmek için. |
Yerleşik işlevlere ek olarak Apache Pig, aşağıdakiler için kapsamlı destek sağlar: User Dtanımlanmış Fişlevler (UDF'ler). Bu UDF'leri kullanarak kendi işlevlerimizi tanımlayabilir ve kullanabiliriz. UDF desteği Java, Jython, Python, JavaScript, Ruby ve Groovy olmak üzere altı programlama dilinde sağlanmaktadır.
UDF'leri yazmak için tam destek Java'da sağlanır ve kalan tüm dillerde sınırlı destek sağlanır. Java kullanarak, veri yükleme / depolama, sütun dönüştürme ve toplama gibi işlemenin tüm bölümlerini içeren UDF'ler yazabilirsiniz. Apache Pig Java'da yazıldığından, Java dili kullanılarak yazılan UDF'ler diğer dillere kıyasla daha verimli çalışır.
Apache Pig'de ayrıca UDF'ler için bir Java havuzumuz var Piggybank. Piggybank'ı kullanarak, diğer kullanıcılar tarafından yazılmış Java UDF'lerine erişebilir ve kendi UDF'lerimizle katkıda bulunabiliriz.
Java'da UDF Türleri
Java kullanarak UDF'leri yazarken, aşağıdaki üç tür işlevi oluşturabilir ve kullanabiliriz:
Filter Functions- Filtre işlevleri, filtre ifadelerinde koşullar olarak kullanılır. Bu işlevler girdi olarak bir Pig değerini kabul eder ve bir Boole değeri döndürür.
Eval Functions- Eval fonksiyonları FOREACH-GENERATE deyimlerinde kullanılır. Bu işlevler girdi olarak bir Pig değerini kabul eder ve bir Pig sonucu döndürür.
Algebraic Functions- Cebirsel işlevler, ÖNCEKİNDE bildiriminde iç çantalara etki eder. Bu işlevler, iç çantada tam MapReduce işlemlerini gerçekleştirmek için kullanılır.
Java kullanarak UDF'ler yazmak
Java kullanarak bir UDF yazmak için jar dosyasını entegre etmeliyiz Pig-0.15.0.jar. Bu bölümde, Eclipse kullanarak örnek bir UDF'nin nasıl yazılacağını tartışıyoruz. Daha fazla ilerlemeden önce, sisteminize Eclipse ve Maven'ı kurduğunuzdan emin olun.
Bir UDF işlevi yazmak için aşağıdaki adımları izleyin -
Eclipse'i açın ve yeni bir proje oluşturun (örneğin myproject).
Yeni oluşturulan projeyi bir Maven projesine dönüştürün.
Aşağıdaki içeriği pom.xml dosyasına kopyalayın. Bu dosya, Apache Pig ve Hadoop-core jar dosyaları için Maven bağımlılıklarını içerir.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0http://maven.apache .org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Pig_Udf</groupId>
<artifactId>Pig_Udf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.pig</groupId>
<artifactId>pig</artifactId>
<version>0.15.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.20.2</version>
</dependency>
</dependencies>
</project>
Dosyayı kaydedin ve yenileyin. İçindeMaven Dependencies bölümünde, indirilen jar dosyalarını bulabilirsiniz.
Adlı yeni bir sınıf dosyası oluşturun Sample_Eval ve aşağıdaki içeriği içine kopyalayın.
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class Sample_Eval 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'leri yazarken, EvalFunc sınıfını miras almak ve uygulama sağlamak zorunludur. exec()işlevi. Bu fonksiyon içerisinde UDF için gerekli olan kod yazılır. Yukarıdaki örnekte, verilen sütunun içeriğini büyük harfe dönüştürmek için kodu döndürdük.
Sınıfı hatasız derledikten sonra Sample_Eval.java dosyasına sağ tıklayın. Size bir menü verir. Seçinizexport aşağıdaki ekran görüntüsünde gösterildiği gibi.
Tıklandığında export, aşağıdaki pencereyi alacaksınız. TıklamakJAR file.
Tıklayarak ilerleyin Next>buton. Jar dosyasını saklamanız gereken yerel dosya sistemine yolu girmeniz gereken başka bir pencere göreceksiniz.
Son olarak tıklayın Finishbuton. Belirtilen klasörde bir Jar dosyasısample_udf.jaryaratıldı. Bu jar dosyası, Java ile yazılmış UDF'yi içerir.
UDF'yi kullanma
UDF'yi yazıp Jar dosyasını oluşturduktan sonra, aşağıda verilen adımları izleyin -
1. Adım: Jar dosyasını kaydetme
UDF'yi (Java'da) yazdıktan sonra, Register operatörünü kullanarak UDF'yi içeren Jar dosyasını kaydetmemiz gerekir. Jar dosyasını kaydettirerek, kullanıcılar UDF'nin konumunu Apache Pig'e belirleyebilir.
Syntax
Aşağıda, Register operatörünün sözdizimi verilmiştir.
REGISTER path;
Example
Örnek olarak, bu bölümde daha önce oluşturulmuş sample_udf.jar dosyasını kaydettirelim.
Apache Pig'i yerel modda başlatın ve jar dosyasını sample_udf.jar aşağıda gösterildiği gibi kaydedin.
$cd PIG_HOME/bin $./pig –x local
REGISTER '/$PIG_HOME/sample_udf.jar'
Note - /$PIG_HOME/sample_udf.jar yolundaki Jar dosyasını varsayın
Adım 2: Takma Ad Tanımlama
UDF'yi kaydettikten sonra, onu kullanarak bir takma ad tanımlayabiliriz. Define Şebeke.
Syntax
Aşağıda, Define operatörünün sözdizimi verilmiştir.
DEFINE alias {function | [`command` [input] [output] [ship] [cache] [stderr] ] };
Example
Örnek_değer için takma adı aşağıda gösterildiği gibi tanımlayın.
DEFINE sample_eval sample_eval();
3. Adım: UDF'yi kullanma
Diğer adı tanımladıktan sonra UDF'yi yerleşik işlevlerle aynı şekilde kullanabilirsiniz. HDFS'de emp_data adlı bir dosya olduğunu varsayalım/Pig_Data/ aşağıdaki içeriğe sahip dizin.
001,Robin,22,newyork
002,BOB,23,Kolkata
003,Maya,23,Tokyo
004,Sara,25,London
005,David,23,Bhuwaneshwar
006,Maggy,22,Chennai
007,Robert,22,newyork
008,Syam,23,Kolkata
009,Mary,25,Tokyo
010,Saran,25,London
011,Stacy,25,Bhuwaneshwar
012,Kelly,22,Chennai
Ve bu dosyayı aşağıda gösterildiği gibi Pig'e yüklediğimizi varsayalım.
grunt> emp_data = LOAD 'hdfs://localhost:9000/pig_data/emp1.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, city:chararray);
Şimdi UDF kullanarak çalışanların isimlerini büyük harfe çevirelim. sample_eval.
grunt> Upper_case = FOREACH emp_data GENERATE sample_eval(name);
İlişkinin içeriğini doğrulayın Upper_case Aşağıda gösterildiği gibi.
grunt> Dump Upper_case;
(ROBIN)
(BOB)
(MAYA)
(SARA)
(DAVID)
(MAGGY)
(ROBERT)
(SYAM)
(MARY)
(SARAN)
(STACY)
(KELLY)
Bu bölümde, Apache Pig komut dosyalarını toplu modda nasıl çalıştıracağımızı göreceğiz.
Domuz Komut Dosyasında Yorumlar
Bir dosyaya komut dosyası yazarken, aşağıda gösterildiği gibi yorumları da ekleyebiliriz.
Çok satırlı yorumlar
Çok satırlı yorumlara '/ *' ile başlayıp, '* /' ile bitireceğiz.
/* These are the multi-line comments
In the pig script */
Tek satırlı yorumlar
Tek satırlık yorumlara '-' ile başlayacağız.
--we can write single line comments like this.
Toplu Modda Pig Komut Dosyasını Yürütme
Apache Pig deyimlerini toplu modda çalıştırırken, aşağıda verilen adımları izleyin.
Aşama 1
Gerekli tüm Pig Latince ifadeleri tek bir dosyaya yazın. Tüm Pig Latin deyimlerini ve komutlarını tek bir dosyaya yazıp şu şekilde kaydedebiliriz:.pig dosya.
Adım 2
Apache Pig komut dosyasını çalıştırın. Pig komut dosyasını aşağıda gösterildiği gibi kabuktan (Linux) çalıştırabilirsiniz.
Yerel mod | MapReduce modu |
---|---|
$ pig -x yerel Sample_script.pig | $ domuz -x mapreduce Sample_script.pig |
Bunu, aşağıda gösterildiği gibi exec komutunu kullanarak Grunt kabuğundan da çalıştırabilirsiniz.
grunt> exec /sample_script.pig
HDFS'den Pig Komut Dosyası Çalıştırma
Ayrıca HDFS'de bulunan bir Pig betiğini de çalıştırabiliriz. Adında bir Pig komut dosyası olduğunu varsayalımSample_script.pig HDFS dizininde /pig_data/. Aşağıda gösterildiği gibi çalıştırabiliriz.
$ pig -x mapreduce hdfs://localhost:9000/pig_data/Sample_script.pig
Misal
Bir dosyamız olduğunu varsayalım student_details.txt aşağıdaki içeriğe sahip HDFS'de.
student_details.txt
001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai
Ayrıca adında bir örnek komut dosyamız var. sample_script.pig, aynı HDFS dizininde. Bu dosya, üzerinde işlemleri ve dönüşümleri gerçekleştiren ifadeleri içerir.student ilişki, aşağıda gösterildiği gibi.
student = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray);
student_order = ORDER student BY age DESC;
student_limit = LIMIT student_order 4;
Dump student_limit;
Komut dosyasının ilk ifadesi, verileri adlı dosyaya yükleyecektir. student_details.txt bir ilişki olarak student.
Komut dosyasının ikinci ifadesi, ilişkinin demetlerini yaşa göre azalan sırayla düzenleyecek ve şu şekilde saklayacaktır: student_order.
Komut dosyasının üçüncü ifadesi, komut dosyasının ilk 4 demetini saklayacaktır. student_order gibi student_limit.
Son olarak dördüncü ifade, ilişkinin içeriğini silecektir student_limit.
Şimdi uygulayalım sample_script.pig Aşağıda gösterildiği gibi.
$./pig -x mapreduce hdfs://localhost:9000/pig_data/sample_script.pig
Apache Pig çalıştırılır ve size aşağıdaki içerikle çıktı verir.
(7,Komal,Nayak,24,9848022334,trivendram)
(8,Bharathi,Nambiayar,24,9848022333,Chennai)
(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar)
(6,Archana,Mishra,23,9848022335,Chennai)
2015-10-19 10:31:27,446 [main] INFO org.apache.pig.Main - Pig script completed in 12
minutes, 32 seconds and 751 milliseconds (752751 ms)