大家好,我是北山啦,好久不见,Nice to meet you,本文将记录学习Hadoop生态圈相关知识。
大数据时代
大数据是指无法在一定时间范围内通过常用软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产
大数据时代的特征5V
应用场景,包括电商领域中的推荐以及金融方面中的个人信用评估,交通领域中拥堵预测,导航最优规划等等,https://beishan.blog.csdn.net/
大数据场景下:海量数据如何存储以及海量数据如何计算?
这里涉及到分布式、集群的概念
海量数据如何存储以及海量数据如何计算
Hadoop
Hadoop概述
官网:https://hadoop.apache.org/
侠义上Hadoop指的是Apache软件基金会的一款开源软件
允许用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理
Hadoop核心组件HDFS
:分布式文件存储系统,解决海量数据存储YARN
:集群资源管理和任务调度框架,解决资源任务调度MapReduce
:分布式计算框架,解决海量计算
广义上Hadoop指的是围绕Hadoop打造的大数据生态圈
Hadoop特性优点
Hadoop国内外应用
Hadoop最先应用于国内外的互联网公司,外国的例如:Yahoo、Facebook、IBM。国内的例如:BAT以及华为
Hadoop的成功在于它的通用性以及简单
精确区分做说什么和怎么做,做什么属于业务问题,怎么做属于技术问题,用户负责业务,Hadoop负责技术
Hadoop发行版本
分为开源社区版以及商业发行版
开源社区版本:https://hadoop.apache.org/
商业发行版本:https://www.cloudera.com/products/open-source/apache-hadoop.html
截至目前,Hadoop以及发展到了3.x版本,Hadoop1.0时,包括HDFS(分布式文件存储)和MapReduce(资源管理和分布式数据处理),到2.0,将MapReduce(分布式数据处理)进行拆分,引入新的组件YARN(集群资源管理、任务调度)
Hadoop3.0架构组件和Hadoop2.0类似,3.0着重于性能优化
Hadoop集群整体概述
- Hadoop集群包括两个集群:HDFS集群、YARN集群
- 两个集群在逻辑上分离通常物理上在一起
- 两个集群都是标准的主从架构集群
MapReduce是计算框架、代码层面的组件 没有集群之说
两个集群在逻辑上分离通常物理上在一起,可以从下图中理解
HDFS集群由一主(NN即NameNode)三从(DN即DataNode)+一个秘书(SNN即Secondary NameNode)构成
YARN集群由RM即Resource Manager和NM即Node Manager构成
Hadoop集群 = HDFS集群 + YARN集群
- 逻辑上分离,指他们之间互相没有依赖
- 物理上一起,指进程部署在同一台机器上
HDFS分布式文件系统
文件系统是一种存储和组织数据的方法,实现了数据的存储、分级组织、访问和获取等操作,使得用户对访问和查找变得容易,文件系统使用树形目录
的逻辑抽象
代替了硬盘等物理设备使用数据块的概念,用户不需要关系数据底层存在硬盘哪里,只需记得这个文件所属的目录和文件名即可
传统常见的文件系统
海量数据存储遇到的困难:
- 传统存储硬件通用性差,设备投资加上后期维修、升级扩容的成本非常高
- 传统存储方式意味着:存储时存储,计算是计算,当需要处理数据的时候把数据移动过来
- 性能低,单节点I/O性能瓶颈无法逾越,难以支持海量数据的高并发高吞吐
- 可扩展性差
数据和元数据
HDFS核心属性
- 分布式存储
- 元数据记录
- 分块存储
- 副本机制
分布式存储
数据量大,单机存储遇到瓶颈,分布式存储通过横向扩展来解决数据存储问题
元数据记录
针对文件分布在不同机器上不利于寻找,元数据记录下文件机器存储位置信息,快速定位文件位置
分块存储
文件过大导致单机存放不下,上传下载效率低。通过文件分块存储在不同机器,针对块并行操作提高效率
副本机制
不同机器设置备份,冗余存储,保障数据安全
总结如下:
HDFS简介
- HDFS(Hadoop Distributed File System),Hadoop分布式文件系统,是Apache Hadoop的核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在,也可以说大数据首要解决的我呢提就是海量数据的存储问题
HDFS shell操作
HDFS Shell包含了各种的类Shell的命令,可以直接与Hadoop分布式文件系统以及其他文件系统进行交互,常用命令如下:
这里搬运的CSDN气质&末雨的总结,感谢感谢
Map Reduce
hadoop主键之MapReduce
分而治之思想、设计构思、官方示例、执行流程
分而治之
MapReduce的核心思想是:分而治之
将原问题拆分位若干个子问题,并对子问题进行求解,最后进行合并,得到原问题的解。
将原问题拆分位若干个小问题之后,可以并行处理,同时来计算。当然,如果无法拆分或者拆分后小问题之间存在着依赖关系,那就不能用分而治之的思想。
- 能不能拆分
- 是否存在依赖
举例:要数停车场中的所有停放车的总数量
Map
:你数一列,我数一列…这就是Map阶段,人越多,能过够同时数车的人就越多,速度就越快。
Reudece
:数完之后,聚在一起,把所有人的统计数加在一起,这就是Reduce合并汇总阶段
理解MapReduce思想
- MapReduce的思想很好理解,关键在于如何基于这个思想设计出一款分布式计算程序
- 后续讲解Hadoop团队针对MapReduce的设计构思
- 如何针对大数据处理场景
- 构建抽象编程模型
MapReduce借鉴了函数式
语言中的思想,再用Map
和Reduce
两个函数提供了高层的并行编程抽象模型。
Map
:对一组数据元素进行某种重复式的处理
Reduce
:对Map的中间结果进行某种进一步的结果整理
MapReduce中定义了如下的Map和Reduce两个抽象的编程接口,由用户编程实现:
通过以上两个编程接口,大家可以看出MapReduce处理的数据类型是<key,value>键值对
- 统一架构、隐藏底层细节
分布式计算概念
- 分布式计算是一种计算方法,和集中式计算是相对的
- 随着计算机技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成
- 分布式计算将改应用分解成许多小的部分,分配给堕胎计算机进行处理,这样可以节约整体计算时间,大大提高计算效率
MapReduce介绍
- Hadoop MapReduce是一个分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)
- Map Reduce是一种面向海量数据处理的一种指导思想,也是一种用于大规模数据进行分布式计算的编程模型
MapReduce产生背景
由Google于2004年的论文中《MapReduce:Simplified Data Processing on Large Cluster》中提出
MapReduce特点
易于编程
:MapReduce提供了用于二次开发的接口,简单地实现一些接口,就可以完成一个分布式程序,任务计算交给计算框架去处理,将分布式程序部署到hadoop集群上运行,集群节点可以扩展到成百上千
良好的扩展性
:当计算机资源不能得到满足的时候,可以通过增加机器来扩展计算能力,基于MapReduce的分布式计算的特点可以随节点数目增长保持近乎于线性的增长,这也是MapReduce处理海量数据的关键,通过将计算节点增至几百或几千就可以很容易地处理数TB甚至数PB的离线数据
高容错性
:Hadoop集群式分布式搭建和部署的,任何一个机器节点宕机了,它可以把上面的计算任务转移到另一个节点上运行,不影响整个作业任务的完成,过程完全是Hadoop内部完成的
适合海量数据的离线处理
:可以处理GB、TB和PB级别的数据量
MapReduce局限性
MapReduce虽然有很多优势,也有相对的局限性,局限性不代表不能做,而是在某些场景下实现效果比较差,不适合MapReduce来处
实时计算性能差
:MapReduce主要应用于离线作业,无法做到秒级的数据相应
不能进行流式计算
:流式计算特点是数据源源不断地计算,并且数据是动态的,而MapReduce作为一个离线计算框架,主要是针对静态数据集的,数据是不能动态变化的
MapReduce实例进程
一个完整的MapReduce程序在分布式运行时有三类
- MRAppMaster:负责整个MR程序的过程调度以及状态协调
- MapTask:负责map姐u单的整个数据处理流程
- ReduceTask:负责reduce阶段的整个数据处理流程
MapReduce阶段组成
- 一个MapReduce编程模型中只包含一个Map阶段和Reduce阶段,或者只有Map阶段
- 不能有诸多个map阶段,多个reduce阶段的出现
- 如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序串行运行
MapReduce数据类型
- 在整个MapReduce程序中,数据都是以
kv键值对
的形式流转的 - 在实际编程解决各种业务问题中,需要考虑每个阶段的输入输出kv是什么
- MapReduce内置了很多默认属性,比如排序,分组等,都和数据的k相关,所以说kv的类型数据确定是极其重要的
MapReduce官方示例
概述:
实例说明:
计算圆周率Π的值
WordCount词频统计
- WordCount算是大数据计算领域经典的入门案例,相当于hello world
- 通过WordCount,可以感受背后MapReduce的执行流程和默认的行为机制
WordCount编程实现思路
-
map阶段核心:把输入的数据进行切割,全部标记,因此输出就是<单词,1>
-
shuffle阶段核心:经过MR程序内部自带默认的排序分组等功能,把key相同的单词会作为一组数据构成新的kv对
-
reduce阶段核心:处理shuffle完成的一组数据,该组数据就是该代词所有的键值对,对所有的1进行累计求和,就是单词的总数
Word程序提交
Map阶段执行流程
依托WordCount程序
MapReduce整体执行流程图
Map阶段执行过程
Reduce阶段执行流程
Reduce阶段执行过程
Shuffle机制
- Shuffle的本意是洗牌的意思,把一组有规则地数据尽量打乱成无规则的数据
- 在MR中,Shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则‘打乱’成具有一定规则的数据,以便reduce端接收处理
- 一般吧从Map产生输出开始到Reduce得到数据作为输入之前的操作称作shuffle
Map端的shuffle
Reduce端的shuffle
shuffle机制弊端
- Shuffle是MapReduce程序的核心和精髓
- Shuffle也是MapReduce被诟病最多的地方,MapReduce相比较于Spark、Flink计算引擎慢的原因,根Shuffle机制有很大的关系
- Shuffle中
频繁涉及数据在内存,磁盘之间的多次往复
YARN
介绍、架构组件、程序提交交互流程、调度器
YARN介绍
- Apache Hadoop Yarn(Yet Another Resource Negotiatot,另一种资源协调者)是一种新的Hadoop资源管理器
- YARN是一个通用
资源管理系统
和调度平台
,可为上层应用提供统一的资源管理和调度 - 它的引入为集群在利用率、资源同意管理和数据共享等方面带来了巨大好处
YANR是一个通用
资源管理系统
和调度平台
YARN功能说明
YARN概述
YARN架构、组件
YARN官方架构图
程序提交YARN交互流程
- MR作业提交,Client → RM
- 资源的申请 MrAppMaster → RM
- MR作业状态汇报 Container(Map|Reduce task) → Container(MrAppMaster)
- 节点的状态汇报 NM→ RM
YARN资源调度器Scheduler
如何理解资源调度
- 在理想的情况下,应用程序提出的请求将以及得到YARN的批准,但在实际中,资源是有限的,并且在繁忙的集群中,应用程序通常将需要等待其后写请求得到满足。YARN调度程序的工作是根据一些
定义的策略为应用程序分配资源
- 在YARN中,负责给应用分配资源的就是
Scheduler
,他是ResourceManager的核心组件之一,Scheduler完全专用于调度作业,他无法跟踪应用程序的状态 - 一般而言,调度是一个难题,并且没有一个最佳的策略,为此,YARN提供了多种调度器和配置的策略供选择
调度器策略
根据需求,选择合适的调度器
- FIFO Schedule
- Capacity Schedule
- Fair Schedule
- FIFO Scheduler
- Capacity Schedule
文章来源:https://www.toymoban.com/news/detail-418717.html
- Fair Schedule
https://beishan.blog.csdn.net/,我是北山啦,欢迎评论交流文章来源地址https://www.toymoban.com/news/detail-418717.html
到了这里,关于Hadoop 生态圈及核心组件简介Hadoop|MapRedece|Yarn的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!