MapReduce实验(一)原理
官网
创新互联公司是一家集网站建设,黔江企业网站建设,黔江品牌网站建设,网站定制,黔江网站建设报价,网络营销,网络优化,黔江网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
http://hadoop.apache.org/
hadoop三大组件
HDFS:分布式存储系统
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html
MapReduce:分布式计算系统
http://hadoop.apache.org/docs/r2.8.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html
YARN: hadoop 的资源调度系统
http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YARN.html
回想起以前做过一个中铁轨道激光测量轨道平整的项目,一段50KM的数据库大小是400G,光是找空间复制出来就是头大,现在有了分布式的数据库和计算平台就可以非常方便的进行。
Mapper
映射器将输入键/值对映射到一组中间键/值对中。
- 映射是将输入记录转换为中间记录的单个任务。转换后的中间记录不需要与输入记录相同的类型。给定的输入对可以映射到零或多个输出对。
- Hadoop的MapReduce框架产生一个地图的任务由每个InputSplit工作InputFormat生成。
- 总的来说,制图的实现是通过工作传递到工作setmapperclass(类)的方法。框架调用图(writablecomparable,写,上下文)每个键/值对,任务在InputSplit对。然后应用程序可以覆盖清除(上下文)方法来执行任何必需的清理工作。
- 输出对不需要与输入对相同的类型。给定的输入对可以映射到零或多个输出对。输出对被调用的上下文所写(writablecomparable,可写)。
应用程序可以使用计数器报告其统计数据。
- 所有与给定输出键相关联的中间值随后由框架分组,并传递给减速器以确定最终输出。用户可以通过指定一个比较器通过工作控制分组。setgroupingcomparatorclass(类)。
- 对映射器输出进行排序,然后对每个减速器进行分区。分区的总数与任务的减少任务数相同。用户可以控制键(因此记录)通过实现一个自定义的分割器去哪。
- 用户可以选择指定一个合成器,通过工作。setcombinerclass(类),执行中间输出的地方聚集,这有助于减少从制图到减速器的数据量。
- 中间排序的输出总是存储在一个简单(键、键、值、值)格式中。应用程序可以控制的话,又如何,中间输出被压缩和compressioncodec可以通过配置。
Reducer
- 减速减少一组中间值份额较小的一组值的关键。
- 数量减少了工作组通过工作的用户。setnumreducetasks(int)。
- 总的来说,减速器的实现是通过岗位工作经工作。setreducerclass(类)方法,可以重写它初始化自己。框架调用减少(writablecomparable,个<写>,<上下文)为每个关键方法(值列表)>在分组的输入对。应用程序可以重写清理(上下文)执行任何所需的清理方法。
- 减速器有3个主要阶段:洗牌,排序和减少。
Shuffle洗牌
- 输入减速器的排序输出的映射。在这一阶段的框架带来的所有映射器输出相应的分区,通过HTTP。
Partitioner分区
- partitions空间分区是关键。
- 分区分配的关键的中间图的输出。“密钥或密钥的子集的冰derive)使用的分区,typically A市的哈希函数。的总数partitions冰茶一样的号码reduce任务的工作。这hence米,江森自控的reduce任务的中间密钥和hence记录)的冰后期两个还原。
- hashpartitioner是默认的分区。
Counter计数器
- 计数器是MapReduce应用程序报告其统计数据的工具。
- 映射器和减速器实现可以使用计数器报告统计数据。
- Hadoop的MapReduce的附带了一个普遍有用的映射器,减速器库,并计划。
其实MapReduce讲的就是分而治之的程序处理理念,把一个复杂的任务划分为若干个简单的任务分别来做。另外,就是程序的调度问题,哪些任务给哪些Mapper来处理是一个着重考虑的问题。MapReduce的根本原则是信息处理的本地化,哪台PC持有相应要处理的数据,哪台PC就负责处理该部分的数据,这样做的意义在于可以减少网络通讯负担。最后补上一副经典的图来做最后的补充,毕竟,图表往往比文字更有说服力。
如果那个400G的数据库还在,分成400个任务,每个任务进行1g左右数据处理,理论上速度是原来的400倍。
具体请参考google mapreduce
https://wenku.baidu.com/view/1aa777fd04a1b0717fd5dd4a.html
MapReduce如何工作
让我们用一个例子来理解这一点 –
假设有以下的输入数据到 MapReduce 程序,统计以下数据中的单词数量:
Welcome to Hadoop Class
Hadoop is good
Hadoop is bad
MapReduce 任务的最终输出是:
bad
1
Class
1
good
1
Hadoop
3
is
2
to
1
Welcome
1
这些数据经过以下几个阶段
输入拆分:
输入到MapReduce工作被划分成固定大小的块叫做 input splits ,输入折分是由单个映射消费输入块。
映射 - Mapping
这是在 map-reduce 程序执行的第一个阶段。在这个阶段中的每个分割的数据被传递给映射函数来产生输出值。在我们的例子中,映射阶段的任务是计算输入分割出现每个单词的数量(更多详细信息有关输入分割在下面给出)并编制以某一形式列表<单词,出现频率>
重排
这个阶段消耗映射阶段的输出。它的任务是合并映射阶段输出的相关记录。在我们的例子,同样的词汇以及它们各自出现频率。
Reducing
在这一阶段,从重排阶段输出值汇总。这个阶段结合来自重排阶段值,并返回一个输出值。总之,这一阶段汇总了完整的数据集。
在我们的例子中,这个阶段汇总来自重排阶段的值,计算每个单词出现次数的总和。
MapReduce如何组织工作?
Hadoop 划分工作为任务。有两种类型的任务:
- Map 任务 (分割及映射)
- Reduce 任务 (重排,还原)
如上所述
完整的执行流程(执行 Map 和 Reduce 任务)是由两种类型的实体的控制,称为
- Jobtracker : 就像一个主(负责提交的作业完全执行)
- 多任务跟踪器 : 充当角色就像从机,它们每个执行工作
对于每一项工作提交执行在系统中,有一个 JobTracker 驻留在 Namenode 和 Datanode 驻留多个 TaskTracker。
- 作业被分成多个任务,然后运行到集群中的多个数据节点。
- JobTracker的责任是协调活动调度任务来在不同的数据节点上运行。
- 单个任务的执行,然后由 TaskTracker 处理,它位于执行工作的一部分,在每个数据节点上。
- TaskTracker 的责任是发送进度报告到JobTracker。
- 此外,TaskTracker 周期性地发送“心跳”信号信息给 JobTracker 以便通知系统它的当前状态。
- 这样 JobTracker 就可以跟踪每项工作的总体进度。在任务失败的情况下,JobTracker 可以在不同的 TaskTracker 重新调度它。
名称栏目:MapReduce实验(一)原理
标题来源:http://scyanting.com/article/jcsgig.html