`

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 控制 TaskTracker 上任务的运行, 进行统一调度;

-- 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的数据流 :


-- 多个MapReduce模型 :


-- 没有Reduce程序的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. Hadoop Streaming


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 函数 进程之间的通信;



分享到:
评论

相关推荐

    Hadoop版本生态圈MapReduce模型

    造成Hadoop版本混乱的原因:--主要功能在分支版本开发:0.20分支发布之后,主要功能一直在该分支上进行开发,主干分支并没有合并这个分支,0.20分支成为了主流;--低版本的后发布:0.22版本发布要晚于0.23版本;--版本重命

    hadoop大数据生态圈工具配置与应用.pdf

    目录如下,第一章为centos7的基础配置,详细可以看我博客 ...第四章 mapreduce JAVA API 26 第五章 zookeeper 45 第六章 高可用hadoop配置 46 第七章 hive 51 第八章 flume 53 第九章Azkaban 64 第十章 sqoop 83

    hadoop生态系统介绍

    详细介绍了hadoop生态圈,包括 基础介绍 HDFS, HDFS 2 MapReduce, YARN 以下简要介绍 Pig Hive Hbase, HOYA Mahout 其它

    Hadoop权威指南 第二版(中文版)

     Apache Hadoop和Hadoop生态圈 第2章 关于MapReduce  一个气象数据集  数据的格式  使用Unix工具进行数据分析  使用Hadoop分析数据  map阶段和reduce阶段  横向扩展  合并函数  运行一个分布式的MapReduce...

    基于Python的大数据Hadoop平台2-2、MapReduce.zip

    在正式介绍MR之前,先铺垫一些Hadoop生态圈组件,如图所示,这些组件从下到上看,底层偏存储,上层多是计算框架,而zookeeper贯穿了整个生态。 详细介绍参考:...

    Ambari部署Hadoop集群.doc

    Hadoop生态圈包含HDFS、MapReduce、HBase、Hive、Pig、Flume、Sqoop、ZooKeeper等诸多组件。对大数据的初学者来说,搭建一个Hadoop大数据基础平台不是一件容易的事;对于企业,如果要部署由成千上万的节点组成的...

    Hadoop权威指南(中文版)2015上传.rar

    Apache Hadoop和Hadoop生态圈 第2章 关于MapReduce 一个气象数据集 数据的格式 使用Unix工具进行数据分析 使用Hadoop分析数据 map阶段和reduce阶段 横向扩展 合并函数 运行一个分布式的MapReduce作业 Hadoop的...

    一、Hadoop简介 和 Hadoop结构介绍

    Hadoop是现阶段数据开发的基础,Hadoop通常是指一个更广泛的概念—-Hadoop生态圈(基于或关于Hadoop的大数据开发的各种软件环境) 是Apache公司使用Java语言编写的开源的,分布式系统的基础架构 分布式就是,当储存...

    Apache Hadoop---Ambari.docx

    Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。...但是这里的 Hadoop 是广义,指的是 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等),而并不仅是特指 Hadoop。

    大数据平台介绍.pptx

    Hadoop生态圈 大数据平台介绍全文共43页,当前为第4页。 Hadoop简介 Hadoop一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和...

    Spark:比Hadoop更强大的分布式数据计算项目

    它的核心技术是弹性分布式数据集(Resilientdistributeddatasets),提供了比Hadoop更加丰富的MapReduce模型,可以快速在内存中对数据集进行多次迭代,来支持复杂的数据挖掘算法和图计算算法。Spark使用Scala开发,...

    大数据知识仓库涉及到数据仓库建模、实时计算、大数据、数据中台、系统设计、Java、算法等代码

    5、Hadoop生态圈的学习笔记,主要记录HDFS、MapReduce、Yarn相关读书笔记及源码分析等 5.1 HDFS Hadoop快速入门 HDFSOverView Hadoop广义生态系统 Hadoop高可用配置 HadoopCommon分析 HDFS集群相关管理 HDFS Shell ...

    Hadoop大数据开发实战-教学大纲.pdf

    经过十多年的发展,目前Hadoop已经成长为一个全栈式的大数据技术生态圈,并在事实上成为应用最广泛最具有代表性的大数据技术。因此,学习Hadoop技术是从事大数据行业工作所必不可少的一步。 二、 课程的任务 通过本...

    hadoop大数据知识点及题型.docx

    (3)Hadoop具有成熟的多生态圈,有许多辅助系统对数据进行处理。 第一章 初识Hadoop 1.什么是大数据? (1)一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合。 (2)...

    Hadoop实战(第2版)

    ·真实的场景,实用的解决方案 ·如何整合MapReduce和R前言 致谢关于本书 第1 部分 背景和基本原理1 跳跃中的Hadoop1.1 什么是Hadoop 1.1.1 Hadoop 的核心组件1.1.2 Hadoop 生态圈1.1.3 物理架构...

    Hadoop技术在商业智能BI中的应用

    时至今日,Hadoop在技术上已经得到验证、认可甚至到了成熟期,同时也衍生出了一个庞大的生态圈,比较知名的包括HBase、Hive、Spark等。HBase是基于HDFS的分布式列式数据库,HIVE是一个基于HBase数据仓库系统。Impala...

    拥抱大数据——初识Hadoop,轻松应对海量数据存储与分析所带来的挑战

    二、Hadoop生态圈 2.1 Hadoop2.x的生态系统 2.2 Hadoop2.x各个组件 2.3 大数据与云计算 三、HDFS(分布式文件系统) 3.1 hdfs架构 3.2 hdfs存储 四、MapReduce(分布式计算框架) 4.1 Map+Reduce 4.2 MapReduce架构 ...

    word源码java-hadoop-v1:hadoop入门

    hadoop生态圈 spark生态圈 大数据概述 初识hadoop 分布式文件系统HDFS 分布式资源调度YARN 分布式计算框架MapReduce Hadoop项目实战 数据仓库Hive Hive项目实战 Hadoop分布式集群搭建 大数据概述 商品推荐 预言家 ...

Global site tag (gtag.js) - Google Analytics