1、大数据整体简介
1、1 简介
百度百科这样写道
大数据(big data),IT行业术语,是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
其实大数据可以理解为大的数据。什么叫大的数据,首先数据量大,种类多,增长快,价值密度低,需要分析处理得出有价值的数据。我们技术人员一般讲大数据是指大数据技术,例如Hadoop等技术。
特点
1.数据量大
Volume:表示大数据的数据体量巨大。
数据集合的规模不断扩大,已经从 GB 级增加到 TB 级再增加到 PB 级,近年来,数据量甚至开始以 EB 和 ZB 来计数。例如微信,淘宝等网站的数据,全球几十亿人的数据都要处理。
2.数据时效性
Velocity:表示大数据的数据产生、处理和分析的速度在持续加快。
加速的原因是数据创建的实时性特点,以及将流数据结合到业务流程和决策过程中的需求。数据处理速度快,处理模式已经开始从批处理转向流处理。例如我们每天都要聊微信,每时每刻都要视频,这个数据都要实时进行传输,时效性在不断加快。
3.数据多样性
Variety:表示大数据的数据类型繁多。
传统 IT 产业产生和处理的数据类型较为单一,大部分是结构化数据。随着传感器、智能设备、社交网络、物联网、移动计算、在线广告等新的渠道和技术不断涌现,产生的数据类型无以计数。例如图片,视频等非结构化数据,都需要进行存储。
4.数据价值低
Value:表示大数据的数据价值密度低。
大数据由于体量不断加大,单位数据的价值密 度在不断降低,然而数据的整体价值在提高。以监控视频为例,在一小时的视频中,有用的数据可能仅仅只有一两秒,但是却会非常重要。现在许多专家已经将大数据等同于黄金和石油,这表示大数据当中蕴含了无限的商业价值。例如淘宝可以利用大数据来做推荐,百度可以利用大数据做竞价排名等。
1、2 相关技术
Hadoop 是一个提供分布式存储和计算的开源软件框架,它具有无共享、高可用(HA)、弹性可扩展的特点,非常适合处理海量数量。
- Hadoop 是一个开源软件框架
- Hadoop 适合处理大规模数据
- Hadoop 被部署在一个可扩展的集群服务器上
Hadoop 是大数据批量处理架构,由 HDFS 负责静态数据的存储,并通过 MapReduce 将计算逻辑分配到各数据节点进行数据计算和价值发现.之后以 HDFS 和 MapReduce 为基础建立了很多项目,形成了 Hadoop 生态圈.
Spark 则是UC Berkeley AMP lab (加州大学伯克利分校AMP实验室)所开源的类Hadoop MapReduce的通用并行框架, 专门用于大数据量下的迭代式计算.是为了跟 Hadoop 配合而开发出来的,不是为了取代 Hadoop
flume是一个可分布式日志收集系统,为hadoop相关组件之一。
2、Hadoop简介
Hadoop 三大核心组件
HDFS(分布式文件系统) -—— 实现将文件分布式存储在集群服务器上
MAPREDUCE(分布式运算编程框架) —— 实现在集群服务器上分布式并行运算
YARN(分布式资源调度系统) —— 帮用户调度大量的 MapReduce 程序,并合理分配运算资源(CPU和内存)
1、HDFS
定义
HDFS (Hadoop Distributed File System) ,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS 的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。
优缺点
优点:
( 1 )高容错性
①数据自动保存多个副本。它通过增加副本的形式,提高容错性。
②某一个副本丢失以后,它可以自动恢复。
(2)适合处理大数据
①数据规模:能够处理数据规模达到 GB 、 TB 、甚至 PB 级别的数据;
②文件规模:能够处理百万规模以上的文件数量,数量相当之大。
(3)可构建在廉价机器上,通过多副本机制,提高可靠性。
缺点:
( 1 )不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
(2)无法高效的对大量小文件进行存储。
①存储大量小文件的话,它会占用 NameNode 大量的内存来存储文件目录和块信息。这
样是不可取的,因为 NameNode 的内存总是有限的;
②小文件存储的寻址时间会超过读取时间,它违反了 HDFS 的设计目标。
(3)不支持并发写入、文件随机修改。
①一个文件只能有一个写,不允许多个线程同时写;
②仅支持数据 append ( 追加 ) ,不支持文件的随机修改。
核心思想
1 ) NameNode (nn) :就是 Master , 它是一个主管、管理者。
①管理 HDFS 的名称空间;
②配置副本策略;
③管理数据块(Block) 映射信息;
④处理客户端读写请求。
(2) DataNode :就是 Slave 。 NameNode 下达命令, DataNode 执行实际的操作。
①存储实际的数据块;
③执行数据块的读/ 写操作。
(3) Client :就是客户端。
①文件切分。文件上传 HDFS 的时候, Client 将文件切分成一个一个的 Block, 然后进行上传;
②与 NameNode 交互,获取文件的位置信息;
③与 DataNode 交互,读取或者写入数据;
④Client 提供一些命令来管理 HDFS, 比如 NameNode 格式化;
⑤Client 可以通过一些命令来访问 HDFS ,比如对 HDFS 增删查改操作;
(4) Secondary NameNode :并非 NameNode 的热备。当 NameNode 挂掉的时候, 它并不能马上替换 NameNode 并提供服务。
①辅助 NameNode ,分 担其工 作量 ,比如 定期合 并 Fsimage 和 Edits, 并推送给NameNode ;
②在紧急情况下,可辅助恢复 NameNode 。
重点
HDFS 中的文件在物理上是分块存储 (Block) ,块的大小可以通过配置参数 ( dfs.blocksize)来规定,默认大小在 Hadoop2.x 版本中是 128M ,老版本中是 64M 。
思考:为什么块的大小不能设置太小,也不能设置太大?
(1) HDFS 的块设置太小,会增加寻址时间,程序一直在找块的开始位置;
(2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
总结 : HDFS 块的大小设置主要取决于磁盘传输速率。
2、MapReduce
定义
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架
MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完的分布式运算程序,并发运行在一个Hadoop集群上
优缺点
优点:
(1)MapReduce易于编程它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。
(2)良好的扩展性
当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。
(3)高容错性
MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。
(4)适合PB级以上海量数据的离线处理可以实现上千台服务器集群并发工作,提供数据处理能力。
缺点:
(1)不擅长实时计算MapReduce无法像MySQL一样,在毫秒或者秒级内返回结果
(2)不擅长流式计算
流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的不擅长DAG(有向图)计算
(3)多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下
3、Yarn
定义
yarn是一种通用的资源管理系统和调度平台。
资源管理系统 :管理集群内的硬件资源,和程序运行相关,比如内存,CPU等。
调度平台:多个程序同时申请计算资源时提供分配,调度的规则(算法)。
通用:不仅仅支持MapReduce程序,理论上支持各种计算程序如spark,flink。yarn不关系程序的计算内容,只关心程序所需的资源,在程序申请资源的时候根据调度算法分配资源,计算结束之后回收计算资源。使用yarn作为资源调度平台的计算框架自身需要提供ApplicationMaster来负责计算任务的调度。
优缺点
优点
(1)将资源管理和作业控制分离,减小JobTracker压力
(2)YARN的设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。
(3)老的框架中,JobTracker一个很大的负担就是监控job下的tasks的运行状况,现在,这个部分就扔给ApplicationMaster做了而ResourceManager中有一个模块叫做ApplicationsManager(ASM),它负责监测ApplicationMaster的运行状况。
(4)能够支持不同的计算框架
(5)资源管理更加合理
(6)使用Container对资源进行抽象,Container不同于MRv1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的,比之前以slot数目更合理。
(7)且使用了轻量级资源隔离机制Cgroups进行资源隔离。
(8)Container的设计避免了之前的map slot/reduce slot分开造成集群资源闲置的尴尬情况。
缺点:
(1)各个应用无法感知集群整体资源的使用情况,只能等待上层调度推送信息。
(2)资源分配采用轮询、ResourceOffer机制(mesos),在分配过程中使用悲观锁,并发粒度小。
(3)缺乏一种有效的竞争或优先抢占的机制。
(4)简化了双层调度器中的全局资源管理器,改为由一个Cell State来记录集群内的资源使用情况,这些使用情况都是共享的数据,以此来达到与全局资源管理器相同的效果。
(5)所有任务访问共享数据时,采用乐观并发控制方法。
核心思想
步骤说明:
1,客户端向ResourceManager中的ApplicationManager提交作业申请,申请jobID。
2,ApplicationManager 返回一个jobID,以及运行的hdfs临时路径(hdfs://… jobID)。
3,客户端将作业的jar包,配置信息等上传到分配的hdfs临时路径(hdfs://… jobID)中。
4,客户端上传文件成功后,向ApplicationManager发送执行作业请求。
5,ApplicationManager将请求转发给Scheduler,申请执行所需资源。
6,调度器将作业放置到相关队列中,当执行到该作业时,开始让ApplicationManager分配Containers。
7,ApplicationManager命令NodeManager使用分配的container资源启动ApplicationMaster。
8,ApplicationMaster启动后去分配的hdfs临时路径(hdfs://… jobID)中读取作业的具体信息,根据分片信息创建map任务,reduce任务。
9,ApplicationMaster向Scheduler请求资源来执行map任务,reduce任务。
10,Scheduler返回申请结果。
11,AppMaster通知NodeManager,启动map,reduce任务。
12,NodeManager启动map,reduce任务。
13,map,reduce任务读取数据,进行逻辑计算。计算过程中如果有map,reduce任务执行失败了,AppMaster负责重启任务。
14,程序执行成功后,AppMaster向Scheduler发送请求,释放资源。
摘抄部分原文链接:https://blog.csdn.net/weixin_43172032/article/details/117759068
调度策略
Yarn中有三种资源调度器:FIFO调度器(FIFO Scheduler)、容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)。
(1)FIFO调度器
简介:顾名思义,FIFO调度器把应用放在队列里,按照先进先出的提交顺序执行应用。
优点:简单,不需要额外配置。
缺点:不适合共享集群。大应用会占满整个集群的资源,导致小应用长时间等待。
(2)容量调度器
简介:容量调度器设有一个专门的队列给小作业使用。
优点:大作业不会占满全部资源,小作业不需要长时间等待大作业完成。
缺点:整个集群的资源利用率降低了,大作业需要更长的时间来执行。
(3)公平调度器
简介:公平调度器旨在为所有运行的应用公平地分配资源。
优点:同时解决了FIFO大作业占满整个集群资源的问题和Capacity小作业队列空闲导致集群资源利用率降低的问题。
缺点:存在延迟问题,后面的作业需要等待前面的作业让出资源。
具体策略介绍请看:https://blog.csdn.net/m0_37795099/article/details/124211350
原文链接:https://blog.csdn.net/qq_40322236/article/details/128891963