赞
踩
大数据的4V特征是描述大数据特性的四个关键维度,这四个特征分别为:
Volume(大量性):
Velocity(高速性):
Variety(多样性):
Value(价值性):
优势:
Hadoop的主要版本迭代可以划分为三个大系列:
Hadoop 1.x:
- 核心组件:主要包括Hadoop Distributed File System (HDFS) 和 MapReduce。
- 设计特点:HDFS作为分布式存储系统,MapReduce作为并行计算模型,但在Hadoop 1.x中,MapReduce不仅是计算框架,还承担了作业调度和集群资源管理的角色。
- 局限性:存在单点故障问题(NameNode没有高可用性)、不支持多租户和资源隔离、以及不灵活的计算框架(仅限于MapReduce)。
Hadoop 2.x:
- 核心组件:同样包括HDFS,但引入了新的资源管理系统YARN (Yet Another Resource Negotiator)。
- 改进之处:YARN解耦了资源管理和任务调度,使得Hadoop能够支持多个计算框架并存,比如MapReduce v2、Spark、Tez等。HDFS在2.x版本中添加了高可用(High Availability, HA)特性,通过Secondary
NameNode或JournalNodes实现了NameNode的热备,消除了单点故障问题。此外,HDFS
Federation增强了系统的可扩展性,允许多个NameNode管理集群的不同命名空间。Hadoop 3.x:
- 进一步增强:在Hadoop 2.x的基础上继续优化和增加新功能,例如:
- HDFS:支持更大的文件块,提高了存储效率;可能还进一步提升了Namespace的扩展能力。
- YARN:性能提升,资源分配策略更加精细,可能增加了更多容器级别的优化。
- 其他改进:还包括对安全性和可管理性的增强,以及对容器化部署和云环境更好的支持。
总的来说,从1.x到3.x的演进过程中,Hadoop逐渐变得更加健壮、灵活和高效,不仅提升了自身的可靠性、可扩展性,也更好地适应了大数据生态系统不断发展的需求。各版本间还有许多具体的技术细节差异,例如网络协议的改进、API的变化以及对新硬件特性的支持等。
Hadoop分布式文件系统(HDFS)是一种专为大型分布式计算和海量数据存储而设计的文件系统,它采用主/从(Master/Slave)架构来管理和存储数据。下面是HDFS工作原理的简单描述:
NameNode(主节点):
DataNode(从节点):
数据存储与冗余:
数据读取:
心跳检测与块报告:
故障检测与恢复:
综上所述,HDFS通过集中式的元数据管理、分散式的数据存储以及动态的块复制和故障恢复机制,有效地支持了大规模数据的存储和访问需求。
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
适合一次写入,多次读出
——
HDFS文件物理上是分块存储的,块大小可以通过配置决定,2.x 3.x 版本默认128M,可以在hdfs-default.xml
中修改dfs.blocksize
决定
寻址时间是传输时间1%最好
HDFS(Hadoop Distributed File System)的NameNode和SecondaryNameNode共同作用于HDFS的元数据管理,确保数据的高可用性和安全性。以下是两者如何配合工作的详细说明:
NameNode(主节点):
SecondaryNameNode(辅助节点):
通过这种方式,SecondaryNameNode减轻了NameNode的压力,减少了重启NameNode时必须重放的EditLog记录的数量,加快了集群恢复速度。然而,SecondaryNameNode并不能替代NameNode的故障恢复,因为它并不提供高可用性解决方案,即在NameNode发生故障时,SecondaryNameNode无法立即接管NameNode的服务。
在较新的Hadoop版本中,尤其是在Hadoop 2.x及以后的版本,已经引入了HA(High Availability)架构,通过Active/Standby NameNode模式取代了SecondaryNameNode,从而实现了真正的NameNode高可用性。在这种模式下, standby NameNode可以实时地与active NameNode共享编辑日志,并时刻准备在active NameNode出现故障时切换为active状态。
启动与注册:
心跳与块报告:
数据读取服务:
数据写入服务:
数据完整性保障:
块复制与删除:
故障检测与恢复:
综上所述,DataNode作为HDFS的核心组件之一,主要负责存储数据、响应客户端读写请求、维持与NameNode的通信、执行数据块管理命令,并通过各种机制确保数据的可靠性和完整性。
资源管理器,管理的就是CPU and Mem
YARN是在Hadoop集群的计算节点上运行的软件服务,它并不涉及物理硬盘上的数据存储,而是专注于管理和调度计算任务所需的CPU、内存等资源,使得这些资源能够在众多并行任务之间合理、高效地分配和利用。而数据存储则由HDFS(Hadoop Distributed File System)负责,HDFS才是将数据分布存储在集群中各个节点的硬盘上的系统。
YARN(Yet Another Resource Negotiator)是Apache Hadoop的一个组件,它在Hadoop 2.x及更高版本中被引入,作为更通用的资源管理和调度平台。YARN的工作原理可以概括如下:
角色划分:
ResourceManager(RM):集群的全局资源管理器,负责整个集群的资源调度,它有两个主要子组件:
NodeManager(NM):在每台集群节点上运行,负责容器的启动、监控和管理。容器是YARN的基本资源单元,封装了CPU、内存等资源。
ApplicationMaster(AM):每个提交到YARN的应用程序都有自己的AM,负责与ResourceManager协商资源,并与NodeManager协作,获取并分配容器,监控和管理容器内的任务执行,直到作业完成。
Container: 分配的执行任务的容器,相当于子虚拟机。
客户端可以有多个、集群上可以有多个ApplicationMaster、每个NodeManager可以有多个Container
工作流程:
作业提交:用户通过客户端向ResourceManager提交作业,并上传作业相关的依赖文件到HDFS或其他存储系统。
资源申请:ResourceManager接收到提交请求后,为该作业启动一个新的ApplicationMaster实例。ApplicationMaster启动后,向ResourceManager申请容器资源。
资源分配:ResourceManager根据Resource Scheduler策略将容器资源分配给ApplicationMaster。
任务执行:ApplicationMaster获得容器资源后,与NodeManager通信,指示其启动容器并在容器中执行具体的任务(如MapReduce任务、Spark任务等)。
任务监控与管理:ApplicationMaster持续监控任务的状态,并在任务完成后释放容器资源,或在任务失败时重新申请资源以执行失败的任务。
作业完成:当所有任务都成功完成时,ApplicationMaster向ResourceManager注册作业结束,释放所有已分配的资源。
通过这样的架构和工作流程,YARN实现了对集群资源的高效管理和灵活调度,支持多种计算框架在同一个集群上运行,极大地提高了Hadoop生态系统的利用率和兼容性。
算是一个框架,用户只需要关心逻辑,底层自动实现并发。。。
MapReduce不适合进行实时计算的原因并非单一地由于其运行速度慢,而是由其设计哲学、执行模型以及对数据处理延迟的要求等多个因素综合决定的。以下是MapReduce不适合实时计算的主要原因:
批处理性质:
任务生命周期:
数据处理模式:
缺乏低延迟交互:
资源调度与启动成本:
因此,MapReduce不适合实时计算并非单纯由于运行速度慢,而是由于其整体设计和执行模型与实时计算的需求(如低延迟、即时响应、流式处理)不匹配。对于实时计算任务,应选择专门的流处理技术来满足低延迟、高吞吐量和持续处理数据流的要求。
1)MapReduce运算程序一般需要分成2个阶段:Map阶段和Reduce阶段
2)Map阶段的并发MapTask,完全并行运行,互不相干
3)Reduce阶段的并发ReduceTask,完全互不相干但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出
4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行
性能优化:
Writable
)通常更简洁、紧凑,专注于数据本身的编码,从而减少序列化后的数据体积,提高网络和磁盘I/O效率。对象复用:
控制权与灵活性:
兼容性与稳定性:
1kb数据启动多少个Task?1PB启动多少个Task?
MapTask是MapReduce框架中负责执行Map阶段工作的独立任务单元。其工作机制可以概括为以下几个关键步骤:
Input Splitting and Record Reading(输入分片与记录读取):
User-defined Map Function(用户自定义映射函数):
map()
函数进行处理。在这个函数中,开发者可以执行特定的逻辑,如提取、清洗、转换数据,并生成新的键值对(<new_key, new_value>)。Intermediate Key-Value Pair Collection(中间键值对收集):
map()
函数处理后的键值对通过OutputCollector.collect(new_key, new_value)
方法进行收集。此方法内部:
HashPartitioner
基于键的哈希值将数据分发到不同的Reducer。Spilling to Disk(溢写到磁盘):
MapReduce的Shuffle机制是连接Map阶段和Reduce阶段的关键步骤,负责将Map任务生成的中间键值对按照键进行重新分发,确保具有相同键的值能够被同一个Reducer处理。Shuffle过程包括以下几个核心环节:
Partitioning(分区):
HashPartitioner
,通过哈希函数将键散列到固定数量的分区(与Reducer数量相等),保证相同键的值会被分配到同一个分区。Sorting(排序):
Spilling to Disk(溢写到磁盘):
Intermediate Merge(中间合并):
Transfer to Reducers(传输到Reducers):
Final Merge(最终合并):
Shuffle机制确保了MapReduce框架能够高效、有序地处理大规模数据集,通过分区保证数据的均匀分布,通过排序为Reducer提供有序数据流以便高效聚合,通过溢写和合并优化内存使用和磁盘I/O,最后通过网络传输和Reducer处理完成全局的聚合和结果生成。Shuffle是MapReduce框架中最为复杂、也是最影响性能的部分,因此常常成为性能调优的重点。
ReduceTask是MapReduce框架中负责执行Reduce阶段工作的独立任务单元。其工作机制主要包括以下几个关键步骤:
Copy阶段(数据复制):
Merge阶段(数据合并):
Sort阶段(全局排序):
Reduce阶段(实际计算):
reduce()
函数,该函数接收一个键及其对应的值列表(由Map阶段生成并经过排序的相同键的所有值)。reduce()
函数对每个键的值列表进行聚合运算,产生最终的输出键值对。Cleanup:
综上所述,ReduceTask机制主要围绕数据复制、多级合并排序、实际计算及结果输出展开,确保从Map阶段产生的大量中间数据经过高效整合与处理,最终转化为按应用需求组织的输出结果。这一过程中,ReduceTask有效地管理内存与磁盘资源,利用并行化手段加速数据移动与处理,确保整个MapReduce作业的顺利进行。
以下列举了Hadoop各个主要组件及其常用端口(基于Hadoop 2.x和3.x版本的信息汇总):
NameNode
DataNode
ResourceManager (RM)
NodeManager (NM)
ApplicationMaster (AM)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。