- 浏览: 36143 次
- 性别:
- 来自: 南京
最新评论
-
sanrenxing_1:
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方 ...
WebSocket(13)和C#通信 -
qnfng:
兄弟没成啊,握手失败!没反应啊
WebSocket(13)和C#通信
(一)安装Pig
在安装Pig之前,Hadoop环境已经配置好了,因此这里直接从安装Pig开始。
1. 下载Pig安装包
Pig-0.9.2下载地址:http://mirror.bjtu.edu.cn/apache/pig/pig-0.9.2/
在以上地址选择pig-0.9.2.tar.gz文件,也就是linux系统的压缩文件,下载到路径:/home/hadoop/HadoopHome
2.解压Pig安装包
在命令行切换至下载目录:
$ cd /home/hadoop/HadoopHome
在命令行解压缩安装包:
$ tar -zxvf pig-0.9.2.tar.gz
3.设置环境变量
在命令行以root用户编辑配置文件:
$ sudo vi /etc/profile
在文件末尾添加如下内容:
export PIG_INSTALL=/home/hadoop/HadoopHome/pig-0.9.2
export PATH=$PATH:$PIG_INSTALL/bin
export PIG_HADOOP_VERSION=20
export PIG_CLASSPATH=$HADOOP_INSTALL/conf
其中:PATH允许你在命令行使用pig命令;PIG_HADOOP_VERSION是告诉pig所使用的hadoop版本;PIG_CLASSPATH用来指定Hadoop配置文件所在的目录,分布式执行Pig的时候用到。
保存后重新加载profile文件以使其生效:
$ source /etc/profile
4.测试Pig安装结果
在命令行查看Pig帮助:
$ pig –help
… USAGE: …
(二)本地模式:简单的Pig语句
1.准备实验数据
复制/etc/passwd文件到Pig的本地工作目录:
$ cp /etc/passwd /home/hadoop/HadoopHome/PigHome/
2.以本地模式打开和关闭Pig控制台
在命令行切换到Pig的本地工作目录:
$ cd /home/hadoop/HadoopHome/PigHome/
说明:因为打开Pig的交互程序,也就是Grunt Shell之后,无法使用linux命令行的指令,而Grunt Shell默认的路径是命令行的当前路径,因此切换到本地工作目录可以省去输入文件的绝对路径。
打开Grunt Shell方法一:
$ pig –x local
... - Connecting to ...
grunt>
打开Grunt Shell方法二:
$ java -cp pig.jar org.apache.pig.Main -x local
关闭Grunt Shell:
grunt> quit
3.执行Pig Latin语句
解析passwd文件:
grunt> A = load 'passwd' using PigStorage(':');
grunt> B = foreach A generate $0 as id;
grunt> dump B;
… (root) …
说明:以上语句先将passwd文件的内容加载到变量A,变量B通过遍历A的数据,取A的第一列作为id得来,最后使用dump命令输出B到控制台。所有的语句都仅仅被解析,直到执行了dump或者store命令。dump命令将打印出这个变量的内容,store命令将变量内容保存到文件中。最后注意,每一条命令都需要以分号结束。
说明:Pig Lartin语句一般以如下形式组织
1)一条Load语句来从文件系统读取数据
2)一系列转换语句来处理数据
3)一条Dump语句来查看结果,或者一条Store语句来保存结果
查看A的结构:
grunt> describe A;
Schema for A unknown.
grunt> describe B;
B: {id: bytearray}
说明,因为没有定义A的结构,所以是未知;定义了B的id列而没有指定数据类型,默认是bytearray类型。
查看B的前四行:
grunt> lmt = limit B 4;
grunt> dump lmt;
...
(adm)
(bin)
(root)
(deamon)
(三)本地模式:Pig的数据类型
Pig支持的数据类型如下:
简单数据类型 |
描述 |
实例 |
基本型 |
|
|
int |
带符号的32位整数 |
10 |
long |
带符号的64位整数 |
数据:10L 或 10l 展示:10L |
Float |
32位浮点数 |
数据:10.5F 或 10.5f 或 10.5e2f 或 10.5E2F 展示:10.5F 或 1050.0F |
double |
64位浮点数 |
数据:10.5 或 10.5e2 或 10.5E2 展示:10.5 或 1050.0 |
数组型 |
|
|
chararray |
UTF-8编码的字符串 |
hello world |
bytearray |
字符数组(blob) |
|
复合数据类型 |
|
|
tuple |
一组有序字段 |
(19,2) |
bag |
若干tuple的集合 |
{(19,2),(18,1)} |
map |
一组键值对 |
[open#apache] |
1.Pig的默认数据类型和自动转换
grunt> A = load 'data' as (f1, f2, f3);
grunt> describe A;
A: {f1: bytearray, f2: bytearray, f3: bytearray}
说明:如果不指定数据类型,默认按bytearray类型处理。
grunt> B = FOREACH A GENERATE f1 + 5;
…
grunt> describe B;
…
B: {int}
说明:在B中因为5是整数,所以f1被转换为整数类型,这里命令行会有类型转换警告。
grunt> C = FOREACH A generate f1 + f2;
…
grunt> describe C;
…
C: {double}
说明,因为f1和f2的类型都不清楚,因此转换为double类型。
2.tuple类型
在工作目录PigHome下准备测试数据文件data,内容如下:
(3,8,9) (4,5,6)
(1,4,7) (3,7,5)
(2,5,8) (9,5,8)
注意:括弧间是制表符,如果替换为空格,则无法解析出第二个tuple。
解析和输出data文件:
grunt> A = load 'data' as (t1:tuple(t1a:int, t1b:int,t1c:int),t2:tuple(t2a:int,t2b:int,t2c:int));
grunt> dump A;
…
(3,8,9),(4,5,6)
(1,4,7),(3,7,5)
(2,5,8),(9,5,8)
抽取和输出data的数据:
grunt> X = FOREACH A GENERATE t1.t1a,t2.$0;
grunt> DUMP X;
…
(3,4)
(1,3)
(2,9)
3.bag类型
说明:
1)一个bag可以拥有多个tuple;
2)一个bag内的tuple可以拥有不同数量的字段,如果Pig尝试获取不存在的字段,该字段将被null替代;
3)一个bag内的tuple可以拥有不同的数据类型。然而为了Pig高效的处理这些bag,bag内的tuple应该拥有相同的结构
修改data的内容如下:
(1,2,3)
(4,2,1)
(8,3,4)
(4,3,3)
定义A然后输出:
grunt> A = load 'data' as (f1:int, f2:int, f3;int);
grunt> dump A;
(1,2,3)
(4,2,1)
(8,3,4)
(4,3,3)
说明,这里A可以看做一个relation或者一个bag,并且是一个外bag。
grunt> X = GROUP A BY f1;
grunt> DUMP X;
…
(1,{(1,2,3)})
(4,{(4,2,1),(4,3,3)})
(8,{(8,3,4)})
说明,这里X是一个relation或者bag。X作为relation时,其tuple有两个字段,第一个整数字段,第二个bag字段,这个bag是内bag。
(四)本地模式:Pig的关系函数
1.准备试验数据文件
在PigHome创建文档文件A,内容如下:
0,1,2
1,3,4
创建文档文件B,内容如下:
0,5,2
1,7,8
2.使用union函数
分别加载A和B,然后使用union函数合并:
grunt> a = load 'A' using PigStorage(',') as (a1:int, a2:int, a3:int);
grunt> b = load 'B' using PigStorage(',') as (b1:int, b2:int, b3:int);
grunt> c = union a, b;
grunt> dump c;
…
(0,5,2)
(1,7,8)
(0,1,2)
(1,3,4)
3.使用split函数
将c分割为d和e,其中d的第一列数据值为0,e的第一列的数据为1:
grunt> split c into d if $0 == 0, e if $0 == 1;
grunt> dump d;
…
(0,1,2)
(0,5,2)
grunt> dump e;
…
(1,3,4)
(1,7,8)
4.使用filter函数
选择c中第二列值大于3的数据:
grunt> f = filter c by $1 > 3;
grunt> dump f;
…
(0,5,2)
(1,7,8)
5.使用group函数
对c的数据按第三列的值进行分组:
grunt> g = group c by $2;
grunt> dump g;
…
(2,{(0,1,2),(0,5,2)})
(4,{(1,3,4)})
(8,{(1,7,8)})
聚合所有的元素:
grunt> h = group c all;
grunt> dump h;
…
(all,{(0,1,2),(1,3,4),(0,5,2),(1,7,8)})
6.使用count函数
查看h中元素个数:
grunt> i = foreach h generate COUNT($1);
grunt> dump i;
…
(4)
说明:此处COUNT要大写,否则会有编译错误。
7.使用join函数
按照第三列连接a和b:
grunt> j = join a by $2, b by $2;
grunt> dump j;
…
(0,1,2,0,5,2)
(五)本地模式:自定义函数(UDF)
pig能够支持两种类型的UDF:eval和load/store,其中load/store的自定义函数主要是用来加载和保存特定的数据格式;eval自定义函数主要用来进行常规的数据转换。
Pig安装文件夹下包含了一个eval的UDF实例UPPER.java,位于/myudfs目录下,该函数将输入的字符串转换为大写。这里直接使用该实例进行实验。
1.编译jar文件
切换到/myudfs目录:
$ cd /home/hadoop/HadoopHome/pig-0.9.2/myudfs
编译UPPER.java文件,生成jar文件:
$ javac -cp ../pig.jar UPPER.java
$ cd ..
$ jar -cf myudfs.jar myudfs
将myudfs.jar文件移动到PigHome:
$ mv myudfs.jar ~/HadoopHome/PigHome
2.准备实验数据
在PigHome下新建文档文件student_data,内容如下:
student1,1,1
studetn2,2,2
student3,3,3
student4,4,4
3.注册和使用该UDF
注册UDF:
grunt> register myudfs.jar
使用UDF:
grunt> A = load 'student_data' using PigStorage(',') as (name:chararray, age:int,gpa:double);
grunt> B = FOREACH A GENERATE myudfs.UPPER(name);
grunt> dump B;
…
(STUDENT1)
(STUDETN2)
(STUDENT3)
(STUDENT4)
(六)分布模式:批处理执行Pig Lartin语句
1.准备数据文件
准备如下文档文件A,内容如下:
0,1,2
1,3,4
复制以上文件到HDFS:
grunt> fs –copyFromLocal A A
或者:
grunt> fs –put A A
说明:copyFromLocal和put是一个效果,且用法一致。
查看文件是否复制成功:
grunt> ls
hdfs:// … A …
grunt> cat A
0,1,2
1,3,4
2.编写和运行Pig脚本文件
新建文档文件myscript.pig,内容如下:
/*
Pig脚本文件
*/
a = load ‘A’ using PigStorage(‘,’); -- 加载文件A的数据
b = foreach a generate $0 as id; -- 遍历a的第一列
dump b; -- 输出b的结果
交互模式执行myscript.pig脚本:
grunt> run myscript.pig
…
(0)
(1)
说明:通过run命令执行脚本,可以在脚本与Grunt Shell之间进行交互(交互模式)。脚本内可以访问外部在Grunt Shell定义的aliase;Grunt Shell也可访问在脚本内定义的aliase。脚本的所有命令在Shell执行记录中可见。
批处理模式执行myscript.pig脚本:
grunt> exec myscript.pig
…
(0)
(1)
说明:以exec命令执行脚本,不会在脚本与Grunt Shell之间存在交互(批处理模式)。脚本和Shell不能互相访问aliase。脚本命令在Shell的执行记录也不可见。
以上。
南邮福富实验室
wuxiaochao@live.com
发表评论
-
Linux笔记
2012-07-26 09:25 0(1)删除文件夹 rm -rf /路径/文件夹 (2 ... -
C#笔记
2012-07-23 13:43 847(1)C#开发窗口应用程序的界面布局 最简单的当然是XY布局 ... -
Java以Post方式访问spring的action
2012-07-07 16:26 1743对方定义的Web接口,接收JSON对象,返回也是JSON对象。 ... -
Hadoop以及VMWare虚拟机问题记录
2012-03-07 17:54 2909一、VMWare 问1)在VCENTER克隆虚拟机时提 ... -
Android开发环境配置
2011-12-25 16:31 1095系统环境为window7 32位旗舰版 1、需要下载的 ... -
hadoop编程
2011-08-25 12:05 01)eclipse插件 hadoop0.21.0版本的ecl ... -
Oracle问题汇总
2011-08-24 15:01 01)ORA-12541:无监听程序 查看服务状态,右键我的电 ... -
SSH问题汇总
2011-08-22 11:51 9721)如何配置主机A免密码登陆主机B 在主机A执行: # 此 ... -
Hadoop单节点测试
2011-08-19 11:06 15081、安装JDK从官方网站下 ... -
Xen实践问题记录
2011-08-14 16:19 729一)使用root用户执行xm info提示: xm Erro ... -
Fedora15_64安装flashplayer到Firefox
2011-08-14 15:38 1489从adobe官网下载软件包,url: http://labs ... -
Fedora15安装Xen
2011-08-14 10:47 1848Fedora15安装Xen可以参考如下资料: http:// ...
相关推荐
下载并解压"Pig-0.9.2.tar.gz"后,开发者可以在本地或Hadoop集群上安装和运行Pig。这通常包括配置环境变量,设置Hadoop路径,然后通过Pig命令行或者脚本执行Pig Latin脚本。 5. **Pig的应用场景**: - 数据清洗:...
如果需要,也可以使用`make`和`make install`来编译和安装Pig到系统路径。 4. **设置环境变量**:为了使Pig在命令行中可用,可能需要将它的bin目录添加到PATH环境变量中,例如,添加`export PATH=$PATH:/path/to/...
rpm安装: rpm -ivh curlftpfs-0.9.2-14.el7.x86_64.rpm 编译安装: tar xvzf curlftpfs-0.9.2.tar.gz cd curlftpfs-0.9.2 ./configure make make install
4. **编译和安装Tez**:对于某些特定需求,可能需要从源代码编译Tez。这涉及到下载源代码,配置Hadoop版本,然后运行`mvn clean install -DskipTests`来构建。但在这个案例中,我们使用的是预编译的二进制版本,所以...
2. **解压压缩包**:使用解压工具打开"fasttext-0.9.2-cp38-cp38-win_amd64.whl.zip",解压后你会得到"fasttext-0.9.2-cp38-cp38-win_amd64.whl"这个文件。 3. **确认Python环境**:确保你的Python环境是3.8版本,...
本文将围绕"fasttext-0.9.2-cp36-cp36m-win_amd64.whl.zip"这个压缩包,讲解如何在Python环境中离线安装Fasttext以及使用说明。 首先,让我们了解下这个压缩包的组成部分。"fasttext-0.9.2-cp36-cp36m-win_amd64....
fasttext-0.9.2-cp38-cp38-win_amd64
本文将围绕"fasttext-0.9.2-cp39-cp39-win_amd64.whl.zip"这个压缩包文件,详细讲解FastText的基本概念、功能、安装以及在实际应用中的操作步骤。 一、FastText简介 FastText是基于词嵌入的模型,它不仅仅可以学习...
4. 在终端中,输入`pip install fasttext-0.9.2-cp37-cp37m-win_amd64.whl`,这个命令会指示pip安装该文件中的Fasttext库。 5. 如果一切顺利,pip将会安装Fasttext并将其添加到你的Python环境中。 Fasttext的基本...
3. 在终端中,运行`pip install fasttext-0.9.2-cp311-cp311-win_amd64.whl`命令,这里的`fasttext-0.9.2-cp311-cp311-win_amd64.whl`是你的轮子文件名,确保替换为实际的文件名。 4. 如果一切顺利,pip会成功安装...
fasttext-0.9.2-cp37-cp37m-win_amd64
本文将围绕“fasttext-0.9.2-cp310-cp310-win_amd64.whl.zip”这个压缩包,详细介绍如何离线安装Fasttext的Python模块,并探讨其主要功能和应用场景。 首先,我们要明确这个压缩包的组成部分。"fasttext-0.9.2-cp...
赠送原API文档:libthrift-0.9.2-javadoc.jar; 赠送Maven依赖信息文件:libthrift-0.9.2.pom; 包含翻译后的API文档:libthrift-0.9.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.thrift:libthrift...
c3p0-0.9.2-pre1虽然较旧,但其稳定性和灵活性使其在很多项目中依然发挥着重要作用。理解并熟练使用c3p0,可以提升数据库操作的效率,降低系统资源的消耗。不过,对于新项目,推荐使用更现代的连接池库,如HikariCP...
org.freeswitch.esl.client-0.9.2.jar org.freeswitch.esl.client-0.9.2.sources.jar org.freeswitch.esl.client-0.9.2.javadoc.jar
7. tez-tests-0.9.2.jar:测试库,用于验证Tez的功能和性能,确保其正确性和稳定性。 8. tez-ext-service-tests-0.9.2.jar:扩展服务测试库,可能包含针对特定环境或插件的测试用例。 综合以上信息,Tez-0.9.2.tar...
在给定的压缩包文件“fasttext-0.9.2-pp38-pypy38_pp73-win_amd64.whl.zip”中,我们可以找到Fasttext的一个离线安装版本,特别适合于没有网络或者网络环境不稳定的情况下进行安装。 Fasttext库是由Facebook AI ...
总的来说,c3p0-0.9.2-pre1.jar和mysql-connector-java-5.1.13-bin.jar的结合使用,为Java开发者提供了便捷、高效的数据库连接管理方案,确保了系统的稳定性和性能。在实际项目中,根据具体的业务需求和数据库负载...
这个库由M-Fusion公司开发,版本号为0.9.2-pre5,是C3P0的一个预发布版本。C3P0的主要目标是提供一个高效且功能丰富的JDBC连接管理方案,以帮助提升应用程序的性能和稳定性。 C3P0连接池的工作原理是通过预先创建并...