`
qindongliang1922
  • 浏览: 2186233 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117593
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125970
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59955
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71334
社区版块
存档分类
最新评论

Apache Pig5行代码怎么实现Hadoop的WordCount?

    博客分类:
  • Pig
阅读更多


初学编程的人,都知道hello world的含义,当你第一次从控制台里打印出了hello world,就意味着,你已经开始步入了编程的大千世界,这和第一个吃螃蟹的人的意义有点类似,虽然这样比喻并不恰当。

如果说学会了使用hello world就代表着你踏入了单机编程的大门,那么学会在分布式环境下使用wordcount,则意味着你踏入了分布式编程的大门。试想一下,你的程序能够成百上千台机器的集群中运行,是不是一件很有纪念意义的事情呢?不管在Hadoop中,还是Spark中,初次学习这两个开源框架做的第一个例子无疑于wordcount了,只要我们的wordcount能够运行成功,那么我们就可以大胆的向后深入探究了。


扯多了,下面赶紧进入正题,看一下,如何使用5行代码来实现hadoop的wordcount,在Hadoop中如果使用Java写一个wordcount最少也得几十行代码,如果通过Hadoop Streaming的方式采用Python,PHP,或C++来写,差不多也得10行代码左右。如果是基于Spark的方式来操作HDFS,在采用Scala语言,来写wordcount,5行代码也能搞定,但是如果使用spark,基于Java的api来写,那么就臃肿了,没有几十行代码,也是搞不定的。


今天,散仙在这里既不采用spark的scala来写,也不采用hadoop streaming的python方式来写,看看如何使用我们的Pig脚本,来搞定这件事,测试数据如下:

i am hadoop
i am hadoop
i am lucene
i am hbase
i am hive
i am hive sql
i am pig

Pig的全部脚本如下:
--大数据交流群:376932160(广告勿入)
--load文本的txt数据,并把每行作为一个文本
a = load '$in' as (f1:chararray);
--将每行数据,按指定的分隔符(这里使用的是空格)进行分割,并转为扁平结构
b = foreach a generate flatten(TOKENIZE(f1, ' '));
--对单词分组
c = group b by $0;
--统计每个单词出现的次数
d = foreach c generate group ,COUNT($1);
--存储结果数据
stroe d into '$out'

处理结果如下:
(i,7)
(am,7)
(pig,1)
(sql,1)
(hive,2)
(hbase,1)
(hadoop,2)
(lucene,1)

是的,你没看错,就是5行代码,实现了数据的读取,分割,转换,分组,统计,存储等功能。非常简洁方便!

除了spark之外,没有比这更简洁的,但这仅仅只是一个作业而已,如果在需求里面,又加入了对结果排序,取topN,这时候在pig里面,还是非常简单,只需新加2行代码即可,但是在spark里面,可能就需要数行代码了。

我们看下,更改之后的pig代码,加入了排序,取topN的功能:

--load文本的txt数据,并把每行作为一个文本
a = load '$in' as (f1:chararray);
--将每行数据,按指定的分隔符(这里使用的是空格)进行分割,并转为扁平结构
b = foreach a generate flatten(TOKENIZE(f1, ' '));
--对单词分组
c = group b by $0;
--统计每个单词出现的次数
d = foreach c generate group ,COUNT($1);
-- 按统计次数降序
e = order d by $1 desc;
--取top2
f = limit e 2;
--存储结果数据
stroe f into '$out'

输出结果如下:
(i,7)
(am,7)


如果使用JAVA来编写这个MapReduce作业,后面的排序统计topn,必须得重新写一个job来执行,因为MapReduce干的事非常简单,一个job仅仅只处理一个功能,而在Pig中它会自动,帮我们分析语法树来构建多个依赖的MapReduce作业,而我们无须关心底层的代码实现,只需专注我们的业务即可。

除此之外,Pig还是一个非常灵活的批处理框架,通过自定义UDF模块,我们可以使用Pig来干很多事,看过散仙的上一篇文章的朋友们,应该就知道当初雅虎公司不仅仅使用Pig分析日志,搜索内容,PangeRank排名,而且还使用Pig来构建它们的web倒排索引等种种扩展功能,我们都可以通过Pig的UDF的方式来实现,它可以将我们的业务与MapReduce具体的实现解耦,而且复用性极强,我们写的任何一个工具类,都可以轻而易举的通过Pig稳定的运行在大规模的Hadoop集群之上。




扫码关注微信公众号:我是攻城师(woshigcs),如果有什么疑问,技术问题,职业问题等,欢迎在公众号上留言与我探讨!让我们做不一样的攻城师!谢谢大家! 




转载请注明原创地址,谢谢配合!http://qindongliang.iteye.com/
  • 大小: 113.6 KB
1
4
分享到:
评论

相关推荐

    Hadoop入门脚本WordCount

    Hadoop是Apache基金会的一个开源项目,基于Java实现,主要设计用于处理和存储大规模数据。其核心包括两个主要组件:HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供高容错性的分布式存储,MapReduce则...

    spring-data-hadoop官方文档

    在开发Hadoop应用时,了解如何将Spring框架与Hadoop及其生态系统组件相结合,不仅可以帮助开发者简化配置和代码编写,还能提高应用的维护性和可扩展性。Spring Data Hadoop官方文档中提供的知识和示例可以帮助开发者...

    hadoop-2.7.3.tar.gz 下载 hadoop tar 包下载

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在廉价硬件上处理大量数据,是大数据处理领域的重要工具。2.7.3是Hadoop的一个稳定版本,提供了可靠的分布式存储系统HDFS(Hadoop Distributed File ...

    大数据 hadoop-3.1.3 linux 安装包

    Hadoop由Apache软件基金会开发,它主要由两个核心组件构成:Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS是一个分布式文件系统,设计为跨多台计算机(节点)存储和处理大量数据,提供高容错性和高可用...

    hadoop-0.18.2 的安装包

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大规模集群中高效处理和存储海量数据。Hadoop-0.18.2是Hadoop早期的一个版本,尽管现在已经有更新的版本,但对于学习Hadoop的历史和理解其演进过程...

    Hadoop 官方文档(中文版)

    Hadoop 是一个开源的分布式计算框架,由Apache软件基金会维护,它允许在大规模集群中对大量数据进行并行处理。这个“Hadoop 官方文档(中文版)”提供了全面的指导,涵盖了从初学者到高级用户的各个层面。下面将详细...

    hadoop-2.7.2.zip

    此外,你还可以使用Hadoop的其他工具,如Hadoop fs shell命令,进行文件操作,或者使用Hive、Pig等高级数据处理工具与Hadoop集成,实现更复杂的数据分析任务。 总之,这个hadoop-2.7.2.zip压缩包提供了在CentOS上...

    hadoop-3.1.4.tar.gz

    Hadoop是Apache软件基金会开发的开源分布式计算框架,主要用于处理和存储大规模数据。Hadoop 3.1.4是其一个重要版本,它在Hadoop 3.x系列中提供了许多增强功能和性能优化,包括对大数据处理的效率提升、资源管理的...

    Hadoop快速入门介绍文档

    - **Pig**:一种高层次的数据流语言和执行框架,简化了Hadoop MapReduce任务的开发过程。 - **Spark**:虽然不是Hadoop的一部分,但经常与Hadoop一起使用,提供了一个更快的数据处理框架。 #### 五、版权说明 文档...

    hadoop-2.6.0-cdh5.7.0.tar.gz

    5. **其他CDH组件**:CDH通常还包括其他大数据处理工具,如HBase(NoSQL数据库)、Hive(数据仓库工具)、Pig(数据分析平台)、Oozie(工作流调度器)和Zookeeper(分布式协调服务)等。 在使用这个安装包时,首先...

    hadoop-2.8.5.tar.gz

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在集群服务器上高效处理大量数据。这个名为“hadoop-2.8.5.tar.gz”的压缩包包含了Hadoop的2.8.5版本,这是针对Linux操作系统的。在这个版本中,...

    linux版本hadoop-2.7.2.zip

    5. **测试Hadoop**:使用hadoop fs -ls命令检查HDFS是否正常工作,或者运行Hadoop自带的WordCount示例程序验证MapReduce功能。 6. **数据存取**:你可以使用Hadoop的命令行工具将数据上传到HDFS,如hadoop fs -put...

    hadoop-demo

    Hadoop是Apache基金会开发的一个开源项目,它提供了一种高效、可扩展的分布式计算框架。"hadoop-demo"这个压缩包文件很可能是为了帮助学习者理解并实践Hadoop的工作原理和应用场景。 Hadoop的核心由两个主要组件...

    《Hadoop实战》源码

    5. **Pig**:Pig是Hadoop上的数据流处理语言,提供了一种高级抽象来定义数据处理流程。源码可能包含Pig Latin脚本,演示如何使用Pig处理复杂的数据转换和分析任务。 6. **其他组件**:除了上述组件,源码可能还涉及...

    Hadoop进行分布式计算的入门资料

    Hadoop是Apache软件基金会开发的一个开源框架,专为大规模数据集处理而设计。它通过分布式存储和并行处理,使得企业能够高效地管理和分析海量数据。这篇入门资料将引导我们了解如何利用Hadoop进行分布式计算。 一、...

    hadoop-2.x的环境搭建

    2. 运行WordCount示例,体验Hadoop的MapReduce计算过程。 通过以上步骤,你已经成功地搭建起了一个完整的Hadoop 2.x环境,接下来可以进一步探索Hadoop在大数据处理中的强大能力,例如数据导入、查询、分析等。记住...

    hadoop 2.6.0 eclipse 需求包 依赖 jar

    通过这样的配置,开发者可以在Eclipse环境中实现无缝的Hadoop开发和调试。 总之,理解Hadoop 2.x版本的模块化架构以及各个核心库的作用,对于进行高效、可靠的Hadoop开发至关重要。这些依赖JAR是构建在Eclipse中的...

    hadoop-2.7.5.tar.gz

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大规模集群中高效处理和存储大量数据。这个“hadoop-2.7.5.tar.gz”文件是一个经过重新编译的Hadoop源码包,意味着它包含了源代码,开发者可能已经...

Global site tag (gtag.js) - Google Analytics