您的位置:首页 > 运维架构

Hadoop之MapReduce & HDFS

2015-10-24 14:29 183 查看
Hadoop是Apache下的一个项目,由HDFS、MapReduce、Hive、Zookeeper、HBase等组成。其中MapReduce和HDFS是两个最基础最重要的成员。

MapReduce

MapReduce是现今非常流行的一个分布式计算框架,它被设计用于并行计算海量数据。第一个提出该技术框架的是Google公司,而Google的灵感则是来自函数式编程,如LISP、ML、Scheme等。

以下是MapReduce三个主要步骤:

Mapping

对集合中的每一个目标都执行同一个的操作;

当你向该框架发布一个计算任务时,它会首先将计算任务分成若干个Map任务,然后分布到不同的节点去执行,每一个Map任务处理输入数据的一部分内容,当Map任务完成后,会产生一个中间文件,而这些中间文件则作为Reduce的输入。

Shuffle

它是MapReduce的心脏。指的是从Map产生输出开始,包括系统执行排序以及传送Map输出到Reducer作为输入的过程。在这里不去探究其具体的工作流程。

Reducing

遍历集合中的所有元素来返回一个综合的结果;

Reduce的任务则是将前面处理过的结果汇总到一起并输出。

MapReduce的基本构思

对付大数据处理——分而治之

什么样的计算任务可以进行并行化计算?

并行计算的第一个重要问题是如何划分计算任务或者计算数据以便对划分的子任务或数据块行并行计算。但并不是所有任务都能够进行并行计算,一些数据之间存在依赖关系的问题恰恰无法进行这样的划分,只能进行串行计算。

结论:不能拆分的计算任务或相互之间有依赖关系的数据不能够进行并行计算。

一个大数据若可以分为具有同样计算过程的数据块,并且这些数据块之间不存在数据依赖关系,则提高处理速度的最好办法就是并行计算

构建抽象模型——Map和Reduce

借鉴函数式程序设计的思想,给大数据处理中的两个重要步骤提供一种抽象机制。为用户提供了一个清晰的操作接口抽象描述。

上升到构架-自动并行化并隐藏低层细节

MapReduce提供了一个统一的计算框架:

—计算任务的划分和调度

—数据的分布存储和划分

—处理数据与计算任务的同步

—结果数据的收集整理(sorting, combining, partitioning,…)

—系统通信、负载平衡、计算性能优化处理

—处理系统节点出错检测和失效恢复

MapReduce最大亮点

通过抽象模型和计算框架把需要做什么(what need to do)与具体怎么做(how to do)分开了,为程序员提供一个抽象和高层的编程接口和框架;

程序员仅需要关心其应用层的具体计算问题,仅需编写少量的处理应用本身计算问题的程序代码;

如何具体完成这个并行计算任务所相关的诸多系统层细节被隐藏起来,交给计算框架去处理:从分布代码的执行,到大到数千小到单个节点集群的自动调度使用;

HDFS

HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据Google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统(中文,英文)。

HDFS的主要设计理念

(1)存储超大文件

这里的“超大文件”是指几百MB、GB甚至TB级别的文件。

(2)最高效的访问模式是 一次写入、多次读取(流式数据访问)

HDFS存储的数据集作为hadoop的分析对象。在数据集生成后,长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。

(3)运行在普通廉价的服务器上

HDFS设计理念之一就是让它能运行在普通的硬件之上,即便硬件出现故障,也可以通过容错策略来保证数据的高可用。

HDFS基本概念

NameNode

是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;

SecondaryNameNode

是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。

DataNode

Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。

数据块(block)

大文件会被分割成多个block进行存储,block大小默认为64MB。每一个block会在多个datanode上存储多份副本,默认是3份。

热备份

b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。

冷备份

b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。

fsimage

元数据镜像文件(文件系统的目录树。)

fsedits

元数据的操作日志(针对文件系统做的修改操作记录)

namenode内存中存储的是=fsimage+edits。

SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量。

HDFS的特点:

① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份;

② 运行在廉价的机器上;

③ 适合大数据的处理。多大?多小?HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。

参考资料

1、http://blog.jobbole.com/80619/

2、http://blog.csdn.net/weixuehao/article/details/16967485

3、《MapReduce简介》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop