使用 Apache Pig 处理数据7

Mapreduce 模式中的 Pig

对于 MapReduce 模式,必须首先确保 Hadoop 正在运行。要做到这一点,最简单的方法是在 Hadoop 文件系统树的根上执行文件列表操作,如 清单 3 所示。

清单 3. 测试 Hadoop 可用性
$ hadoop dfs -ls /
Found 3 items
drwxrwxrwx   - hue    supergroup          0 2011-12-08 05:20 /tmp
drwxr-xr-x   - hue    supergroup          0 2011-12-08 05:20 /user
drwxr-xr-x   - mapred supergroup          0 2011-12-08 05:20 /var
$

启动 Pig 开始,然后将目录更改为您的 HDFS 根,以确定在 HDFS 中是否可以看到外部所看到的结果(参见 清单 4)。

清单 4. 测试 Pig
$ pig
2011-12-10 06:39:44,276 [main] INFO  org.apache.pig.Main - Logging error messages to...
2011-12-10 06:39:44,601 [main] INFO  org.apache.pig.... Connecting to hadoop file system at: hdfs://0.0.0.0:8020
2011-12-10 06:39:44,988 [main] INFO  org.apache.pig.... connecting to map-reduce job tracker at: 0.0.0.0:8021
grunt> cd hdfs:///
grunt> ls
hdfs://hadoop:9000/hbase        <dir>hdfs://hadoop:9000/input        <dir>hdfs://hadoop:9000/output       <dir>hdfs://hadoop:9000/tmp  <dir>hdfs://hadoop:9000/user <dir>hdfs://hadoop:9000/usr  <dir>
grunt>

到目前为止,一切都很好。您可以在 Pig 中看到您的 Hadoop 文件系统,所以,现在请尝试从您的本地主机文件系统将一些数据读取到 HDFS 中。可以通过 Pig 将某个文件从本地复制到 HDFS(参见 清单 5)。

清单 5. 获得一些测试数据
grunt> copyFromLocal /etc/passwd /input

要开始执行该操作,需要从 HDFS 将您的 passwd 文件载入一个 Pig 关系中。在使用 LOAD 运算符之前就要完成该操作,但在这种情况下,您可能希望将密码文件的字段解析为多个独立的字段。在本例中,我们指定了 PigStorage 函数,您可以使用它来显示文件的分隔符(本例中,是冒号 [:] 字符)。您也可以用 AS 关键字指定独立字段(或架构),包括它们的独立类型(参见 清单 6)。

清单 6. 将文件读入一个关系中
grunt> passwd = LOAD ‘/input/passwd‘ USING PigStorage(‘:‘) AS (user:chararray, \   注意这里写一句话,我使用\不行
passwd:chararray, uid:int, gid:int, userinfo:chararray, home:chararray, \使用这句:passwd = load ‘/input/passwd‘ using PigStorage(‘:‘)as (user:chararray,passwd:chararray,uid:int,gid:int,userinfo:chararray,home:chararray,shell:chararray);
shell:chararray);
grunt> DUMP passwd;
(root,x,0,0,root,/root,/bin/bash)
(bin,x,1,1,bin,/bin,/sbin/nologin)
...
(cloudera,x,500,500,,/home/cloudera,/bin/bash)
grunt>

接下来,使用 GROUP 运算符根据元组的bash将元组分组到该关系中(参见 清单 7)。

清单 7. 将元组分组为其外壳的一个函数
grunt> grp_shell = GROUP passwd BY shell;
grunt> DUMP grp_shell;
(/bin/bash,{(cloudera,x,500,500,,/home/cloudera,/bin/bash),(root,x,0,0,...), ...})
(/bin/sync,{(sync,x,5,0,sync,/sbin,/bin/sync)})
(/sbin/shutdown,{(shutdown,x,6,0,shutdown,/sbin,/sbin/shutdown)})
grunt>

但是,您想要的是在 passwd 文件中指定的独特bash的计数。所以,需要使用 FOREACH 运算符来遍历分组中的每个元组,COUNT 出现的数量(参见 清单 8)。

清单 8. 利用每个外壳的计数对结果进行分组
grunt> counts = FOREACH grp_shell GENERATE group, COUNT(passwd);  注意在这里COUNT必须大写,小写报错
grunt> DUMP counts;
...
(/bin/bash,5)
(/bin/sync,1)
(/bin/false,1)
(/bin/halt,1)
(/bin/nologin,27)
(/bin/shutdown,1)
grunt>

备注:如果要将该代码作为一个脚本来执行,只需将脚本输入到某个文件中,然后使用 pig myscript.pig 来执行它。

诊断运算符

Pig 支持大量诊断运算符,您可以用它们来调试 Pig 脚本。正如您在之前的脚本示例中所看到的,DUMP 运算符是无价的,它不仅可以查看数据,还可以查看数据架构。您还可以使用 DESCRIBE 运算符来生成一个关系架构的详细格式(字段和类型)。

EXPLAIN 运算符更复杂一些,但也很有用。对于某个给定的关系,您可以使用 EXPLAIN 来查看如何将物理运算符分组为 Map 和 Reduce 任务(也就是说,如何推导出数据)。

表 2Pig Latin 中的诊断运算符及其描述提供了一个列表。

表 2. Pig Latin 诊断运算符
运算符 描述
DESCRIBE 返回关系的架构。
DUMP 将关系的内容转储到屏幕。
EXPLAIN 显示 MapReduce 执行计划。

回页首

用户定义的函数

虽然 Pig 在本文探讨的范围内是强大且有用的,但是通过用户定义的函数 (UDF) 可以使它变得更强大。Pig 脚本可以使用您为解析输入数据、格式化输出数据甚至运算符等定义的函数。UDF 是用 Java 语言编写的,允许 Pig 支持自定义处理。UDF 是将 Pig 扩展到您的特定应用程序领域的一种方式。您可以在 参考资料 中了解有关 UDF 开发的更多信息。

回页首

Pig 用户

正如您从这篇短文中可以看到的,Pig 是一个强大的工具,可以在 Hadoop 集群中查询数据。它是如此强大,Yahoo! 估计,其 Hadoop 工作负载中有 40% 至 60% 由 Pig Latin 脚本产生。在 Yahoo! 的 100,000 个 CPU 中,大约有 50% 的 CPU 仍在运行 Hadoop。

但 Yahoo! 并不是利用 Pig 的惟一组织。您在 Twitter 中也会发现 Pig(用于处理日志和挖掘微博数据);在 AOL 和 MapQuest 上也会发现它(用于分析和批量数据处理);而在 LinkedIn 上,Pig 用于发现您可能认识的人。据报道,Ebay 使用 Pig 来实现搜索优化,而 adyard 的推荐工具系统有大约一半都使用了 Pig

回页首

展望未来

没有一本书可以完全列举 Pig 背后处理大数据的强大功能。即使对于非开发人员而言,Pig 也可以使得执行 Hadoop 集群上的大数据处理变得很容易。Pig 最初是由 Yahoo! 于 2006 年开发,并且此后不久被迁移到 Apache Software Foundation,使得它在全球范围得到广泛应用。进行这种迁移是因为 Yahoo! 研究人员意识到 Pig 能为非开发人员提供强大的功能。Hadoop 作为一个基础架构已经逐渐开始普及,Hadoop 生态系统将会改变大数据的外观及其日益增长的使用情况。

参考: http://www.ibm.com/developerworks/cn/linux/l-apachepigdataquery/index.html

使用 Apache Pig 处理数据7,布布扣,bubuko.com

时间: 2024-11-03 22:10:45

使用 Apache Pig 处理数据7的相关文章

使用 Apache Pig 处理数据5

使用 Apache Pig 从大数据集中获得所需的信息 Apache Pig 是一个高级过程语言,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集.通过允许对分布式数据集进行类似 SQL 的查询,Pig 可以简化 Hadoop 的使用.本文将探索 Pig 背后的语言,并在一个简单的 Hadoop 集群中发现其用途. Hadoop 的普及和其生态系统的不断壮大并不令人感到意外.Hadoop 不断进步的一个特殊领域是 Hadoop 应用程序的编写.虽然编写 Map 和

使用 Apache Pig 处理数据6

Pig Latin 是一个相对简单的语言,它可以执行语句.一调语句 就是一个操作,它需要输入一些内容(比如代表一个元组集的包),并发出另一个包作为其输出.一个包 就是一个关系,与表类似,您可以在关系数据库中找到它(其中,元组代表行,并且每个元组都由字段组成). 用 Pig Latin 编写的脚本往往遵循以下特定格式,从文件系统读取数据,对数据执行一系列操作(以一种或多种方式转换它),然后,将由此产生的关系写回文件系统.您可以在 清单 1 中看到该模式的最简单形式(一个转换). Pig 拥有大量的

玩转大数据系列之Apache Pig如何与Apache Solr集成(二)

散仙,在上篇文章中介绍了,如何使用Apache Pig与Lucene集成,还不知道的道友们,可以先看下上篇,熟悉下具体的流程. 在与Lucene集成过程中,我们发现最终还要把生成的Lucene索引,拷贝至本地磁盘,才能提供检索服务,这样以来,比较繁琐,而且有以下几个缺点: (一)在生成索引以及最终能提供正常的服务之前,索引经过多次落地操作,这无疑会给磁盘和网络IO,带来巨大影响 (二)Lucene的Field的配置与其UDF函数的代码耦合性过强,而且提供的配置也比较简单,不太容易满足,灵活多变的

玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)

GMV(一定时间内的成交总额)是一个衡量电商网站营业收入的一项重要指标,例如淘宝,京东都有这样的衡量标准,感兴趣的朋友可以自己科普下这方面的概念知识. 当然散仙今天,并不是来解释概念的,而是记录下最近工作的一些东西,原来我们平台的GMV只有一个总的成交金额,并没有细分到各个系统的GMV的比重,比如搜索端,推荐端,移动端等等. 通过细粒度的分析各个系统所占的比重,对于指导各个系统完善和发展有一定的重要意义,这里不就深说了,下面先来看下散仙分析的搜索gmv的数据布局方式. (1)Hadoop集群上,

玩转大数据系列之Apache Pig高级技能之函数编程(六)

原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Apache Pig如何自定义UDF函数? Apache Pig5行代码怎么实现Hadoop的WordCount? Apache Pig入门学习文档(一) Apache Pig学习笔记(二) Apache Pig学习笔记之内置函数(三) 玩转大数据系列之Apache Pig如何与Apache Lucen

玩转大数据之Apache Pig如何与Apache Lucene集成

在文章开始之前,我们还是简单来回顾下Pig的的前尘往事: 1,Pig是什么? Pig最早是雅虎公司的一个基于Hadoop的并行处理架构,后来Yahoo将Pig捐献给Apache(一个开源软件的基金组织)的一个项目,由Apache来负责维护,Pig是一个基于 Hadoop的大规模数据分析平台,它提供的SQL-like语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算.Pig为复杂的海量数据并行计算提供了一个简 易的操作和编程接口,这一

玩转大数据系列之Apache Pig如何与MySQL集成(三)

上篇介绍了如何把Pig的结果存储到Solr中,那么可能就会有朋友问了,为什么不存到数据库呢? 不支持还是? 其实只要我们愿意,我们可以存储它的结果集到任何地方,只需要重写我们自己的StoreFunc类即可. 关于如何将Pig分析完的结果存储到数据库,在pig的piggy贡献组织里,已经有了对应的UDF了,piggybank是非apache官方提供的工具函数,里面的大部分的UDF都是,其他公司或着个人在后来使用时贡献的,这些工具类,虽然没有正式划入pig的源码包里,但是pig每次发行的时候,都会以

Apache Pig入门学习文档(一)

1,Pig的安装    (一)软件要求    (二)下载Pig      (三)编译Pig 2,运行Pig    (一)Pig的所有执行模式    (二)pig的交互式模式    (三)使用pig脚本执行模式 3,Pig  Latin语句的声明     (一)加载数据     (二)使用和处理数据    (三)存储中间数据 (四)存储最终数据 (五)调试Pig Latin语言 4,Pig的属性值管理 5,Pig一些注意事项 1,Pig的安装 (一)软件安装 必须配置: (1)hadoop 下载地

如何给Apache Pig自定义UDF函数?

近日由于工作所需,需要使用到Pig来分析线上的搜索日志数据,散仙本打算使用hive来分析的,但由于种种原因,没有用成,而Pig(pig0.12-cdh)散仙一直没有接触过,所以只能临阵磨枪了,花了两天时间,大致看完了pig官网的文档,在看文档期间,也是边实战边学习,这样以来,对pig的学习,会更加容易,当然本篇不是介绍如何快速学好一门框架或语言的文章,正如标题所示,散仙打算介绍下如何在Pig中,使用用户自定义的UDF函数,关于学习经验,散仙会在后面的文章里介绍. 一旦你学会了UDF的使用,就意味