`
weitao1026
  • 浏览: 991598 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

初学编程的人,都知道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脚本,来搞定这件事,测试数据如下:

Java代码 复制代码 收藏代码
  1. i am hadoop  
  2. i am hadoop  
  3. i am lucene  
  4. i am hbase  
  5. i am hive  
  6. i am hive sql  
  7. i am pig  
i am hadoop
i am hadoop
i am lucene
i am hbase
i am hive
i am hive sql
i am pig


Pig的全部脚本如下:

Pig代码 复制代码 收藏代码
  1. --大数据交流群:376932160(广告勿入)  
  2. --load文本的txt数据,并把每行作为一个文本  
  3. a = load '$in' as (f1:chararray);  
  4. --将每行数据,按指定的分隔符(这里使用的是空格)进行分割,并转为扁平结构  
  5. b = foreach a generate flatten(TOKENIZE(f1, ' '));  
  6. --对单词分组  
  7. c = group b by $0;  
  8. --统计每个单词出现的次数  
  9. d = foreach c generate group ,COUNT($1);  
  10. --存储结果数据  
  11. stroe d into '$out'  
--大数据交流群: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'


处理结果如下:

Java代码 复制代码 收藏代码
  1. (i,7)  
  2. (am,7)  
  3. (pig,1)  
  4. (sql,1)  
  5. (hive,2)  
  6. (hbase,1)  
  7. (hadoop,2)  
  8. (lucene,1)  
(i,7)
(am,7)
(pig,1)
(sql,1)
(hive,2)
(hbase,1)
(hadoop,2)
(lucene,1)


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

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

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

Pig代码 复制代码 收藏代码
  1. --load文本的txt数据,并把每行作为一个文本  
  2. a = load '$in' as (f1:chararray);  
  3. --将每行数据,按指定的分隔符(这里使用的是空格)进行分割,并转为扁平结构  
  4. b = foreach a generate flatten(TOKENIZE(f1, ' '));  
  5. --对单词分组  
  6. c = group b by $0;  
  7. --统计每个单词出现的次数  
  8. d = foreach c generate group ,COUNT($1);  
  9. -- 按统计次数降序  
  10. e = order d by $1 desc;  
  11. --取top2  
  12. f = limit e 2;  
  13. --存储结果数据  
  14. stroe f into '$out'  
--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'


输出结果如下:

Java代码 复制代码 收藏代码
  1. (i,7)  
  2. (am,7)  
(i,7)
(am,7)



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

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

分享到:
评论

相关推荐

    写一个程序用来从终端读入一行文本,并把这行文本中的英文转换成Pig Latin,Pig Latin是按照如下简单规则转换每个英文单词的一种自发明语言。

    1) 如果单词以辅音开头,那么把起始辅音字符串(即直到第一个元音字母的所有字母)从单词开始移到尾部,并加上后缀ay。如“string”变换后为“ingstray”。 2) 如果单词以元音开头,则加后缀way。如“apple”变换...

    PIG串口助手 VB6.0 源码

    VB串口调试助手,我的第一个VB程序 1、自动搜素串口号 2、支持十六进制收发 3、支持接收TEXT自定义长度换行 4、同步显示输入字符串的ASC码

    pigDice:用Ember构建的Pig Dice模拟器应用程序

    此应用程序旨在通过 Epicodus 代码学校满足作业的要求。 有关 Epicodus 的更多信息,请 。 描述 模拟猪骰子的网络游戏 作业:星期四课业JavaScript 第 2 周 作者 弗兰克·约翰逊(Frank Johnson)和小川保罗(Paul ...

    pig_latin

    项目名称由Usarneme + Shane技术栈: ... 对于以一个或多个辅音开头的单词,将所有第一个连续的辅音移到末尾,并添加“ ay”。 如果第一个辅音包含“ qu”,请将“ u”与“ q”一起移动。 不要忘了诸如“尖叫”之类的词

    Hadoop实战中文版

    第一部分 Hadoop——一种分布式编程框架 第1章 Hadoop简介 1.1 为什么写《Hadoop 实战》 1.2 什么是Hadoop 1.3 了解分布式系统和Hadoop 1.4 比较SQL 数据库和Hadoop 1.5 理解MapReduce 1.5.1 动手扩展一个...

    pig-dice:javascriptjquery

    猪骰子 作者:Jennifer Bolanos ( ) ... 第一个获得 100 分或更多分的玩家获胜。 作者 詹妮弗·博拉诺斯 杰西卡·恩格尔 设置 这个应用程序是用 jquery-1.11.3.js 编写的。 克隆这个 repo > git clone https://git

    rat-pig-squid:一个squiddy项目,帮助学习基于石头剪刀布游戏HTML5应用程序

    鼠猪鱿鱼一个squiddy项目,帮助学习基于石头剪刀布游戏HTML5... 老鼠打败鱿鱼鱿鱼打败猪猪战胜老鼠(同样的规则剪刀,石头,布,其中动物的名字的第一个字母来源于:R为(R玉珠),P IG(纸张),S镑(S cissors))

    J2ME_PIG.rar_J2ME 网络游戏_j2me 网络

    第1章 安装说明 本系统源程序路径下包括两个文件夹,分别为“PigClient”和“PigServer”。在使用本程序前,需要将“PigServer”文件夹拷贝到Tomcat安装路径下的“webapps”文件夹中,将“PigClient”文件夹下的...

    Hadoop权威指南中文版第一版

    本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共14章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop的I...

    Hadoop实战(陆嘉恒)译

    致力于让Hadoop大数据分析更简单第一部分 Hadoop——一种分布式编程框架第1 章 Hadoop简介1.1 为什么写《Hadoop 实战》1.2 什么是Hadoop1.3 了解分布式系统和Hadoop1.4 比较SQL 数据库和Hadoop1.5 理解MapReduce...

    Pig Game-crx插件

    第一个达到获胜分数的人将获胜。 您可以通过单击“规则”按钮来检查游戏规则。信誉:原始设计:Jonas Schmedtmann Jonas在udemy中提供了一个很棒的javascript课程,它帮助我学习了很多有关javascript的知识! 课程...

    Pig-Game:基于html,css,javascript的Pig游戏

    猪游戏 使用语言 ... 引导程序 CSS Java脚本 操作说明 游戏中有2位玩家,每局比赛。 在每个回合中,玩家掷出两个骰子,就像他想要的一样。... 用户在GLOBAL分数上输入的第一个达到Winner分数的玩家将赢得比赛。

    PersonalWebsiteProject_Teamwork:React16node.jsmongoDB

    rocket:启动项目 launch:rocket:npm run dev:high_voltage:注意 note:high_voltage::milky_way:项目截图 snapshot:milky_way::open_book:第一版:open_book: version 1 :pig_face::open_book:第二版:open_book: ...

    Hadoop实战中文版.PDF

    目录编辑第一部分 Hadoop——一种分布式编程框架第1章 Hadoop简介 21.1 为什么写《Hadoop 实战》 31.2 什么是Hadoop 31.3 了解分布式系统和Hadoop 41.4 比较SQL数据库和Hadoop 51.5 理解MapReduce 61.5...

    Hadoop实战

    第一部分 Hadoop——一种分布式编程框架第1章 Hadoop简介 21.1 为什么写《Hadoop 实战》 31.2 什么是Hadoop 31.3 了解分布式系统和Hadoop 41.4 比较SQL数据库和Hadoop 51.5 理解MapReduce 61.5.1 动手扩展一个简单...

    pig-latin:写Pig拉丁语翻译器,还是应该说“ igPay atinLay anslatorTray”?

    该程序会将所有第一个辅音移到末尾并添加“ ay” 输入示例:“ push” 输出示例:“ ushpay” 该程序将在单词的开头出现时移至“ qu”并添加“ ay” 输入示例:“鹌鹑” 输出示例:“ ailquay” 该程序还将在...

    epicodus-pig_dice

    描述JavaScript 中的猪骰子游戏作业: JavaScript 第 2 周(周三)作者安德鲁·芬斯特罗姆和克里斯·塞夫金设置 pig_dice.html执照这是发布到公共领域的免费且不受阻碍的软件。 任何人都可以出于任何目的(商业或非...

    Hadoop权威指南(第2版)第1章

    本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共14章,3个附录,涉及的主题包括:Hadoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop的I/...

    pass_the_pigs

    获胜者是第一个达到预定总分的玩家。计分游戏规则: Pass-the-Pigs 应用程序遵循与传统游戏相同的计分原则。 也有描述:单猪猪侧躺着 - 0 分Razorback - 猪仰面躺着 - 5 分Trotter - 猪直立 - 5 分鼻子- 猪靠在它的...

    pig-latin:猪拉丁翻译

    拉丁猪 一个将单词和句子翻译成拉丁语的网站... 对于以单个辅音字母开头的单个单词,该程序将第一个字母移到末尾并添加“ ay”(无论大小写)。 输入示例:hAmMEr输出示例:AmMErhay 对于以多个辅音开头的单个单词,该

Global site tag (gtag.js) - Google Analytics