Hadoop的核心设计

 

HDFS

HDFS是一个高度容错性的分布式文件系统,可以被广泛的部署于廉价的PC之上。它以流式访问模式访问应用程序的数据,这大大提高了整个系统的数据吞吐量,因而非常适合用于具有超大数据集的应用程序中。

HDFS的架构如下图所示。HDFS架构采用主从架构(master/slave)。一个典型的HDFS集群包含一个NameNode节点和多个DataNode节点。NameNode节点负责整个HDFS文件系统中的文件的元数据保管和管理,集群中通常只有一台机器上运行NameNode实例,DataNode节点保存文件中的数据,集群中的机器分别运行一个DataNode实例。在HDFS中,NameNode节点被称为名称节点,DataNode节点被称为数据节点。DataNode节点通过心跳机制与NameNode节点进行定时的通信。

 

 

NameNode

可以看作是分布式文件系统中的管理者,存储文件系统的meta-data,主要负责管理文件系统的命名空间,集群配置信息,存储块的复制。

DataNode

是文件存储的基本单元。它存储文件块在本地文件系统中,保存了文件块的meta-data,同时周期性的发送所有存在的文件块的报告给NameNode。

Client

就是需要获取分布式文件系统文件的应用程序。

下面来看看在HDFS上如何进行文件的读/写操作:

 

 

文件写入:

1. Client向NameNode发起文件写入的请求

2. NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。

3. Client将文件划分为多个文件块,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

 

 

文件读取:

1. Client向NameNode发起文件读取的请求

2. NameNode返回文件存储的DataNode的信息。

3. Client读取文件信息。

MapReduce

MapReduce是一种编程模型,用于大规模数据集的并行运算。Map(映射)和Reduce(化简),采用分而治之思想,先把任务分发到集群多个节点上,并行计算,然后再把计算结果合并,从而得到最终计算结果。多节点计算,所涉及的任务调度、负载均衡、容错处理等,都由MapReduce框架完成,不需要编程人员关心这些内容。

下图是一个MapReduce的处理过程:

 

 

用户提交任务给JobTracer,JobTracer把对应的用户程序中的Map操作和Reduce操作映射至TaskTracer节点中;输入模块负责把输入数据分成小数据块,然后把它们传给Map节点;Map节点得到每一个key/value对,处理后产生一个或多个key/value对,然后写入文件;Reduce节点获取临时文件中的数据,对带有相同key的数据进行迭代计算,然后把终结果写入文件。

如果这样解释还是太抽象,可以通过下面一个具体的处理过程来理解:(WordCount实例)

  Hadoop的核心是MapReduce,而MapReduce的核心又在于map和reduce函数。它们是交给用户实现的,这两个函数定义了任务本身。

 

map函数:接受一个键值对(key-value pair)(例如上图中的Splitting结果),产生一组中间键值对(例如上图中Mapping后的结果)。Map/Reduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。

reduce函数:接受一个键,以及相关的一组值(例如上图中Shuffling后的结果),将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)(例如上图中Reduce后的结果)

但是,Map/Reduce并不是万能的,适用于Map/Reduce计算有先提条件:

①待处理的数据集可以分解成许多小的数据集;

②而且每一个小数据集都可以完全并行地进行处理;

若不满足以上两条中的任意一条,则不适合使用Map/Reduce模式;



来源:CUUG官网

Hadoop核心设计思想源自于谷歌发布的几篇论文,尤其是 MapReduce 论文以及分布式文件系统 GFS (Google File System)。它旨在解决大规模数据集(海量数据)处理的问题,并具备以下几个关键特点: 1. **高容错性**:Hadoop 能够自动处理节点故障。集群中的每个组件都假设可能会失败,在这种环境下,Hadoop 设计了机制去检测并快速从硬件错误和服务中断中恢复。 2. **分布式存储与计算**:通过 HDFS(Hadoop Distributed File System),它可以将大文件分割成块,默认大小为 128 MB 或更大,并分布到多个节点上;同时利用 MapReduce 进行任务分配,使得数据可以在最接近它们的位置进行处理,提高效率降低延迟。 3. **横向扩展能力**:用户可以轻松地添加更多机器至现有群集中以增加性能。相比于传统的竖向升级方式(即提升单台服务器配置),这种方式成本更低并且更灵活易操作。 4. **简化编程模型**:MapReduce 提供了一种简单而强大的抽象层次让用户编写程序专注于业务逻辑而不是底层复杂的并发控制等细节。开发者只需要定义 map() 和 reduce() 函数就可以完成复杂的数据分析工作流程。 总之,Hadoop 核心设计理念是为了提供一种可靠、高效的大规模数据分析解决方案。它不仅关注如何有效地存储 PB 级别的非结构化或半结构化的大量信息,还关心怎样让应用程序能够充分利用整个系统的资源来进行有效的查询和统计分析等工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值