第一章:大数据概论
1.1:大数据概念
大数据(BigData):指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策能力,洞察发现力和流程优化能力的海量,高增长率和多样化的信息资产。
主要解决,海量的数据的存储和海量数据的分析计算问题。
1.2:大数据的特点
特性 | 说明 |
---|---|
大量性 (volume) | 一般在大数据里,单个文件的级别至少为几十,几百GB以上 |
快速性 (velocity) | 反映在数据的快速产生及数据变更的频率上 |
多样性 | 泛指数据类型及其来源的多样化,进一步可以把数据结构归纳为结构化(structured),半结构化(semi-structured),和非结构化(unstructured) |
易变性 (variety) | 伴随数据快速性的特征,数据流还呈现一种波动的特征。不稳定的数据流会随着日,季节,特定事件的触发出现周期性峰值 |
准确性 | 又称为数据保证(data assurance)。不同方式,渠道收集到的数据在质量上会有很大差异。数据分析和输出结果的错误程度和可信度在很大程度上取决于收集到的数据质量的高低 |
复杂性 | 体现在数据的管理和操作上。如何抽取,转换,加载,连接,关联以把握数据内蕴的有用信息已经变得越来越有挑战性 |
1.3:大数据的应用场景
1.物流仓储
2.零售行业
3.旅游
4.商品广告推荐
5.保险
6.金融
7.房产
8.人工智能
第二章:从Hadoop框架讨论大数据生态
2.1:Hadoop是什么
(1)Hadoop是一个有Apache基金会所开发的分布式系统基础架构。
(2)主要解决,海量数据的存储和海量数据的分析计算问题。
(3)广义上来说,Hadoop通常是指一个更广泛的概念—Hadoop生态圈
2.2Hadoop的适用范围
Hadoop可运行于一般的商用服务器上。具有高容错, 高效性, 高可靠性,高拓展性等特点,特别适合一次写,多次度的场景。
(1)高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据丢失。
(2)高扩展性:在集群分配任务数据,可方便的扩展数以千计的节点。
(3)高效性:在MapReduce的思想下,Hadoop是并行工作的,以便加快任务处理速度。
(4)高容错性:能够自动将失败的任务重新分配。
适合
- 大规模数据
- 流式数据(写一次,读多次)
- 商用硬件(一般硬件)
不适合
- 低延时的数据访问
- 大量的小文件
- 频繁的修改文件(基本就是写一次)
2.3Hadoop架构
- HDFS:分布式文件存储
- YARN:分布式资源管理
- MapReduce:分布式计算
- Others:利用YARN的资源管理功能实现其他的数据处理方式
其内部的各个节点都采用Master-Worker架构
2.4Hadoop三大发行版本
Hadoop三大发行版本:Apache,Cloudera,Hortonworks。 - Apache版本最为基础,适合入门学习。
- Cloudera在大型互联网企业中用的较多。
- Hortonworks文档较好。
2.5Hadoop1.x和Hadoop2.x的区别
在Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑计算和资源的调度。耦合性较大,在Hadoop2.x时代,增加了YARN。YARN只负责资源的调度,MapReduce只负责运算,做到了业务逻辑与资源的调度分离。
2.5.1HDFS架构概述*
HDFS(Hadoop distribution file system)分布式文件系统,是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。
Block数据块
1.基本存储单位,一般大小为64M(配置大的块主要是因为:1)减少搜寻时间,一般硬盘传输速率比寻道时间要快,大的块可以减少寻道时间;2)减少管理块的数据开销,每个块都需要在NameNode上有对应的记录;3)对数据块进行读写,减少建立网络的连接成本)
2.一个大文件会被拆分成一个个的块,然后存储于不同的机器。如果一个文件少于Block大小,那么实际占用的空间为其文件的大小
3.基本的读写单位,类似于磁盘的页,每次都是读写一个块
4.每个块都会被复制到多台机器,默认复制3份
NameNode(Master 管理者)
1.存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小
2.一个Block在NameNode中对应一条记录(一般一个block占用150字节),如果是大量的小文件,会消耗大量内存。同时map task的数量是由splits来决定的,所以用MapReduce处理大量的小文件时,就会产生过多的map task,线程管理开销将会增加作业时间。处理大量小文件的速度远远小于处理同等大小的大文件的速度。因此Hadoop建议存储大文件
3.数据会定时保存到本地磁盘,但不保存block的位置信息,而是由DataNode注册时上报和运行时维护(NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中,而是NameNode每次重启后,动态重建)
4.NameNode失效则整个HDFS都失效了,所以要保证NameNode的可用性
Secondary NameNode(NameNode备份)
定时与NameNode进行同步(定期合并文件系统镜像和编辑日志,然后把合并后的传给NameNode,替换其镜像,并清空编辑日志,类似于CheckPoint机制),但NameNode失效后仍需要手工将其设置成主机
DataNode(Slave 执行者)
1.保存具体的block数据
2.负责数据的读写操作和复制操作
3.DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息
4.DataNode之间会进行通信,复制数据块,保证数据的冗余性
Client(客户端)
1.文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
2.与 NameNode 交互,获取文件的位置信息。
3.与 DataNode 交互,读取或者写入数据。
4.Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFS。
5.Client 可以通过一些命令来访问 HDFS。
2.5.2YARN架构概述*
YARN是为解决Hadoop1.x版本中MapReduce同时承担处理业务逻辑计算和资源的调度所导致的问题,在Hadoop2.x中,引入的资源管理系统,直接从MR1演化而来。 核心思想:将MR1中JobTracker的资源管理和作业调度两个功能分开,分别由ResourceManager和ApplicationMaster进程来实现。其中,ResourceManager:负责整个集群的资源管理和调度。ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等。
每一个程序对应一个Applicationmaster。
YARN可支持多种框架,如MapReduce,Storm,spark等。
YARN架构主要由ResourceManager、NodeManager、ApplicationMaster和Container等以下几个组件构成。
ResourcesManager(全局资源管理器)
负责全局的资源管理和任务调度,把整个集群当成计算资源池,只关注分配,不管应用,且不负责容错。它主要由两个组件构成: 调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。
YARN 分层结构的本质是 ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内存、带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。ResourceManager 还与 ApplicationMaster 一起分配资源,与 NodeManager 一起启动和监视它们的基础应用程序。在此上下文中,ApplicationMaster 承担了以前的 TaskTracker 的一些角色,ResourceManager 承担了 JobTracker 的角色。
1.调度器:调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。 该调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作。
2.应用程序管理器:应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。
ApplicationMaster(实例管理器)
ApplicationMaster 管理一个在 YARN 内运行的应用程序的每个实例。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源更加传统(CPU 核心、内存),但未来会带来基于手头任务的新资源类型(比如图形处理单元或专用处理设备)。从 YARN 角度讲,ApplicationMaster 是用户代码,因此存在潜在的安全问题。YARN 假设 ApplicationMaster 存在错误或者甚至是恶意的,因此将它们当作无特权的代码对待。
ApplicationMaster 管理一个在 YARN 内运行的应用程序的每个实例,ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等 的资源分配)。
NodeManger(节点管理器)
NodeManager 管理一个 YARN 集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1 通过插槽管理 Map 和 Reduce 任务的执行,而 NodeManager 管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。YARN 继续使用 HDFS 层。它的主要 NameNode 用于元数据服务,而 DataNode 用于分散在一个集群中的复制存储服务。
NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动/停止等各种请求。
Container(资源抽象)
Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源,每个Container可以根据需要运行ApplicationMaster、Map、Reduce或者任意的程序。
工作流程
要使用一个 YARN 集群,首先需要来自包含一个应用程序的客户的请求。ResourceManager 协商一个容器的必要资源,启动一个 ApplicationMaster 来表示已提交的应用程序。通过使用一个资源请求协议,ApplicationMaster 协商每个节点上供应用程序使用的资源容器。执行应用程序时,ApplicationMaster 监视容器直到完成。当应用程序完成时,ApplicationMaster 从 ResourceManager 注销其容器,执行周期就完成了。
旧的 Hadoop 架构受到了 JobTracker 的高度约束,JobTracker 负责整个集群的资源管理和作业调度。新的 YARN 架构打破了这种模型,允许一个新 ResourceManager 管理跨应用程序的资源使用,ApplicationMaster 负责管理作业的执行。这一更改消除了一处瓶颈,还改善了将 Hadoop 集群扩展到比以前大得多的配置的能力。此外,不同于传统的 MapReduce,YARN 允许使用 Message Passing Interface 等标准通信模式,同时执行各种不同的编程模型,包括图形处理、迭代式处理、机器学习和一般集群计算。
2.5.3MapReduce架构概述
MapReduce就是map+reduce,一种分布式的计算方式指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。即Map阶段并行处理输入数目,Reduce阶段对map结果进行汇总,即|Map负责分,Reduce负责合。
基本流程
如图所示:
MapReduce主要是先读取文件数据,然后进行Map处理,接着Reduce处理,最后把处理结果写到文件中
2.6大数据技术生态体系
2.6.1大数据技术生态体系内容简介
1.Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
2.Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
3.Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
支持通过Kafka服务器和消费机集群来分区消息。
支持Hadoop并行数据加载。
4.Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
5.Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
6.Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。
7.Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
8.Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
9.R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
10.Mahout:Apache Mahout是个可扩展的机器学习和数据挖掘库。
11.ZooKeeper:Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
2.7 示例