Pig安装及本地模式测试,体验
来源:互联网 发布:unity3d自动寻路插件 编辑:程序博客网 时间:2024/06/09 06:33
Pig是Apache的一个开源项目,用于简化MapReduce的开发。研究了一段时间,略有心得。系废话不多说,我们直接步入实际测试。
Pig的运行有两种模式,本地单击模式和集群模式。我目前只是测试学习,是为了检验Pig的运行流程以及学习语法,没必要使用分布式模式,分布式模式下也都是大同小异的。
我的环境:
1. 系统: Ubuntu 12.04 64位
2. JDK:Oracle JDK1.7.0_15
3. Pig:0.9.2
和Apache其他项目一样,安装Pig都很简单,解压到系统任意目录,设置环境变量就能使用。
1
export
PIG_HOME=path
2
export
PATH=$PATH:$PIG_HOME/bin
设置环境变量后注销后登录或者打开终端输入:source /etc/profile 使新加入的环境变量生效 最后在终端中输入:pig -version,正常应该出现如下字样
1
Warning: $HADOOP_HOME is deprecated.
2
3
Apache Pig version 0.9.2 (r1232772)
4
compiled Jan 18 2012, 07:57:19
1
pig -x
local
学习Hadoop一般的入门都是Oreilly的《《Hadoop权威指南》》中文版,其中测试MapReduce的第一个程序就是统计一个文本文件中单词出现的次数。Pig是为了简化MapReduce开发的,肯定也是能实现这个的。我以这个为例,写一个测试的例子。
我准备了一个文件,文件名为:nie.txt 里边是一片普通的英文文章,比较长,大约52KB。
我在自己的home下建立了一个workspace的文件夹,我是把它当作开始目录的。(为什么说这个?因为Pig Load数据的时候相对路径的起始文件路径很重要,搞错了就会出现文件找不到的错误。我开始就犯了这个错误)
nie.txt文件的路径为: ~/workspace/nie.txt 而我进入Pig外壳程序的起始路径是:~/workspace/ 下面是我的Pig脚本:
1
words =
load
'nie.txt'
using PigStorage(
' '
) as (line);
--以空格作为分隔符把内容分词读入
2
grpd = group words by line;
--以每个单词聚类,真实的是一个MapReduce的Map阶段
3
cntd = foreach grpd generate group, COUNT(words);
-- 这里既上一步Map完成紧接着Reduce阶段进行统计
4
dump cntd;
--直接在终端打印结果便于查看
1
pig -x
local
test1.pig
01
(So,1)
02
(We,1)
03
(as,7)
04
(at,1)
05
(be,3)
06
(he,2)
07
(
if
,1)
08
(
in
,12)
09
(is,10)
10
(it,9)
11
(no,2)
12
(of,21)
13
(on,3)
14
(or,1)
15
(so,1)
16
(to,11)
17
(us,2)
18
(we,1)
OK,我们的第一个例子已经完美的运行了。下面我解释一下代码。
如上所见,Pig也支持注释的,他的注释方式有2中,
一种是SQL的注释方式,如上面的--, --行后边的内容都会忽略
另一种是Java中的注释方式, /* 注释内容 */ ,它的注释可以一行也可以跨行(Java的程序员是不是很友好?)。
另外Pig Latin[忘了介绍了,Pig的脚本有专业的名字,叫Pig Latin,不知道神码意思]也是用;[分号]换行的,一条语句可以写在一行也可以多行。Pig在运行前会检查Pig Latin,并且对Pig Latin进行编译,用以确定程序逻辑和分析MapReduce。
如果程序有简单逻辑错误,运行前都不会编译通过。如我写的时候把group words by line中的line意识的写成了word,运行时出现了:
1
2013-04-13 22:21:12,619 [main] INFO org.apache.pig.Main - Logging error messages to: /home/zhenqin/workspace/pig_1365862872616.log
2
2013-04-13 22:21:12,713 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop
file
system at:
file
:///
3
2013-04-13 22:21:13,225 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1025:
4
Invalid field projection. Projected field [word] does not exist
in
schema: line:bytearray.
5
Details at logfile: /home/zhenqin/workspace/pig_1365862872616.log
下面我解释一下我出现过的问题。我在起初测试时进入Pig时不是从workspace进入的,我是从pighome,以bin/pig运行的,而我的统计文件存储在 ~/workspace/下,尽管我在Pig Latin脚本中使用了 load ‘/home/zhenqin/workspace/’或者 load ‘file:///home/zhenqin/workspace/’ 都报错,无法找到文件。为此我纠结了很长时间。
原来Pig的外壳程序Grunt也是有当前路径的。因此可以使用cd 跳转当前路径。
如我从pighome下进入Grunt,执行ls命令出现如下:
01
grunt>
ls
02
file
:/opt/pig-0.9.2/testfile:/opt/pig-0.9.2/tutorialfile:/opt/pig-0.9.2/libfile:/opt/pig-0.9.2/ivyfile:/opt/pig-0.9.2/CHANGES.txt87506
03
file
:/opt/pig-0.9.2/RELEASE_NOTES.txt2224
04
file
:/opt/pig-0.9.2/LICENSE.txt11358
05
file
:/opt/pig-0.9.2/conffile:/opt/pig-0.9.2/licensefile:/opt/pig-0.9.2/NOTICE.txt2120
06
file
:/opt/pig-0.9.2/binfile:/opt/pig-0.9.2/build.xml77427
07
file
:/opt/pig-0.9.2/pig-0.9.2.jar17585882
08
file
:/opt/pig-0.9.2/README.txt1307
09
file
:/opt/pig-0.9.2/ivy.xml13509
10
file
:/opt/pig-0.9.2/scriptsfile:/opt/pig-0.9.2/pig-0.9.2-withouthadoop.jar6018058
它同时也支持Hadoop的一些命名,如:
1
copyFromLocal localfile hdfsfile
2
copyToLocal hdfsfile localfile
1
grunt> sh
ls
-l
2
总用量 6
3
-rw------- 1 zhenqin zhenqin 52220 2月 3 2012 nie.txt
4
-rw-rw-r-- 1 zhenqin zhenqin 2896 4月 13 22:03 pig_1365861790591.log
5
-rw-rw-r-- 1 zhenqin zhenqin 2896 4月 13 22:21 pig_1365862872616.log
6
-rw-rw-r-- 1 zhenqin zhenqin 443 4月 13 22:21 test1.pig
7
-rw-rw-r-- 1 zhenqin zhenqin 210 4月 12 21:35 test2.pig
8
-rw-rw-r-- 1 zhenqin zhenqin 245 4月 12 22:40 test3.pig
- Pig安装及本地模式测试,体验
- Pig安装及本地模式测试,体验
- Pig安装及测试
- pig 安装部署及mapreduce模式下测试
- <Hadoop>Pig安装及测试
- pig实验本地模式
- pig安装及问题
- Pig 基础及安装
- 【hadoop pig】pig安装及使用
- pig Map/Reduce模式安装
- Pig安装及简单实例
- Pig安装及简单实例
- Pig安装及简单实例
- Pig安装及简单实例
- windows storm安装及本地模式执行
- Pig安装测试和出现的问题
- PIG安装配置及案例应用
- PIG安装配置及案例应用
- MobaXterm
- 数组,行列互换
- 生动详细解释javascript的冒泡和捕获,包懂包会
- SQL中的CASE WHEN使用 .
- 编译魔趣开源代码android4.3.3
- Pig安装及本地模式测试,体验
- 各种声明
- phpExcel常用方法
- python中的有序字典
- MIT新技术:远程触摸和操纵实物 创新人机交互
- SQLSERVER-CASE关键词的用法 .
- 国外源码精品-Android-PullToRefresh 简介与DEMO导入
- 最高成绩,最低成绩,平均成绩处理
- STM32 CAN通信 滤波器配置总结