Hadoop从入门到精通6:Hadoop原理之MapReduce编程模型

前面我们介绍了Hadoop的分布式文件系统HDFS,解决的是大数据的存储问题。那么,对于HDFS上的存储的海量数据,应该怎么计算呢?这就要用到了Google在PageRank(页面排名)问题中使用的MapReduce编程模型。本节就来详细讨论一下MapReduce编程模型的基本原理。

1.PageRank的基本原理

在我们使用搜索引擎检索某个内容时,往往会得到很多匹配的网页结果。这些网页该以何种顺序呈现给用户,这就要考虑PageRank问题了(当然这里我们不考虑竞价因素)。假设有四个网页,它们之间的关系如下图所示。箭头表示前一个网页指向后一个网页。

image

上图的左边表示四个网页之间的指向关系。右边是这个四个网页之间的状态转移矩阵,简言之,横轴的网页如果指向了纵轴的网页,交叉位置就是1,否则是0。最后一行的Rank表示每个网页的得分,即每一列的和。得分越高的网页,排名越靠前,优先展示给用户。这就是PageRank的基本原理。

上图只列出了四个网页的排名,4乘4的状态转移矩阵当然一台计算就能轻松搞定。但是Google每天从全世界爬取回来的网页数量在十亿甚至百亿数量级,此时的状态转移矩阵就不是一台或者几台计算机能处理了的。这就要用到MapReduce编程模型来处理。如上图将一个大的矩阵分成四个小的矩阵,分给不同的计算机来处理,然后将结果汇总。这种分而治之的思想就是MapReduce。

2.MapReduce编程模型

MapReduce是一种分治思想,即将一个大任务分割乘若干个小任务,然后逐一解决这些小任务,最后将所有小任务的结果合并起来,即得到原来大任务的结果。我们通过下图的例子来说明这个过程。

image

假设我们现在有一个求和的任务,计算1到10的和。Map阶段先将任务分割,最好按照负载均衡的原则来划分,这样不至于发生数据倾斜(就是很多个数据量小的任务很快就结束了,然后大家一起等一个数据量特别大的任务在执行)。这里平均分割成3个小任务,然后交给3个Map进程来求和。最后将3个Map计算的结果输入给Reduce进程进行汇总,即可得到最终的结果。这就是MapReduce编程模型的基本思想。

MapReduce编程模型需要注意以下几个方面的问题:

(1)Map的输入源可以是本地磁盘,HDFS,Hive,HBase等;Map的输出是Reduce的输入;Reduce的输出源可以是本地磁盘,HDFS,Hive,HBase等。

(2)Map和Reduce的输入和输出都是<key, value>的形式:<k1, v1>代表Map的输入;<k2, v2>代表Map的输出;<k3, v3>代表Reduce的输入;<k4, v4>代表Reduce的输出。

(3)k2 = k3, v3 = [v2]:由于相同的key都由同一个Reduce进程处理,这就导致了来自不同Map进程的相同的key的value汇聚成一个向量[v2]作为v3。

(4)所有的数据类型必须是Hadoop自己的数据类型:如字符串Text;整型IntWritable;长整型LongWritable;双精度浮点型DoubleWritable;空类型NullWritable等等。

(5)Java序列化后的类对象可以作为输入和输出的对象;类似的,Hadoop序列化后的类对象可以作为Map和Reduce的输入和输出。

(6)MapReduce编程模型至少应该有三个Java class:job.class = map.class + reduce.class

3.演示wordcount例子

(1)在HDFS上创建输入目录/input:

[root@bigdata112 ~]# hdfs dfs -mkdir /input

(2)将本地数据文件data.txt上传至该目录:

[root@bigdata112 ~]# hdfs dfs -put /root/input/data.txt /input

[root@bigdata112 ~]# hdfs dfs -ls /input
Found 1 items
-rw-r--r-- 1 root supergroup 60 2018-04-09 22:39 /input/data.txt

[root@bigdata112 ~]# hdfs dfs -cat /input/data.txt
I love Beijing
I love China
Beijing is the capital of China

(3)进入到Hadoop的示例程序目录:

[root@bigdata112 ~]# cd trainings/hadoop-2.4.1/share/hadoop/mapreduce/
[root@bigdata112 mapreduce]# pwd
/root/trainings/hadoop-2.4.1/share/hadoop/mapreduce

(4)执行示例程序中的Wordcount程序,以HDFS上的/input/data.txt作为输入数据,输出结果存放到HDFS上的/out/wc目录下:

[root@bigdata112 mapreduce]# hadoop jar hadoop-mapreduce-examples-2.4.1.jar \
wordcount /input/data.txt /output/wc

(5)查看进度和结果:

可以通过终端打印出来的日志信息知道执行进度:

18/04/09 22:47:44 INFO mapreduce.Job: map 0% reduce 0%
18/04/09 22:48:21 INFO mapreduce.Job: map 100% reduce 0%
18/04/09 22:48:39 INFO mapreduce.Job: map 100% reduce 100%

执行结束后可以在HDFS上的/out/wc目录下查看是否有_SUCCESS标志文件来判断是否执行成功。

[root@bigdata112 mapreduce]# hdfs dfs -ls /output/wc
Found 2 items
-rw-r--r-- 1 root supergroup 0 2018-04-09 22:48 /output/wc/_SUCCESS
-rw-r--r-- 1 root supergroup 55 2018-04-09 22:48 /output/wc/part-r-00000

如果执行成功,可以在part-r-00000文件中查看到wordcount程序的结果。

[root@bigdata112 mapreduce]# hdfs dfs -cat /output/wc/part-r-00000
Beijing 2
China 2
I 2
capital 1
is 1
love 2
of 1
the 1

至此,我们简单讨论了Hadoop的MapReduce编程模型的原理,以后我们会演示MapReduce程序的详细开发过程。祝你玩的愉快!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容