初学编程的人,都知道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
分享到:
相关推荐
使用hadoop实现WordCount详细实验报告,配有环境变量配置截图以及实验运行及结果详细过程描述与截图
hadoop wordcount 实验,成功运行 maven项目(全部源代码)
hadoop wordcount 打包部署
hadoop wordcount2.0 包含省略标点,忽略大小写等内容
该代码为hadoop的经典wordcount代码,java实现。代码里有详细注解,适合于入学者。
Hadoop 用mapreduce实现Wordcount实例,绝对能用
Hadoop开发WordCount源码程序详细讲解,每一行都带注释说明。
代码是基于windows系统下搭建eclipse+hadoop2.8.3开发实例。使用eclipse直接导入代码使用的前提是,需要在本地配置要hadoop2.8.3,本代码亲测可用,能够详细地统计出dataNode下面的file3.txt文件中单词的个数。
包含配置hadoop过程中遇到的一些问题的解决办法和成功运行wordcount实例的步骤
通过hadoop 来进行感情分析,代码可以实现将几个GB大小的数据,来统计词的数量
用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用...
用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop...
windows平台上,使用Eclipse hadoop插件,开发基于hdfs文件的中文分词统计和排序功能,以唐诗三百首为例,找出其中使用频率最高的词语。
hadoop入门例子wordcount
关于Hadoop的WordCount实例代码,能够实现实现单词计数。
hadoop入门级的代码 Java编写 eclipse可运行 包含 hdfs的文件操作 rpc远程调用的简单示例 map-reduce的几个例子:wordcount 学生平均成绩 手机流量统计
大数据实验报告Hadoop编程实现wordcount单词统计程序附源码.doc
hadoop-wordcount测试程序,jar包,单词统计的不二之选
本下载源于网络搜索,仅用于方面下载,其用于hadoop在windows中wordcount的实现,仅用于交流,勿喷
一套eclipse中的hadoop开发环境搭建教程,附带了eclipse中的hadoop的两个demo,一个是wordcount、一个是sort,大家一起学习进步!