mapreduce如何在Hadoop上编写MapReduce程序
mapreduce 时间:2021-08-11 阅读:(
)
mapreduce是一个什么类型的并行计算系统?
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。
概念"Map(映射)"和"Reduce(规约)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。
他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(规约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
了解更多开源相关,去LUPA社区看看吧hive和mapreduce的区别,各自优势
Hive是基于HDFS的离线数据仓库,提供了SQL的支持,将SQL翻译成MapReduce执行。
而HBase是分布式K-V数据库,非常适合实时的大规模的K-V查询和修改需求。
更多关于Hive和HBase的介绍,请搜索"lxw的大数据田地".MapReduce和Hadoop的理解
mapreduce就是一个算法框架,无论你的问题是什么,可以通过将你的数据map映射到不同的节点,由各个节点分别reduce约化数据,最后和在一起作为下一个mapreduce的数据或最终结果。
hadoop是开源的运行mapreduce的平台,可以自动分布在多个计算机节点,并且将你放上去的数据通过你写的函数作出结果什么是Map/Reduce-Mapreduce-about云开发
什么是Map/Reduce,看下面的各种解释:
(1)MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一部是分布式计算框,就是mapreduce,缺一不可,也就是说,可以通过mapreduce很容易在hadoop平台上进行分布式的计算编程。
(2)Mapreduce是一种编程模型,是一种编程方法,抽象理论。
(3)下面是一个关于一个程序员是如何个妻子讲解什么是MapReduce?文章很长请耐心的看。
我问妻子:“你真的想要弄懂什么是MapReduce?” 她很坚定的回答说“是的”。
因此我问道:
我: 你是如何准备洋葱辣椒酱的?(以下并非准确食谱,请勿在家尝试)
妻子: 我会取一个洋葱,把它切碎,然后拌入盐和水,最后放进混合研磨机里研磨。
这样就能得到洋葱辣椒酱了。
妻子: 但这和MapReduce有什么关系?
我: 你等一下。
让我来编一个完整的情节,这样你肯定可以在15分钟内弄懂MapReduce.
妻子: 好吧。
我:现在,假设你想用薄荷、洋葱、番茄、辣椒、大蒜弄一瓶混合辣椒酱。
你会怎么做呢?
妻子: 我会取薄荷叶一撮,洋葱一个,番茄一个,辣椒一根,大蒜一根,切碎后加入适量的盐和水,再放入混合研磨机里研磨,这样你就可以得到一瓶混合辣椒酱了。
我: 没错,让我们把MapReduce的概念应用到食谱上。
Map和Reduce其实是两种操作,我来给你详细讲解下。
Map(映射): 把洋葱、番茄、辣椒和大蒜切碎,是各自作用在这些物体上的一个Map操作。
所以你给Map一个洋葱,Map就会把洋葱切碎。
同样的,你把辣椒,大蒜和番茄一一地拿给Map,你也会得到各种碎块。
所以,当你在切像洋葱这样的蔬菜时,你执行就是一个Map操作。
Map操作适用于每一种蔬菜,它会相应地生产出一种或多种碎块,在我们的例子中生产的是蔬菜块。
在Map操作中可能会出现有个洋葱坏掉了的情况,你只要把坏洋葱丢了就行了。
所以,如果出现坏洋葱了,Map操作就会过滤掉坏洋葱而不会生产出任何的坏洋葱块。
Reduce(化简):在这一阶段,你将各种蔬菜碎都放入研磨机里进行研磨,你就可以得到一瓶辣椒酱了。
这意味要制成一瓶辣椒酱,你得研磨所有的原料。
因此,研磨机通常将map操作的蔬菜碎聚集在了一起。
妻子: 所以,这就是MapReduce?
我: 你可以说是,也可以说不是。
其实这只是MapReduce的一部分,MapReduce的强大在于分布式计算。
妻子: 分布式计算? 那是什么?请给我解释下吧。
我: 没问题。
我: 假设你参加了一个辣椒酱比赛并且你的食谱赢得了最佳辣椒酱奖。
得奖之后,辣椒酱食谱大受欢迎,于是你想要开始出售自制品牌的辣椒酱。
假设你每天需要生产10000瓶辣椒酱,你会怎么办呢?
妻子: 我会找一个能为我大量提供原料的供应商。
我:是的..就是那样的。
那你能否独自完成制作呢?也就是说,独自将原料都切碎? 仅仅一部研磨机又是否能满足需要?而且现在,我们还需要供应不同种类的辣椒酱,像洋葱辣椒酱、青椒辣椒酱、番茄辣椒酱等等。
妻子: 当然不能了,我会雇佣更多的工人来切蔬菜。
我还需要更多的研磨机,这样我就可以更快地生产辣椒酱了。
我:没错,所以现在你就不得不分配工作了,你将需要几个人一起切蔬菜。
每个人都要处理满满一袋的蔬菜,而每一个人都相当于在执行一个简单的Map操作。
每一个人都将不断的从袋子里拿出蔬菜来,并且每次只对一种蔬菜进行处理,也就是将它们切碎,直到袋子空了为止。
这样,当所有的工人都切完以后,工作台(每个人工作的地方)上就有了洋葱块、番茄块、和蒜蓉等等。
妻子:但是我怎么会制造出不同种类的番茄酱呢?
我:现在你会看到MapReduce遗漏的阶段—搅拌阶段。
MapReduce将所有输出的蔬菜碎都搅拌在了一起,这些蔬菜碎都是在以key为基础的 map操作下产生的。
搅拌将自动完成,你可以假设key是一种原料的名字,就像洋葱一样。
所以全部的洋葱keys都会搅拌在一起,并转移到研磨洋葱的研磨器里。
这样,你就能得到洋葱辣椒酱了。
同样地,所有的番茄也会被转移到标记着番茄的研磨器里,并制造出番茄辣椒酱。
(4)上面都是从理论上来说明什么是MapReduce,那么咱们在MapReduce产生的过程和代码的角度来理解这个问题。
如果想统计下过去10年计算机论文出现最多的几个单词,看看大家都在研究些什么,那收集好论文后,该怎么办呢?
方法一:
我可以写一个小程序,把所有论文按顺序遍历一遍,统计每一个遇到的单词的出现次数,最后就可以知道哪几个单词最热门了。
这种方法在数据集比较小时,是非常有效的,而且实现最简单,用来解决这个问题很合适。
方法二:
写一个多线程程序,并发遍历论文。
这个问题理论上是可以高度并发的,因为统计一个文件时不会影响统计另一个文件。
当我们的机器是多核或者多处理器,方法二肯定比方法一高效。
但是写一个多线程程序要比方法一困难多了,我们必须自己同步共享数据,比如要防止两个线程重复统计文件。
方法三:
把作业交给多个计算机去完成。
我们可以使用方法一的程序,部署到N台机器上去,然后把论文集分成N份,一台机器跑一个作业。
这个方法跑得足够快,但是部署起来很麻烦,我们要人工把程序copy到别的机器,要人工把论文集分开,最痛苦的是还要把N个运行结果进行整合(当然我们也可以再写一个程序)。
方法四:
让MapReduce来帮帮我们吧!
MapReduce本质上就是方法三,但是如何拆分文件集,如何copy程序,如何整合结果这些都是框架定义好的。
我们只要定义好这个任务(用户程序),其它都交给MapReduce。
map函数和reduce函数
map函数和reduce函数是交给用户实现的,这两个函数定义了任务本身。
map函数:接受一个键值对(key-value pair),产生一组中间键值对。
MapReduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。
reduce函数:接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。
统计词频的MapReduce函数的核心代码非常简短,主要就是实现这两个函数。
map(String key, String value):
// key: document name
// value: document contents
for each word w in value:
EmitIntermediate(w, "1");
reduce(String key, Iterator values):
// key: a word
// values: a list of counts
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
在统计词频的例子里,map函数接受的键是文件名,值是文件的内容,map逐个遍历单词,每遇到一个单词w,就产生一个中间键值对<w, "1">,这表示单词w咱又找到了一个;MapReduce将键相同(都是单词w)的键值对传给reduce函数,这样reduce函数接受的键就是单词w,值是一串"1"(最基本的实现是这样,但可以优化),个数等于键为w的键值对的个数,然后将这些“1”累加就得到单词w的出现次数。
最后这些单词的出现次数会被写到用户定义的位置,存储在底层的分布式存储系统(GFS或HDFS)。
转载能不能解释一下hadoop中的mapreduce
展开全部
MapReduce是一种数据处理思想,最早由Google的Jeff Dean等人发明,论文公开后,由Yahoo!的Doug Cutting实现了开源版本的MapReduce实现,发展为后来的Hadoop
Hadoop包含一个开源的MapReduce计算框架,和一个分布式文件系统:HDFS
MapReduce的精髓是并行处理、移动程序比移动数据更划算
你如果只是做一些简单的统计(如SQL中的count, group by, order by, avg, max, min等),Hive会更适合你,当你把500G都导入hive后,就可以直接在hive的命令行输入SQL(严格的讲,它不是SQL,但真的跟SQL很像很像)来执行你要的查询了
Hive和Pig都是基于Hadoop的数据分析工具,它们都依赖Hadoop,但Hadoop不一定用来做数据分析和统计,比如Google拿它来做Index Building如何在Hadoop上编写MapReduce程序
1. 概述
1970年,IBM的研究员E.F.Codd博士在刊物《Communication of the ACM》上发表了一篇名为“A Relational Model of Data for Large Shared Data Banks”的论文,提出了关系模型的概念,标志着关系数据库的诞生,随后几十年,关系数据库及其结构化查询语言SQL成为程序员必须掌握的基本技能之一。
2005年4月,Jeffrey Dean和Sanjay Ghemawat在国际会议OSDI上发表“MapReduce: Simplified Data Processing on Large Cluster”,标志着google的大规模数据处理系统MapReduce公开。
受这篇论文的启发,当年秋天,Hadoop 由 Apache Software Foundation 公司作为 Lucene 的子项目 Nutch 的一部分正式被引入,2006 年 3 月份,MapReduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。
如今,Hadoop已经被超过50%的互联网公司使用,其他很多公司正准备使用Hadoop来处理海量数据,随着Hadoop越来越受欢迎,也许在将来的某段时间,Hadoop会成为程序员必须掌握的技能之一,如果真是这样的话,学会如何在Hadoop上编写MapReduce程序便是学习Hadoop的开始。
本文介绍了在Hadoop上编写MapReduce程序的基本方法,包括MapReduce程序的构成,不同语言开发MapReduce的方法等。
2. Hadoop 作业构成
2.1 Hadoop作业执行流程
用户配置并将一个Hadoop作业提到Hadoop框架中,Hadoop框架会把这个作业分解成一系列map tasks 和reduce tasks。
Hadoop框架负责task分发和执行,结果收集和作业进度监控。
在编写MapReduce程序时,用户分别通过InputFormat和OutputFormat指定输入和输出格式,并定义Mapper和Reducer指定map阶段和reduce阶段的要做的工作。
在Mapper或者Reducer中,用户只需指定一对key/value的处理逻辑,Hadoop框架会自动顺序迭代解析所有key/value,并将每对key/value交给Mapper或者Reducer处理。
表面上看来,Hadoop限定数据格式必须为key/value形式,过于简单,很难解决复杂问题,实际上,可以通过组合的方法使key或者value(比如在key或者value中保存多个字段,每个字段用分隔符分开,或者value是个序列化后的对象,在Mapper中使用时,将其反序列化等)保存多重信息,以解决输入格式较复杂的应用。
2.2 用户的工作
用户编写MapReduce需要实现的类或者方法有:
(1) InputFormat接口
用户需要实现该接口以指定输入文件的内容格式。
该接口有两个方法
1
2
3
4
5
6
7
8
9
10
11
public interface InputFormat {
InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;
RecordReader getRecordReader(InputSplit split,
JobConf job,
Reporter reporter) throws IOException;
}
其中getSplits函数将所有输入数据分成numSplits个split,每个split交给一个map task处理。
getRecordReader函数提供一个用户解析split的迭代器对象,它将split中的每个record解析成key/value对。
(2)Mapper接口
用户需继承Mapper接口实现自己的Mapper,Mapper中必须实现的函数是
1
2
3
4
5
6
7
8
9
void map(K1 key,
V1 value,
OutputCollector output,
Reporter reporter
) throws IOException
其中,是通过Inputformat中的RecordReader对象解析处理 的,OutputCollector获取map()的输出结果,Reporter保存了当前task处理进度。
(3)Partitioner接口
用户需继承该接口实现自己的Partitioner以指定map task产生的key/value对交给哪个reduce task处理,好的Partitioner能让每个reduce task处理的数据相近,从而达到负载均衡。
Partitioner中需实现的函数是
getPartition( K2 key, V2 value, int numPartitions)
该函数返回对应的reduce task ID。
用户如果不提供Partitioner,Hadoop会使用默认的(实际上是个hash函数)。
(4)Combiner
Combiner使得map task与reduce task之间的数据传输量大大减小,可明显提高性能。
大多数情况下,Combiner与Reducer相同。
(5)Reducer接口
用户需继承Reducer接口实现自己的Reducer,Reducer中必须实现的函数是
void reduce(K2 key,
Iterator values,
OutputCollector output,
Reporter reporter
) throws IOException
Moack怎么样?Moack(蘑菇主机)是一家成立于2016年的商家,据说是国人和韩国合资开办的主机商家,目前主要销售独立服务器,机房位于韩国MOACK机房,网络接入了kt/lg/kinx三条线路,目前到中国大陆的速度非常好,国内Ping值平均在45MS左右,而且商家的套餐比较便宜,针对国人有很多活动。不过目前如果购买机器如需现场处理,由于COVID-19越来越严重,MOACK办公楼里的人也被感染...
对于如今的云服务商的竞争着实很激烈,我们可以看到国内国外服务商的各种内卷,使得我们很多个人服务商压力还是比较大的。我们看到这几年的服务商变动还是比较大的,很多新服务商坚持不超过三个月,有的是多个品牌同步进行然后分别的跑路赚一波走人。对于我们用户来说,便宜的服务商固然可以试试,但是如果是不确定的,建议月付或者主力业务尽量的还是注意备份。HostYun 最近几个月还是比较活跃的,在前面也有多次介绍到商...
国外主机测评昨天接到Hostigger(现Hostiger)商家邮件推送,称其又推出了一款特价大内存VPS,机房位于土耳其的亚欧交界城市伊斯坦布尔,核50G SSD硬盘200Mbps带宽不限月流量只要$59/年。 最近一次分享的促销信息还是5月底,当时商家推出的是同机房同配置的大内存VPS,价格是$59.99/年,不过内存只有10G,虽然同样是大内存,但想必这次商家给出16G,价格却是$59/年,...
mapreduce为你推荐
formation什么是word formation百度云论坛请问论坛有网盘么?安全防护安全防护措施逗号运算符逗号运算符详解rbooracle中rbo和cbo的区别密码设置怎么设置开机密码?横幅广告如何在应用中添加Admob横幅广告qsv视频格式转换器手机qsv怎么转换成mp4格式转换器充值卡充值移动如何用充值卡充话费tplink端口映射TPLINK路由器怎么设置端口映射
希网动态域名 blackfriday vpsio 博客主机 海外服务器 优惠码 紫田 谷歌香港 godaddy域名转出 xen 建站代码 本网站在美国维护 91vps 中国电信测网速 cdn加速原理 免费申请个人网站 太原网通测速平台 腾讯总部在哪 架设邮件服务器 ebay注册 更多