Apache Pig 简明教程
Apache Pig - Running Scripts
在本章中,我们将了解如何在批处理模式下运行 Apache Pig 脚本。
Comments in Pig Script
在文件中编写脚本时,我们可以按照如下所示的方式在其中包含注释。
Executing Pig Script in Batch mode
在批处理模式下执行 Apache Pig 语句时,请按照以下步骤操作。
Step 2
执行 Apache Pig 脚本。你可以按照如下所示的方式从 shell(Linux)执行 Pig 脚本。
Local mode |
MapReduce mode |
$ pig -x local Sample_script.pig |
$ pig -x mapreduce Sample_script.pig |
你也可以按照如下所示的方式使用 exec 命令从 Grunt shell 执行它。
grunt> exec /sample_script.pig
Executing a Pig Script from HDFS
我们还可以执行驻留在 HDFS 中的 Pig 脚本。假设在名为 /pig_data/ 的 HDFS 目录中有一个名为 Sample_script.pig 的 Pig 脚本。我们可以按照如下所示的方式执行它。
$ pig -x mapreduce hdfs://localhost:9000/pig_data/Sample_script.pig
Example
假设我们在 HDFS 中有一个文件 student_details.txt ,内容如下。
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
我们还有同一个 HDFS 目录中的一个样例脚本,名为 sample_script.pig 。该文件包含对 student 关系执行操作和转换的语句,如下所示。
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;
-
该脚本的第一条语句将以 student_details.txt 命名的文件中数据载入到名为 student 的关系中。
-
该脚本的第二条语句将按照年龄对该关系的元组进行降序排列,并将其存储为 student_order 。
-
该脚本的第三个语句将把 student_order 中的前 4 个元组存储为 student_limit 。
-
最后,第四个语句将转储 student_limit 关系的内容。
现在让我们按照如下所示执行 sample_script.pig 。
$./pig -x mapreduce hdfs://localhost:9000/pig_data/sample_script.pig
Apache Pig 已经执行,并给出了内容如下。
(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)