Hadoop-离线批处理技术
作者 | WenasWei
一 Hadoop
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。充分利用集群的威力进行高速运算和存储。
Hadoop的框架最外围的设计就是:HDFS1和MapReduce2。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
Apache Hadoop软件库是一个框架,该框架容许应用简略的编程模型跨计算机集群对大型数据集进行分布式解决。它旨在从单个服务器扩大到数千台机器,每台机器都提供本地计算和存储。库自身不依赖于硬件来提供高可用性,而是被设计用来检测和解决应用程序层的故障,因而能够在计算机集群的顶部提供高可用性服务,每台计算机都容易呈现故障。
二 Hadoop特点
Hadoop 是一个可能对大量数据进行分布式解决的软件框架, 反对C++,Java开发语言,其带有用Java语言编写的框架,因而运行在 Linux 生产平台上是十分现实的。
2.1 Hadoop的长处
- 1.高可靠性: Hadoop按位存储和解决数据的能力值得人们信赖, 假如计算元素和存储会失败,它保护的多个工作数据正本,确保可能针对失败的节点从新散布解决。
- 2.高扩展性: Hadoop是在可用的计算机集簇间调配数据并实现计算工作的,这些集簇能够不便地扩大到数以千计的节点中。
- 3.高效性: Hadoop可能在节点之间动静地挪动数据,并保障各个节点的动态平衡,因而处理速度十分快,且并行的形式工作,通过并行处理放慢处理速度。
- 4.高容错性: Hadoop可能主动保留数据的多个正本,并且可能主动将失败的工作重新分配。
- 5.低成本:与一体机、商用数据仓库以及其余的数据集市相比,hadoop是开源的,我的项目的软件老本因而会大大降低。
2.2 Hadoop的毛病
- 1、不能做到低提早: 高数据吞吐量做了优化,就义了获取数据的提早。
- 2、不适宜大量的小文件存储。
- 3、文件批改效率低: 不反对任意批改文件和不反对多人同时进行写操作, HDFS 适宜一次写入,屡次读取的场景。
三 Hadoop的意义
Hadoop 曾经不只是一个大数据框架,它逐步演变成为 Hadoop 生态系统。Hadoop 生态系统中涵盖
了各种各样的大数据处理技术,包含Hadoop、Storm、Spark、Hive、Zookeeper、Flume、Kafka等一系列技术和框架,未然成为大数据处理的事实标准。
Hadoop的分布式架构,将大数据处理引擎尽可能的凑近存储数据,对例如像 ETL3 这样的批处理操作绝对适合,因为相似这样操作的批处理后果能够间接走向存储。Hadoop 的 MapReduce 性能实现了将单个工作打碎,并将碎片工作(Map)发送到多个节点上,之后再以单个数据集的模式加载(Reduce)到数据仓库里。
hadoop次要的性能就是用来解决大数据:
- 首先,大数据能够对顾客群体细分而后对每个群体因地制宜般的采取独特的口头。
- 第二点,使用大数据模仿实境,挖掘新的需要和进步投入的回报率。当初越来越多的产品中都装有传感器,汽车和智能手机的遍及使得可收集数据出现爆炸性增长。
- 第三点,进步大数据成绩在各相干部门的分享水平,进步整个治理链条和产业链条的投入回报率。大数据能力强的部门能够通过云计算、互联网和外部搜索引擎把大数据成绩和大数据能力比拟单薄的部门分享,帮忙他们利用大数据发明商业价值。
- 第四点,进行商业模式产品和服务的翻新。大数据技术使公司能够增强已有的产品和服务,发明新的产品和服务,甚至打造出全新的商业模式。
四 Hadoop的整体架构
4.1 Hadoop的外围组件
Hadoop的外围组件别离是:
- MapReduce: 分布式计算框架
- HDFS:hadoop的数据存储工具
- YARN4:Hadoop 的资源管理器
- Common 工具: 封装的一些罕用底层工具
(1) MapReduce-分布式计算框架
MapReduce 编程模型借鉴了 "分而治之" 的思维,将一个大而简单的计算问题分解成多个小的计算问题,由多个map()函
数对这些合成后的小问题进行并行计算,输入两头计算结果,而后由 reduce() 函数对 map() 函数的输入后果进行进一步合并,得出最终的计算结果。
- 注: 一篇具体MapReduce介绍: 跳转链接
(2) HDFS-数据存储工具
Hadoop分布式文件系统(HDFS)是指被设计成适宜运行在通用硬件(commodity hardware)上的分布式文件系统。而且是一个高度容错性的零碎,适宜部署在便宜的机器上。HDFS能提供高吞吐量的数据拜访,非常适合大规模数据集上的利用。HDFS放宽了一部分POSIX束缚,来实现流式读取文件系统数据的目标。
HDFS采纳Java语言开发,因而任何反对Java的机器都能够部署Namenode或Datanode。
HDFS采纳master/slave架构, 即主从模式。一个HDFS集群是由一个Namenode和肯定数目的Datanodes组成。Namenode是一个核心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的拜访。集群中的Datanode个别是一个节点一个,负责管理它所在节点上的存储。HDFS裸露了文件系统的名字空间,用户可能以文件的模式在下面存储数据。从外部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比方关上、敞开、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责解决文件系统客户端的读写申请。在Namenode的对立调度下进行数据块的创立、删除和复制。
(3) YARN-资源管理器
YARN-资源调度框架是从Hadoop2.0版本开始引入的, 引入之前, MapReduce框架的外围 Job Tracker(作业跟踪者), JobTracker 须要与集群中的机器定时通信 (heartbeat), 须要治理哪些程序应该跑在哪些机器上,须要治理所有 job 失败、重启等操作,还须要和数据元数据中心通信,理解数据分布等等, 既当爹又当妈的意思,即既做资源管理又做任务调度/监控。Task Tracker资源划分过粗放,二大部分工作是能够高度一致的监控工作。
Job Tracker 存在的问题:
- 单点故障: 仍旧是单点故障问题,如果JobTracker挂掉了会导致MapReduce作业无奈执行
- 资源节约: JobTracker实现了太多的工作,造成了过多的资源耗费,当map-reduce job十分多的时候,会造成很大的内存开销,潜在来说,也减少了JobTracker生效的危险,这也是业界广泛总结出老Hadoop的Map-Reduce只能反对4000节点主机的下限
- 局限性: 只反对简略的MapReduce编程模型, 要应用Hadoop进行编程的话只能应用根底的MapReduce,而无奈应用诸如 Spark 这些计算模型。并且它也不反对流式计算和实时计算
YARN 框架中将 JobTracker 资源分配和作业控制离开,分为 Resource Manager(RM) 以及 Application Master(AM)。
资源调度管理器最外围是
- 治理集群资源,原则上能够包含任何硬件资源,以后 YARN 治理粒度是 CPU 和内存——解决物理资源透明化
- 基于资源状况和工作进行状态,调度工作队列——解决并发任务调度透明化
Yarn的次要组件如下:
Resource Manager:ResourceManager蕴含两个次要的组件:定时调用器(Scheduler)以及利用管理器(ApplicationManager)。
- 定时调度器(Scheduler):定时调度器负责向应用程序分配资源,它不做监控以及应用程序的状态跟踪,并且它不保障会重启因为应用程序自身或硬件出错而执行失败的应用程序。
- 利用管理器(ApplicationManager):应用程序管理器负责接管新工作,协调并提供在ApplicationMaster容器失败时的重启性能。
- Application Master:每个应用程序的ApplicationMaster负责从Scheduler申请资源,以及跟踪这些资源的应用状况以及工作进度的监控。
- Node Manager:NodeManager是ResourceManager在每台机器的上代理,负责容器的治理,并监控他们的资源应用状况(cpu,内存,磁盘及网络等),以及向ResourceManager/Scheduler提供这些资源应用报告。
- Contain: 为资源申请和工作运行的容器, 会向 Application Master 上报 MapReduce 状态。
Yarn框架作为一个通用的资源调度和治理模块,同时反对多种其余的编程模型,比方最闻名的Spark。
(4) Common-底层工具
Hadoop 的 Common 工作了解起来比较简单, 就是封装了一些罕用的底层工具,供其余
Hadoop 模块应用。其次要包含配置工具 Configuration、 近程过程调用(Remote Procedure
Cal.RPC)、序列化工具和 Hadoop 的形象文件系统工具 FileSystem 等,为其余 Hadoop 模块的运行提供根本服务,并为开 发Hadoop 程序提供了必要的 API。
4.2 Hadoop的物理架构
Hadoop 在物理架构上会采纳 Master/Slave模式。NameNode 服务器寄存集群的元数据信息,负责整个数据集群的治理。DataNode 散布在不同的物理机架上,保留具体的数据块并定期向 NameNode 发送存储的数据块信息,以心跳的形式告知 NameNode。客户端与 Hadoop 交互时,首先要向 NameNode 获取元数据信息,依据 NameNode 返回的元数据信息,到具体的 DataNode 服务器上获取数据或写入数据。
Hadoop 提供了默认的正本寄存策略,每个 DataNode 默认保留了3个正本,其中2个正本会保留在同一个机架的不同节点,另一个正本会保留在不同机架的节点上。
参考文档:
- [1] apache.hadoop官网: http://hadoop.apache.org
- [2] GitHub地址: https://github.com/apache/hadoop
- [3] 冰河 . 海量数据处理与大数据技术实战 [M] . 第1版 . 北京: 北京大学出版社 , 2020-09
- [4] zzzzMing . Hadoop1.0 和 Hadoop 2.0 的区别 . 博客园 . https://www.cnblogs.com/liste... , 2018-12-25
- [5] WaveVector
. 分布式资源管理器YARN简介(一) . CSDN . https://blog.csdn.net/wending... , 2017-12-17
- HDFS: Hadoop 分布式文件系统, Hadoop Distributed File System, 简称HDFS ↩
- MapReduce: 一种编程模型,用于大规模数据集的并行运算, 次要思维: "Map(映射)"和"Reduce(归约)" ↩
- ETL: 数据仓库技术, Extract-Transform-Load, 用来形容将数据从起源端通过抽取(extract)、转换(transform)、加载(load)至目标端的过程 ↩
- YARN: 另一种资源协调者, Yet Another Resource Negotiator ↩