前言
mapreduce是google提出的一个软件架构,用于大规模数据集(大于1tb)的并行运算。概念“map(映射)”和“reduce(规约)”,和它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。mapreduce极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的reduce(规约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
关于mapreduce的应用开发
第一步:清楚问题是什么,确定解决问题的算法思路。
第二步:设计和实现mapreduce程序中的mapper接口,reducer接口。它们是mapreduce作业的核心。 (0.20.2以后的api使用mapper和reducer抽象类,这样便于扩展)
mapper mapper 将输入一个的key/value映射到0个或者多个中间格式的key/value形式。 用户需要实现map(writablecomparble,writalbe,outputcollector,reporter)方法完成输入到输出的处理。同时可以选择重写jobconfigurable.configure(jobconf)方法完成mapper的初始化工作;重写closeable.close( )方法执行mapper的清理工作。因为mapreducebase实现了jobconfigurable和closeable接口,因此程序只要继承mapreducebase就可以。 程序通过调用outputcollector.collect(writablecomparable,writable)
方法收集输出的键值对(mapper输出键值对不需要与输入键值对的类型一致),通reporter报告进度,更新counters表明自己正常运行。 至此mapper过程结束,下面进入sort&shuffle过程。
sort&shuffle
得到mapper输出的中间结果后,传递给reducer执行前会经历一个分组-》合并-》分配的过程。
1. 框架会按照key值,把所有中间结果的进行分成组。用户可以通过 jobconf.setoutputkeycomparatorclass(class)来指
定具体负
责分组的comparator。
2. 用户可以通过jobconf.setcombinerclass(class)指定一个combiner,它负责对 中间过程的输出进行本地的聚集,这会有助于降低从mapper到reducer数
据传输量。(如wordcount会把key值相同的次数累加)
3. 用户可以指定或者自定义实现partitioner来控制具体的key被分配到那个reducer。partitioner通常使用的是hash函数。hashpartitioner是默认的partitioner。partitioner分块的总数目和一个作业的reduce任务的数目是一样的。
sort&shuffle的过程至此结束,reducer过程开始。
reducer reducer会把mapper的输出作为输入,因此reducer的输入类型需要与mapper的输出类型一致,reducer任务会将输入的key/value归并为一个更小的结果集。用户需要实现 reduce(writablecomparable, iterator, outputcollector, reporter)方法来对输入的key/value进行处理,同mapper过程一样,用户可以选择重写jobconfigurable.configure(jobconf)方法完成mapper的初始化工作,重写closeable.close()
方法执行mapper的清理工作。 用户可以通过jobconf.setnumreducetasks(int)来设定一个作业中reduce任务的数 目。 reduce任务调用outputcollector.collect(writablecomparable, writable)将处理结果写入hdfs。任务通过reporter报告进度,至此mapreduce任务结束。
outputcollector
outputcollector是一个mapreduce框架提供的用于收集mapper或reducer输出数据的通用机制 (包括中间输出结果和作业的输出结果)。同时hadoop类库提供了丰富的outputformat以供选择,支持文本输出,二进制输出,序列化输出,数据库输出等等。
writable
hadoop中,节点之间的进程通信通过rpc(remote procedures call)来实现。rpc中将消息序列化为二进制流,此后,将二进制流反序列化为消息,是进程间通信的灵魂所在,因此可用的rpc具有,紧凑,快速,可扩展,互操作等特点。 hadoop实现了自己的序列化机制,相比于java自带的序列化java object serialization,hadoop的序列化更加紧凑,快速。同时hadoop封装了java中的基本类型,便于进程间的通信,用户也可以自定义writable类,只要实现writable接口即可。
jobconf
jobconf代表一个mapreduce作业的配置。框架会按照指定的配置信息去完成mapreduce任务,其中的配置信息比较多,有兴趣的可以去官网了解http://hadoop.apache.org/。通常,jobconf会指明mapper、combiner、partitioner、reducer、inputformat和outputformat的具体实现,一组输入文件,以及输出文件的目录。
第三步:设置作业调度。
mapreduce程序与很多编程有所不同,它是一种函数型编程,完全地展现了“分而治之”的哲学思想,是分布式系统下一种强有力的处理工具。
因而,用户编写mapreduce程序时,一方面要具备mapreduce程序思想;另一方面要符合mapreduce程序开发流程。同时,通过多写mapreduce程序,掌握并熟悉这种编程模型。
STM32WB5MMG用于第一个无线MCU的STM32模块
基于混合ARQ技术实现多机牵引无线同步控制系统的设计
IBM与人类进行实时现场辩论的人工智能系统思考和论证方式不同
寒武纪先后推出了用于终端场景的寒武纪1A寒武纪1M系列芯片
大仓:“互医”追逐风口与资本,盲目扩张终惹火上身的互联网+医疗公司
mapreduce的应用开发步骤
ios6什么时候可以更新_ios6新功能
详解zookeeper的session管理机制
输配电是干什么的 输配电及控制设备包括哪些
Silicon Labs将专注发展物联网智能、无线连接领域
什么是积分电容器 有何作用
十三届全国人大一次会议新闻召开:探讨人工智能技术研发
可关断晶闸管(GTO),可关断晶闸管(GTO)是什么意思
三星推出一款mini版智能音箱 对标苹果HomePod
电波人get! AR新游《新电波人类RPG》将上线
第93届中国电子展,鼎阳科技精彩亮相
K50电竞版决胜盘成功,1秒钟出卖额2.8亿
广州首家!小马智行获南沙无人商业化试点资格
康佳特致力于解决边缘服务器和客户端设计的加固挑战
中国计划增产存储器 三星优势将被削弱