`
独自等待戈多
  • 浏览: 36143 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Pig-0.9.2安装和配置实验报告

阅读更多

(一)安装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的结构,所以是未知;定义了Bid列而没有指定数据类型,默认是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}

说明,因为f1f2的类型都不清楚,因此转换为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高效的处理这些bagbag内的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或者bagX作为relation时,其tuple有两个字段,第一个整数字段,第二个bag字段,这个bag是内bag

 

(四)本地模式:Pig的关系函数

1.准备试验数据文件

PigHome创建文档文件A,内容如下:

0,1,2

1,3,4

创建文档文件B,内容如下:

0,5,2

1,7,8

 

2.使用union函数

分别加载AB,然后使用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分割为de,其中d的第一列数据值为0e的第一列的数据为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函数

按照第三列连接ab

grunt> j = join a by $2, b by $2;

grunt> dump j;

(0,1,2,0,5,2)

 

(五)本地模式:自定义函数(UDF

pig能够支持两种类型的UDFevalload/store,其中load/store的自定义函数主要是用来加载和保存特定的数据格式;eval自定义函数主要用来进行常规的数据转换。

Pig安装文件夹下包含了一个evalUDF实例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

说明:copyFromLocalput是一个效果,且用法一致。

查看文件是否复制成功:

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定义的aliaseGrunt Shell也可访问在脚本内定义的aliase。脚本的所有命令在Shell执行记录中可见。

批处理模式执行myscript.pig脚本:

grunt> exec myscript.pig

(0)

(1)

说明:以exec命令执行脚本,不会在脚本与Grunt Shell之间存在交互(批处理模式)。脚本和Shell不能互相访问aliase。脚本命令在Shell的执行记录也不可见。

 

以上。

 

南邮福富实验室

wuxiaochao@live.com

分享到:
评论

相关推荐

    pig-0.9.2.tar.gz下载

    下载并解压"Pig-0.9.2.tar.gz"后,开发者可以在本地或Hadoop集群上安装和运行Pig。这通常包括配置环境变量,设置Hadoop路径,然后通过Pig命令行或者脚本执行Pig Latin脚本。 5. **Pig的应用场景**: - 数据清洗:...

    pig-0.9.2.tar.gz

    如果需要,也可以使用`make`和`make install`来编译和安装Pig到系统路径。 4. **设置环境变量**:为了使Pig在命令行中可用,可能需要将它的bin目录添加到PATH环境变量中,例如,添加`export PATH=$PATH:/path/to/...

    curlftpfs-0.9.2安装包

    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

    apache-tez-0.9.2-bin.tar.gz

    4. **编译和安装Tez**:对于某些特定需求,可能需要从源代码编译Tez。这涉及到下载源代码,配置Hadoop版本,然后运行`mvn clean install -DskipTests`来构建。但在这个案例中,我们使用的是预编译的二进制版本,所以...

    fasttext-0.9.2-cp38-cp38-win_amd64.whl.zip

    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

    本文将围绕"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-cp38-cp38-win_amd64

    fasttext-0.9.2-cp39-cp39-win_amd64.whl.zip

    本文将围绕"fasttext-0.9.2-cp39-cp39-win_amd64.whl.zip"这个压缩包文件,详细讲解FastText的基本概念、功能、安装以及在实际应用中的操作步骤。 一、FastText简介 FastText是基于词嵌入的模型,它不仅仅可以学习...

    fasttext-0.9.2-cp37-cp37m-win_amd64.whl.zip

    4. 在终端中,输入`pip install fasttext-0.9.2-cp37-cp37m-win_amd64.whl`,这个命令会指示pip安装该文件中的Fasttext库。 5. 如果一切顺利,pip将会安装Fasttext并将其添加到你的Python环境中。 Fasttext的基本...

    fasttext-0.9.2-cp311-cp311-win_amd64.whl.zip

    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-cp37-cp37m-win_amd64

    fasttext-0.9.2-cp310-cp310-win_amd64.whl.zip

    本文将围绕“fasttext-0.9.2-cp310-cp310-win_amd64.whl.zip”这个压缩包,详细介绍如何离线安装Fasttext的Python模块,并探讨其主要功能和应用场景。 首先,我们要明确这个压缩包的组成部分。"fasttext-0.9.2-cp...

    libthrift-0.9.2-API文档-中文版.zip

    赠送原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-0.9.2-pre1虽然较旧,但其稳定性和灵活性使其在很多项目中依然发挥着重要作用。理解并熟练使用c3p0,可以提升数据库操作的效率,降低系统资源的消耗。不过,对于新项目,推荐使用更现代的连接池库,如HikariCP...

    org.freeswitch.esl.client-0.9.2.jar&sources&doc

    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

    tez-0.9.2.tar.gz

    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-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

    总的来说,c3p0-0.9.2-pre1.jar和mysql-connector-java-5.1.13-bin.jar的结合使用,为Java开发者提供了便捷、高效的数据库连接管理方案,确保了系统的稳定性和性能。在实际项目中,根据具体的业务需求和数据库负载...

    c3p0-0.9.2-pre5.jar_highmj1_数据库、连接池_

    这个库由M-Fusion公司开发,版本号为0.9.2-pre5,是C3P0的一个预发布版本。C3P0的主要目标是提供一个高效且功能丰富的JDBC连接管理方案,以帮助提升应用程序的性能和稳定性。 C3P0连接池的工作原理是通过预先创建并...

Global site tag (gtag.js) - Google Analytics