六点解读Hadoop版本、生态圈及MapReduce模型

  Hadoop版本和生态圈

  1. Hadoop版本

  (1) Apache Hadoop版本介绍

  Apache的开源项目开发流程:

  主干分支:新功能都是在主干分支(trunk)上开发。

  特性独有分支:很多新特性稳定性很差,或者不完善,在这些分支的独有特定很完善之后,该分支就会并入主干分支。

  候选分支:定期从主干分支剥离,一般候选分支发布,该分支就会停止更新新功能,如果候选分支有BUG修复,就会重新针对该候选分支发布一个新版本,候选分支就是发布的稳定版本。

  造成Hadoop版本混乱的原因:

  主要功能在分支版本开发:0.20分支发布之后,主要功能一直在该分支上进行开发,主干分支并没有合并这个分支,0.20分支成为了主流。

  低版本的后发布:0.22版本发布要晚于0.23版本。

  版本重命名:0.20分支的0.20.205版本重命名为1.0版本,这两个版本是一样的,只是名字改变了。

  Apache Hadoop版本示意图:

  (2) Apache Hadoop版本功能介绍

  第一代Hadoop特性:

  append:支持文件追加功能,让用户使用HBase的时候避免数据丢失,也是使用HBase的前提。

  raid:保证数据可靠,引入校验码校验数据块数目。

  symlink:支持HDFS文件链接。

  security:hadoop安全机制。

  namenode HA:为了避免namenode单点故障情况,HA集群有两台namenode。

  第二代Hadoop特性:

  HDFS Federation:NameNode制约HDFS扩展,该功能让多个NameNode分管不同目录,实现访问隔离和横向扩展。

  yarn:MapReduce扩展性和多框架方面支持不足,yarn是全新的资源管理框架,将JobTracker资源管理和作业控制功能分开,ResourceManager负责资源管理,ApplicationMaster负责作业控制。

  0.20版本分支:只有这个分支是稳定版本,其它分支都是不稳定版本。

  0.20.2版本(稳定版):包含所有特性,经典版。

  0.20.203版本(稳定版):包含append,不包含symlink raid namenodeHA功能。

  0.20.205版本/1.0版本(稳定版):包含append security,不包含symlink raid namenodeHA功能。

  1.0.1~1.0.4版本(稳定版):修复1.0.0的bug和进行一些性能上的改进。

  0.21版本分支(不稳定版):包含append raid symlink namenodeHA,不包含security。

  0.22版本分支(不稳定版):包含 append raid symlink那么弄得HA,不包含mapreduce security。

  0.23版本分支:

  0.23.0版本(不稳定版):第二代的hadoop,增加了HDFS Federation和yarn。

  0.23.1~0.23.5(不稳定版):修复0.23.0的一些BUG,以及进行一些优化。

  2.0.0-alpha~2.0.2-alpha(不稳定版):增加了namenodeHA 和 Wire-compatiblity功能。

  (3) Cloudera Hadoop对应Apache Hadoop版本

  2. Hadoop生态圈

  Apache支持:Hadoop的核心项目都受Apache支持的,除了Hadoop之外,还有下面几个项目,也是Hadoop不可或缺的一部分。

  HDFS:分布式文件系统,用于可靠的存储海量数据。

  MapReduce:分布式处理数据模型,可以运行于大型的商业云计算集群中。

  Pig:数据流语言和运行环境,用来检索海量数据集。

  HBase:分布式数据库,按列存储,HBase使用HDFS作为底层存储,同时支持MapReduce模型的海量计算和随机读取。

  Zookeeper:提供Hadoop集群的分布式的协调服务,用于构建分布式应用,避免应用执行失败带来的不确定性损失。

  Sqoop:该工具可以用于HBase 和 HDFS之间的数据传输,提高数据传输效率。

  Common:分布式文件系统,通用IO组件与接口,包括序列化、Java RPC和持久化数据结构。

  Avro:支持高效跨语言的RPC及永久存储数据的序列化系统。

  MapReduce模型简介

  MapReduce简介:MapReduce是一种数据处理编程模型。

  多语言支持:MapReduce可以使用各种语言编写,例如Java、Ruby、Python、C++。

  并行本质 :MapReduce 本质上可以并行运行的。

  1. MapReduce数据模型解析

  MapReduce数据模型:

  两个阶段:MapReduce的任务可以分为两个阶段,Map阶段和Reduce阶段。

  输入输出:每个阶段都使用键值对作为输入和输出,IO类型可以由程序员进行选择。

  两个函数:map函数和reduce函数。

  MapReduce作业组成:一个MapReduce工作单元,包括输入数据,MapReduce程序和配置信息。

  作业控制:作业控制由JobTracker(一个)和TaskTracker(多个)进行控制的。

  JobTracker作用:JobTracker控制TaskTracke上任务的运行,进行统一调度。

  TaskTracker作用:执行具体的MapReduce程序。

  统一调度方式:TaskTracker运行的同时将运行进度发送给JobTracker,JobTracker记录所有的TaskTracker。

  任务失败处理:如果一个TaskTracker任务失败,JobTracker会调度其它TaskTracker上重新执行该MapReduce作业。

  2. Map数据流

  输入分片:MapReduce程序执行的时候,输入的数据会被分成等长的数据块,这些数据块就是分片。

  分片对应任务:每个分片都对应着一个Map任务,即MapReduce中的map函数。

  并行处理:每个分片执行Map任务要比一次性处理所有数据时间要短。

  负载均衡:集群中的计算机有的性能好有的性能差,按照性能合理的分配分片大小,比平均分配效率要高,充分发挥出集群的效率。

  合理分片:分片越小负载均衡效率越高,但是管理分片和管理map任务总时间会增加,需要确定一个合理的分片大小,一般默认为64M,与块大小相同。

  数据本地优化:map任务运行在本地存储数据的节点上,才能获得最好的效率。

  分片=数据块:一个分片只在单个节点上存储,效率最佳。

  分片>数据块:分片大于数据块,那么一个分片的数据就存储在了多个节点上,map任务所需的数据需要从多个节点传输,会降低效率。

  Map任务输出:Map任务执行结束后,将计算结果写入到本地硬盘,不是写入到HDFS中。

  中间过渡:Map的结果只是用于中间过渡,这个中间结果要传给Reduce任务执行,reduce任务的结果才是最终结果,map中间值最后会被删除。

  map任务失败:如果map任务失败,会在另一个节点重新运行这个map任务,再次计算出中间结果。

  3. Reduce数据流

  Reduce任务:map任务的数量要远远多于Reduce任务。

  无本地化优势:Reduce的任务的输入是Map任务的输出,reduce任务的绝大多数数据本地是没有的。

  数据合并:map任务输出的结果,会通过网络传到reduce任务节点上,先进行数据的合并,然后在输入到reduce任务中进行处理。

  结果输出:reduce的输出直接输出到HDFS中。

  reduce数量:reduce数量是特别指定的,在配置文件中指定。

  MapReduce数据流框图解析:

  单个MapReduce的数据流:

  Map输出分区:多个reduce任务,每个reduce任务都对应着一些map任务,我们将这些map任务根据其输入reduce任务进行分区,为每个reduce建立一个分区。

  分区标识:map结果有许多种类键,相同的键对应的数据传给一个reduce,一个map可能会给多个reduce输出数据。

  分区函数:分区函数可以由用户定义,一般情况下使用系统默认的分区函数partitioner,该函数通过哈希函数进行分区。

  混洗:map任务和reduce任务之间的数据流成为混。

  reduce数据来源:每个reduce任务的输入数据来自多个map

  map数据去向:每个map任务的结果都输出到多个reduce中

  没有Reduce:当数据可以完全并行处理的时候,就可以不适用reduce,只进行map任务。

  4. Combiner 引入

  MapReduce瓶颈:带宽限制了MapReduce执行任务的数量,Map和Reduce执行过程中需要进行大量的数据传输。

  解决方案:合并函数Combiner,将多个Map任务输出的结果合并,将合并后的结果发送给Reduce作业。

  5. HadoopStreaming

  Hadoop多语言支持:Java、Python、Ruby、C++

  多语言:Hadoop允许使用其它语言写MapReduce函数。

  标准流:因为Hadoop可以使用UNIX标准流作为Hadoop和应用程序之间的接口,因此只要使用标准流,就可以进行MapReduce编程。

  Streaming处理文本:Streaming在文本处理模式下,有一个数据行视图,非常适合处理文本。

  Map函数的输入输出:标准流一行一行的将数据输入到Map函数,Map函数的计算结果写到标准输出流中。

  Map输出格式:输出的键值对是以制表符分隔的行,以这种形式写出的标准输出流中。

  Reduce函数的输入输出:输入数据是标准输入流中的通过制表符分隔的键值对行,该输入经过了Hadoop框架排序,计算结果输出到标准输出流中。

  6. Hadoop Pipes

  Pipes概念:Pipes是MapReduce的C++接口

  理解误区:Pipes不是使用标准输入输出流作为Map和Reduce之间的Streaming,也没有使用JNI编程。

  工作原理:Pipes使用套接字作为map和reduce函数进程之间的通信。

时间: 2025-01-01 15:11:30

六点解读Hadoop版本、生态圈及MapReduce模型的相关文章

Hadoop 版本 生态圈 MapReduce模型

(1) Apache Hadoop版本介绍 Apache的开源项目开发流程 : -- 主干分支 : 新功能都是在 主干分支(trunk)上开发; -- 特性独有分支 : 很多新特性稳定性很差, 或者不完善, 在这些分支的独有特定很完善之后, 该分支就会并入主干分支; -- 候选分支 : 定期从主干分支剥离, 一般候选分支发布, 该分支就会停止更新新功能, 如果候选分支有BUG修复, 就会重新针对该候选分支发布一个新版本;候选分支就是发布的稳定版本; 造成Hadoop版本混乱的原因 : -- 主要

《Hadoop MapReduce性能优化》一1.1 MapReduce模型

1.1 MapReduce模型 Hadoop MapReduce性能优化MapReduce编程模型的设计目标是,使用普通硬件的大型集群处理非结构化数据并产生大规模数据集.它能够在数千个计算节点的集群上处理TB级的数据,进行故障处理,完成任务复制并聚合最终结果. MapReduce模型简单易懂.它是由Google研究院的工程师在21世纪初设计的(http://research.google.com/archive/mapreduce.html).这一模型包含两个可以在多台机器上并行执行的函数:一个

基于嵌入式多处理器的轻量级MapReduce模型研究

基于嵌入式多处理器的轻量级MapReduce模型研究 随着近年来云计算的快速发展以及多核处理器核心数的快速增长,并行开发技术的应用也越来越普遍.各种并行开发技术如MPI.OpenMP等已经非常成熟的应用于各个领域,并且在Google的MapReduce编程模型的带动下出现了很多基于MapReduce模型的开发框架,如Phoenix.Metis.Hadoop等,但是Phoenix和Metis是基于共享内存架构实现的,不能用于分布式集群,而Hadoop集群部署在嵌入式环境下的执行效率不高.因此目前还

Hadoop 版本演进

Hadoop版本演进概况: 备注:NameNode HA : NameNode高可用 , HDFS Fedreation 分布式文件系统联盟 解决了1带的单点问题          Yarm 分布式资源管理系统,解决JobTrack单点问题          1. hadoop 1.x 版本的生态系统: 2. hadoop 2.x版本的生态系统: 对于分布式系统和框架的架构来说,一般分为两部分:第一部分:管理层(用于管理应用层)第二部分:应用层 (工作的) 对于HDFS,分布式文件系统:    

hadoop详解(九) mapreduce中的压缩

作为输入 当压缩文件做为mapreduce的输入时,mapreduce将自动通过扩展名找到相应的codec对其解压 . 作为输出 当mapreduce的输出文件需要压缩时,可以更改mapred.output.compress为true, mapped.output.compression.codec为想要使用的codec的类名就 可以了,当然你可以在代码中指定,通过 调用FileOutputFormat的静态方法去设置这两个属性,我们来看代码: package com.sweetop.styha

英特尔停止发行自家源代码大数据软件Hadoop版本

硅谷网讯 据国外http://www.aliyun.com/zixun/aggregation/31646.html">媒体报道,科技博客网站VentureBeat获悉,英特尔将宣布停止发行自家开放源代码大数据处理软件Hadoop版本,转而支持快速增长的大数据公司Cloudera的Hadoop版本. 知情人士向VentureBeat报料,英特尔旗下投资机构Intel Capital将公布对Cloudera的新一轮投资,并成为Cloudera的最大股东.Intel Capital可能向Clo

如何为你的企业选择正确的Hadoop版本

由于Hadoop还处于初期高速发展的节点,加上它又是开源的,因此它的版本一直很混乱,Hadoop一些主要的特性有: Append:支持文件追加功能,如果想使用http://www.aliyun.com/zixun/aggregation/13713.html">HBase,需要这个特性. RAID : 在保证数据可靠的前提下,通过引入校验码减少数据块数目.详细链接:https://issues.apache.org/jira/browse/HDFS/component/12313080 S

基于MapReduce模型的排序算法优化研究

基于MapReduce模型的排序算法优化研究 金菁 MapReduce已经发展成为大数据领域标准的并行计算模型.理想情况下,一个MapReduce系统应该使参与计算的所有节点高度负载均衡,并且最小化空间使用率.CPU和I/O的使用时长以及网络传输开销.传统的算法往往只针对上述指标中的一种进行优化.在保持算法良好并行性基础上,对多个指标同时进行优化,提出了MapReduce优化算法的设计规范.针对数据处理领域最重要的排序算法进行理论分析,给出了多指标约束下的最后算法,并证明了该优化算法满足MapR

英特尔放弃发行 Hadoop 版本,转而支持 Cloudera

据Marketwatch报道,英特尔昨天作出了一个震惊整个大数据市场的决定--停止发行英特尔自己的Hadoop版本,转而支持Hadoop发行商Cloudera. 消息人士透露英特尔资本还将向Cloudera追加超过9000万美元投资并成为Cloudera最大的股东. Cloudera上周刚刚完成1.6亿美元融资,而本周二Hortonworks也紧随其后完成了第四轮1亿美元融资. 大数据基础设施是资金密集型市场 ,因此Hadoop大数据厂商的融资规模通常都比较大.创立于2008年的Cloudera