自己按照官网装的,顺便把官网的文档给翻译了。如果错误,敬请提示!有部分问题,烦劳大神解压。
安装pig:
1. 下载安装hadoop1.1.2
2. 下载安装JDK1.6
3. 下载pig,解压到指定目录。pig的命令在bin目录中,配置信息在conf中的pig.properties中。
4. 将pig的bin目录加入到path中去。运行pig-version
编译pig
从svn上下载源码,SVN: svn co http://svn.apache.org/repos/asf/pig/trunk
然后在其根目录运行ant就可以了,下面有已经写好的build.xml文件
运行pig
| Local Mode | Mapreduce Mode |
Interactive Mode | Yes | Yes |
Batch Mode | Yes | yes |
按照执行类型分有两种执行模式:
本地模式 - 有一台可访问的机器即可,所有文件的安装和执行都在这个机器的系统上进行。也就是说连接的是linux系统,而不是hadoop集群。使用pig -x local来制定本地模式。本地模式不支持hadoop中的mapper并行执行。因为hadoop的LocalJobRunner不是线程安全的。
MapReduce模式 - 有可访问的hadoop集群和hdfs系统。这是pig的默认执行模式。可以不用指定-x 标记。pig或pig -x mapreduce都是运行这种模式。
这里因为我的hadoop集群没有启动,所以没有进入pig 的shell界面,但是我们可以看到它是在连接hdfs://will-vm1/9000的。这是因为pig会通过环境变量中对HADOOP_HOME的指定定位到hadoop的配置文件。
交互模式
就是能跟shell进行实时互动,就可以理解为shell操作。
在pig的grunt中能够记忆目录,像linux一样支持相对路径,不像hdfs要一直输入绝对路径。
批处理模式
把交互的命令写进脚本,之后执行脚本。
plus:貌似pig也支持嵌入java代码执行。
有自动补全机制,也有eclipse插件PigGen,但是不常用。
pig脚本
注释:单行用--,多行就用/**/
pig能够运行存储在HDFS, Amazon S3等其他分布式系统的scripts(和Jar文件),但是需要指定文件完整的URI。例如,跑一个在HDFS上的脚本:
$ pighdfs://nn.mydomain.com:9020/myscripts/script.pig
Pig Latin Statements
基本组成:
l LOAD语句从文件系统进行读取;
l 一系列的转化语句来执行数据;
l DUMP语句看结果或者STORE语句存储结果。
注意:要产生output,必须要有DUMP或者STORE语句。
使用数据进行业务操作:
pig有很多方式供你选择来转化数据。作为开始,先熟悉下面的:
· 使用FILTER 来筛选数据的tuples或者rows. 使用FOREACH来筛选数据的columns.
· 使用 GROUP 进行数据分组. 使用 COGROUP, innerJOIN, 以及 outerJOIN 来组织不同数据之间的关系.
· 使用 UNION 来合并多个关系的内容. 使用SPLIT 来把一个关系的内容分成多个区.
一个pig realtion是很多tuples组成的,它相当于关系数据库中的table,tuples对应table中的row。但是,pig不像关系型数据库那样要求每行都有同样的列数,或者所有的列中各自的数据都要是相同的类型。也要注意无序的relation同时也说明tuples也是无序排列的。Furthermore, processing may be parallelized inwhich case tuples are not processed according to any total ordering.(这句不懂)
存储中间结果
pig会在HDFS的临时目录中存储mr任务的中间输出结果。这个临时位置一定要在HDFS上提前弄好。它的配置参数是pig.temp.dir,默认是/tmp。
最终结果的存储
使用 STORE和 load/storefunctions 把结果写进文件系统。(PigStorage是默认的存储函数)
注意: 在实现的测试阶段,你可以使用DUMP在终端展示结果。但是,在正式生产环境,你会总希望它直接存储进文件里(参见 Storevs. Dump).
调试 Pig Latin
Pig Latin 提供调试Pig Latin语句的命令:
· 使用 DUMP 把结果输出到终端窗口.
· 使用 DESCRIBE 来浏览关系的规范.
· 使用 EXPLAIN 来解析查看逻辑、物理或者mapreduce的执行计划。 to view the logical,physical, or map reduce execution plans to compute a relation.
· 使用 ILLUSTRATE 来查看一系列语句的一步步执行结果.
Pig 属性
Pig 支持许多java参数,我们可以通过这些参数的设置来对pig进行调整. 你可以使用helpproperties 命令把属性列表都查看出来. 所有的这些属性都是可选的,没有必须要指定的.
· pig.properties文件 (把包含此文件的目录加到classpath中)
· 使用-D 命令行参数指定(pig-Dpig.tmpfilecompression=true)
· 使用-P 指定一个properties文件 (pig -P mypig.properties)
· 使用 set 方法 (set pig.exec.nocombiner true)
注意: 这个properties文件使用标准Java property格式.
优先级次序:pig.properties < -D 属性 < -P properties 文件 < set 命令(最高).
· 使用Hadoop 配置文件 (include pig-cluster-hadoop-site.xml)
· 使用-D 命令行参数(pig–Dmapreduce.task.profile=true)
· 使用-P 指定配置文件 (pig-P property_file)
· 使用 set 命令(set mapred.map.tasks.speculative.executionfalse)
Hadoop属性会直接送往hadoop,而不是交给pig处理。任何Hadoop属性都可以通过这种方式进行传递.
所有通过pig设定的属性,包括hadoop的相关属性,通过UDFContext的方式对于任意一个UDF都可以使用。我们可以使用getJobConf方法得到这些属性值
Pig Tutorial
Pig tutorial 展示怎样用pig的本地模式和mapreduce模式运行pig脚本。 (参见 ExecutionModes).
在开始阶段, 做如下的预备工作:
- 确认环境变量JAVA_HOME设定为你的java的根目录.
- 确认环境变量PATH里已经有了pig的bin目录.
3. $ export PATH=/<my-path-to-pig>/pig-0.9.0/bin:$PATH
- 设定 PIG_HOME 环境变量:
- 创建 pigtutorial.tar.gz 文件:
o 切换到 Pig tutorial 目录 (.../pig-0.9.0/tutorial).
o 编辑目录中的build.xml 文件.
o Change this: <property name="pigjar" value="../pig.jar" />
o To this: <property name="pigjar" value="../pig-0.9.0-core.jar" />
o 直接在tutorial目录运行ant,创建出pigtutorial.tar.gz文件.
- Copy 文件pigtutorial.tar.gz到本地目录.
- 解压.
8. $ tar -xzf pigtutorial.tar.gz
- 目录pigtmp被创建了,这个目录包含Pig Tutorial文件. 这些文件包含所有在hadoop上运行Pig Script 1 and Pig Script 2的命令.
本地模式运行pig脚本
- 转移到pigtmp目录.
- 执行下面的命令(使用script1-local.pig或者script2-local.pig).
3. $ pig -x local script1-local.pig
可以看到,尽管是本地模式,我也并没有启动hadoop集群,pig会自己去找到hadoop的目录之后启动mapreduce任务。
- 去script1-local-results.txt目录中查看part-r-00000结果.
Mapreduce 模式运行pig脚本
- 转移到pigtmp目录.
- Copy文件excite.log.bz2到HDFS的目录中.
3. $ hadoop fs –copyFromLocal excite.log.bz2 .
- 设置环境变量PIG_CLASSPATH为hadoop集群的配置目录(包含core-site.xml, hdfs-site.xml以及mapred-site.xml文件的目录),也设置hadoop的目录HADOOP_CONF_DIR:
- 执行下面的命令(使用 script1-hadoop.pig 或者 script2-hadoop.pig):
6. $ pig script1-hadoop.pig
- 在HDFS的目录script1-hadoop-results或者script2-hadoop-results中检查结果:
8. $ hadoop fs -ls script1-hadoop-results
9. $ hadoop fs -cat 'script1-hadoop-results/*' | less
Pig Tutorial 文件
Pig tutorial 文件 (pigtutorial.tar.gz) 的内容如下.
File | Description |
pig.jar | Pig JAR 文件 |
tutorial.jar | User defined functions (UDFs) and Java classes |
script1-local.pig | Pig Script 1, Query Phrase Popularity (local mode) |
script1-hadoop.pig | Pig Script 1, Query Phrase Popularity (mapreduce mode) |
script2-local.pig | Pig Script 2, Temporal Query Phrase Popularity (local mode) |
script2-hadoop.pig | Pig Script 2, Temporal Query Phrase Popularity (mapreduce mode) |
excite-small.log | Log file, Excite search engine (local mode) |
excite.log.bz2 | Log file, Excite search engine (mapreduce) |
(UDFs)用户自定义函数解释如下.
UDF | Description |
ExtractHour | Extracts the hour from the record. |
NGramGenerator | Composes n-grams from the set of words. |
NonURLDetector | Removes the record if the query field is empty or a URL. |
ScoreGenerator | Calculates a "popularity" score for the n-gram. |
ToLower | Changes the query field to lowercase. |
TutorialUtil | Divides the query string into a set of words. |