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

美国Cera 2核4G 20元/45天 香港CN2 E5 20M物理机服务器 150元 日本CN2 E5 20M物理机服务器 150元 提速啦

提速啦 成立于2012年,作为互联网老兵我们一直为用户提供 稳定 高速 高质量的产品。成立至今一直深受用户的喜爱 荣获 “2021年赣州安全大赛第三名” “2020创新企业入围奖” 等殊荣。目前我司在美国拥有4.6万G总内存云服务器资源,香港拥有2.2万G总内存云服务器资源,阿里云香港机房拥有8000G总内存云服务器资源,国内多地区拥有1.6万G总内存云服务器资源,绝非1 2台宿主机的小商家可比。...

vpsdime:VPS内存/2核/VPS,4G内存/2核/50gSSD/2T流量/达拉斯机房达拉斯机房,新产品系列-Windows VPS

vpsdime上了新产品系列-Windows VPS,配置依旧很高但是价格依旧是走低端线路。或许vpsdime的母公司Nodisto IT想把核心产品集中到vpsdime上吧,当然这只是站长个人的猜测,毕竟winity.io也是专业卖Windows vps的,而且也是他们自己的品牌。vpsdime是一家新上来不久的奇葩VPS提供商,实际是和backupspy以及crowncloud等都是同一家公司...

Sparkedhost($8/月)美国迈阿密AMD Ryzen高性能VPS;免费100G高防

sparkedhost怎么样?sparkedhost主机。Sparkedhost于2017年7月注册在美国康涅狄格州,2018年收购了ClynexHost,2019年8月从Taltum Solutions SL收购了The Beast Hosting,同年10月从Reilly Bauer收购了OptNode Hosting。sparkedhost当前的业务主要为:为游戏“我的世界”提供服务器、虚拟...

mapreduce为你推荐
ripperJack The Ripper是谁,也就是说凶手是谁?安全防护一般防护安全用具有几种app退款苹果app能不能退款订单详情请问拼多多如何查看订单详情?怎么将购买的订单详情全部导出?战棋类推荐几个好玩的战棋类的游戏电视蚂蚁电视蚂蚁是不是不能用了?我在国外该怎样看奥运?qsv视频格式转换器有没有手机上用的(把qsv视频格式转换成mp4的转换器)数据管理制度网络管理制度.阶乘函数用函数求阶乘的C语言团购网源码最近看到团购挺火的,我也想做一个,请大家推荐个稳定的团购网站源码?
美国vps edgecast hostgator mediafire下载 韩国电信 谷歌香港 英文简历模板word http500内部服务器错误 铁通流量查询 777te 服务器维护方案 域名评估 天翼云盘 吉林铁通 新睿云 厦门电信 免费asp空间申请 iki lamp怎么读 空间服务器 更多