Hadoop大数据技术
昨夜西风凋碧树。独上高楼,望尽天涯路。
Hadoop背景
数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用,预示着新一波生产率增长和消费者盈余浪潮的到来——麦肯锡
大数据(Big Data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
大数据并不等同于海量数据,基本特征如下:
- Volume(数据体量大):存储量大、增量大
- Velocity(处理速度快):高速数据、高速处理
- Variety(数据类型多):来源多、类型多
- Value(价值密度低)
- Veracity(数据准确性)
当今,互联网、云计算、移动与物联网发展迅猛,移动设备、RFID、无线传感器每分每秒都在产生数据,数以亿计用户的互联网服务时时刻刻在产生巨量的交互。而传统方案集中式存储与计算,同时需要考虑设备性能、成本等问题,难以满足要求;因此架构基于大规模分布式计算(MPP)的 GFS/HDFS 分布式文件系统、各种 NoSQL分布式 等新方案应运而生。另外,在大数据处理上, Hadoop 对于大部分的企业来说,基于 Hadoop 已经能够满足绝大部分的数据需求,因此才会成为现在的主流选择。
Hadoop生态圈
Hadoop生态圈:由 Apache基金会 所开发的分布式系统基础框架,用于分布式大数据处理的开源框架,允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。
Hadoop生态圈:
Hadoop生态圈组件说明:
Hadoop典型应用架构:
Hadoop模式
- 单机模式:Hadoop默认模式,在单机上按默认配置以非分布式模式运行的一个独立Java进程,没有分布式文件系统HDFS,直接在本地操作的文件系统读写,一般仅用于本地MapReduce程序的调试。
- 伪分布式模式:单机上模拟一个分布式的环境,具备Hadoop的主要功能,常用于调试程序。
- 完全分布式模式:也叫集群模式,Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的分布式环境,是用于实际的生产环境。
HDFS
概述
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),是 Hadoop 项目的核心子项目,是分布式计算中数据存储管理的基础。支持海量数据的存储,成百上千的计算机组成存储集群,HDFS 可以运行在低成本的硬件之上,具有的高容错、高可靠性、高可扩展性、高吞吐率等特征,非常适合大规模数据集上的应用。
优点
- 高容错性,以数据复制多份并存储在集群的不同节点来实现数据容错。
- 高扩展性,Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
- 高吞吐率,延时较低,可存储非常大的文件。
- 低成本,可构建在廉价机器上。
- 采用流式的数据访问方式,即一次写入,多次读取,保证数据一致性。
- 适合批处理
- 适合大数据处理
缺点
- 不适合低延迟数据访问:Hadoop优化了高数据吞吐量,牺牲了获取数据的延迟,从而Hadoop不适合低延迟数据访问,而HBase更适合低延迟访问需求。
- 不适合大量的小文件存储:NameNode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于NameNode的内存容量。
- 不适合并发写入、文件随机修改
基本组成
HDFS主要由主节点(NameNode)、辅助名称节点(Secondary NameNode)、数据节点(DataNode)组成。
NameNode
NameNode的职责主要是:管理维护 HDFS(即管理DataNode上文件Block的均衡,维持副本数量);接收客户端的请求:上传、下载、创建目录等;维护 edits 与 fsimage 两个重要的文件。
其中:
edits 文件:记录操作日志,元数据的每一次变更操作都会被记录到edits中。
fsimage 文件:HDFS的元信息,NameNode节点的元数据运行在内存中,为防止宕机数据丢失,每隔一段时间会将元数据持久化到磁盘中。
Secondary NameNode
Secondary NameNode主要职责是: 定期地创建命名空间的检查点(CheckPoint)操作——把edits中最新的状态信息合并到 fsimage 文件中,防止 edits 过大;也可以做冷备(即两个服务器,一个运行,一个不运行做备份),对一定范围内数据块做快照性备份。
DataNode
DataNode的主要职责是:存储数据块;负责客户端对数据块的 io 请求;DataNode 定时和 NameNode 进行心跳通信,接受 NameNode 的指令。
YARN
YARN (Yet Another Resource Negotiator,另一种资源协调者),一种新的 Hadoop 资源管理器。它是一个通用资源管理系统,最初是为了改善MapReduce的实现,但也是一种资源调度框架,具有通用性,可为上层应用提供统一的资源管理和调度,可以支持其他的分布式计算模式(如Spark)。它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
- ResourceManager(资源管理器):负责整个系统的资源分配和管理,是一个全局的资源管理器。它主要由两个组件构成:调度器和应用程序管理器。
- 调度器(Scheduler):根据资源情况为应用程序分配封装在 Container 中的资源。
- 应用程序管理器(Application Manager):负责管理整个系统中所有应用程序。
- NodeManager(节点管理器):每个节点上的资源和任务管理器。它会定时向 ResourceManager 汇报本节点上的资源使用情况和各个 Container 的运行状态;并接收并处理来自 ApplicationManager 的 Container 启动/停止等请求。
- Container(容器):YARN中的资源抽象,它封装了某个节点上的多维度资源。另外,YARN会为每个任务分配一个 Container 。
- ApplicationMaster (主应用):用户提交的每一个应用程序均包含一个 ApplicationMaster 。它是一个详细的框架库,它结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。主要功能包括:
- 与 ResourceManager 调度器协商以获取抽象资源(Container);
- 负责应用的监控,跟踪应用执行状态,重启失败任务等 ;
- 并且与 NodeManager 协同工作完成Task的执行和监控 。
YARN中应用(Application)运行机制(流程):
(1)Client 向 ResourceManager 提交 YARN Application ;
(2) ResourceManager 启动 Container ;
(3) 在 NodeManager 的协助下启动 Container,首次启动,Container 里面包含 Application Master ;
(4) Application Master 计算资源是否足够,如果够,则自己处理 ;如果不够,Application Master 向 ResourceManager 申请资源 ;
(6)Application Master 获取到资源后,开始启动 Container ;
(7)在NodeManager的协助下,启动 Container,Application 运行 。
YARN中任务进度监控:
(1)任务运行时,向自身的 ApplicationMaster 报告进度和状态 ;
(2)ApplicationMaster 形成一个作业的汇聚视图 ;