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

Vultr新注册赠送100美元活动截止月底 需要可免费享30天福利

昨天晚上有收到VULTR服务商的邮件,如果我们有清楚的朋友应该知道VULTR对于新注册用户已经这两年的促销活动是有赠送100美元最高余额,不过这个余额有效期是30天,如果我们到期未使用完的话也会失效的。但是对于我们一般用户来说,这个活动还是不错的,只需要注册新账户充值10美金激活账户就可以。而且我们自己充值的余额还是可以继续使用且无有效期的。如果我们有需要申请的话可以参考"2021年最新可用Vul...

raksmart:年中大促,美国物理机$30/月甩卖;爆款VPS仅月付$1.99;洛杉矶/日本/中国香港多IP站群$177/月

RAKsmart怎么样?RAKsmart发布了2021年中促销,促销时间,7月1日~7月31日!,具体促销优惠整理如下:1)美国西海岸的圣何塞、洛杉矶独立物理服务器低至$30/月(续费不涨价)!2)中国香港大带宽物理机,新品热卖!!!,$269.23 美元/月,3)站群服务器、香港站群、日本站群、美国站群,低至177美元/月,4)美国圣何塞,洛杉矶10G口服务器,不限流量,惊爆价:$999.00,...

digital-vm$80/月,最高10GDigital-VM1Gbps带宽带宽

digital-vm在日本东京机房当前提供1Gbps带宽、2Gbps带宽、10Gbps带宽接入的独立服务器,每个月自带10T免费流量,一个独立IPv4。支持额外购买流量:20T-$30/月、50T-$150/月、100T-$270美元/月;也支持额外购买IPv4,/29-$5/月、/28-$13/月。独立从下单开始一般24小时内可以上架。官方网站:https://digital-vm.com/de...

mapreduce为你推荐
在线编辑电脑qq在线编辑文档怎么弄lazyloadphpwind中门户模式怎么使用lazyload图片加载?超市管理系统精诚超市管理系统(普及版)——要怎么使用?trapezoid人体各个骨头的英文单词安全防护一般防护安全用具有几种初始化磁盘win7系统如何磁盘初始化?app退款app退款怎样才算恶意退款?rs485协议RS232/RS485串行通信协议的解释赵锡成著名的美籍华人有哪些传奇私服教程传奇私服怎么开服教程
免费二级域名注册 免费申请网页 oneasiahost pccw 流媒体服务器 好看的留言 牛人与腾讯客服对话 godaddy域名证书 韩国名字大全 cdn加速原理 美国堪萨斯 万网空间购买 Updog ca187 东莞idc php服务器 阵亡将士纪念日 七牛云存储 九零网络 建站技术 更多