大数据
大数据指的是那些数据量特别大,数据类型特别复杂的数据集。这些数据集无法使用传统的数据库进行存储、管理和处理。大数据的主要特点为:数据量大(Volume),数据类型特别复杂(Variety),数据处理速度快(Velocity)和数据真实性高(Veracity)。
学习路线
1. 数据采集,主要包括flume等;
2. 数据存储,海量数据怎样有效的存储,主要包括hdfs、Kafka;
3. 数据计算,海量数据怎样快速计算,主要包括MapReduce、Spark、storm等;
4. 数据查询,海量数据怎样快速查询,主要为Nosql和Olap,Nosql主要包括Hbase、 Cassandra 等,其中olap包括kylin、impla等,其中Nosql主要解决随机查询,Olap技术主要解决关联查询;
5. 数据挖掘,海量数据怎样挖掘出隐藏的知识,也就是当前火热的机器学习和深度学习等技术,包括TensorFlow、mahout、spark等。
Hadoop发行版
Apache Ambari是Hortonworks开源的Hadoop平台的管理软件,基于Web界面友好,提供Web UI进行可视化的集群管理、运维等基本功能,支持Apache Hadoop集群的供应、管理和监控。Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop等,简化了大数据平台的安装、使用难度。
Hadoop生态圈
Hadoop 是 Apache 旗下的一套开源软件平台,Hadoop 可以利用计算机集群,根据用户自定义的业务逻辑对海量数据进行分布式处理,通常我们说的 Hadoop 是指一个更广泛的概念--Hadoop 生态圈。
Hadoop 生态圈是指以 Hadoop 为基础发展出来的一系列技术。这些技术都是为了解决大数据处理过程中不断出现的新问题而产生的。
图中包含目前最流行的两个大数据处理框架 Hadoop 和 Spark。蓝色部分是 Hadoop 的生态圈组件,黄色部分是 Spark 生态圈组建。这两个框架之间的关系并不是互斥的,它们之间既有合作,补充又有竞争。比如 Spark 提供的实时内存计算是比 Hadoop 中 MapReduce 快的多的技术,但是 Spark 又依赖于 Hadoop 中的 HDFS 来存储数据。
数据仓库的基本架构
1. HDFS -- Hadoop分布式文件系统
大数据技术首要的要求就是先把数据存下来。HDFS(Hadoop Distributed FileSystem)的设计本质就是为了大量的数据能够横跨成千上万台机器存储,但是对于用户来说看到的是一个文件系统而不是许多文件系统。比如要获取 /hdfs/tmp/xxx的数据,虽然使用的是一个路径,但找个文件的数据可能存放在很多台不同的机器上。作为用户来说不需要知道数据到底存储在哪儿,就像你在单机上并不关心文件到底存储在磁盘那个扇区一样。这些数据交由 HDFS 来管理,用户可以更关注于数据的使用和处理。
将文件分成多个block,分散存储到不同的节点上,并提供多副本,保证数据容错性能。主从结构:
- 主节点,可以有2个: namenode,namenode负责:管理整个集群。维护文件系统的目录结构
- 从节点,有很多个: datanode,datanode负责:存储文件
2. ZooKeeper – Hadoop 的分布式协调服务
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供:1.文件系统,2.通知机制
文件系统:每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。有四种类型的znode:
- PERSISTENT-持久化目录节点,
- PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点,
- EPHEMERAL-临时目录节点,
- EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
通知机制:客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。
Zookeeper做了什么?1.命名服务 2.配置管理 3.集群管理 4.分布式锁 5.队列管理
3. yarn – 资源的调度和管理平台
为了使这么多工具有序的运行在同一个集群上,我们需要使用一个调度系统进行协调指挥。目前流行的是使用 yarn 来进行管理。
Hadoop yarn 集中管理集群的整个计算资源,以container的形式进行资源分配。主从结构:
- 主节点,可以有2个: ResourceManager,ResourceManager负责:集群资源的分配与调度MapReduce、Spark等应用,必须实现
- 从节点,有很多个: NodeManager,NodeManager负责:单节点资源的管理
- (1)Client向ResourceManager发送请求
(2)ResourceManager指定一个NodeManager启动起ApplicationMaster
(3)ApplicationMaster将计算任务反馈给ResourceManager
(4)ApplicationMaster将任务分割分发到不同的NodeManager
(5)NodeManager启动Task执行work
Yarn的每个节点的详细功能:
ResourceManager 整个集群中只有一个,负责集群资源的统一管理和调度,详细功能:
- -处理客户端请求
- -启动/监控ApplicationMaster
- -监控NodeManager
- -资源分配与调度
NodeManager 整个集群有多个,负责单节点资源管理和使用,详细功能:
- -单个节点上的资源管理和任务管理
- -处理来自ResourceManager的命令
- -处理来自ApplicationMaster的命令
ApplicationMaster 每个应用只有一个,负责应用程序的管理,详细功能:
- -数据切分
- -为应用程序申请资源,并进一步分配给内部任务
- -任务监控与容错
Container 对任务运行环境的抽象,详细信息:
- -任务运行资源(节点,内存,CPU)
- -任务启动命令
- -任务运行环境
4. MapReduce – 离线计算框架
数据存储后,接下来就要考虑怎么处理数据了。一台计算机处理成 T 上 P 的数据可能需要几天甚至好几周,对于大部分公司都是不可接受的。比如: 热搜每 24 小时更新一次,就必须在 24 小时内分析完所有数据。如果我们使用很多台计算机进行处理就面临了计算机之间如何分配任务,如何通信,如何进行数据交换等问题。这就是 MapReduce/Tez/Spark 所要解决的问题:提供一种可靠的,能够运行在集群上的计算模型。
4.1 一个MapReduce工作过程中:
- 4.2.1 由Hadoop发送Map和Reduce任务到集群的相应服务器
- 4.2.2 框架管理数据传递,例如发出任务的所有节点之间的集群周围的详细信息,验证任务完成,和复制数据
- 4.2.3 大部分的计算发生在与在本地磁盘上,可以减少网络通信量数据的节点
- 4.2.4 给定的任务完成后,将收集并减少了数据,以一个合适的结果发送回Hadoop服务器
4.2 MapReduce计划分三个阶段执行,即映射阶段,shuffle阶段,并减少阶段。涉及到的角色:
- 4.2.1 客户端(client):编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作;
- 4.2.2 JobTracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行;
- 4.2.3 TaskTracker:保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务,TaskTracker和JobTracker的不同有个很重要的方面,就是在执行任务时候TaskTracker可以有n多个,JobTracker则只会有一个(JobTracker只能有一个就和hdfs里namenode一样存在单点故障,我会在后面的mapreduce的相关问题里讲到这个问题的)
- 4.2.4 Hdfs:保存作业的数据、配置信息等等,最后的结果也是保存在hdfs上面
- map阶段:映射或映射器的工作是处理输入数据。一般输入数据以存储在HDFS的文件或目录的形式,输入文件被传递到映射器功能线路,映射器处理该数据,并创建数据的若干小块。
- reduce阶段:这个阶段是Shuffle阶段和Reduce阶段的组合。减速器的工作是处理该来自映射器中的数据。处理之后,它产生一组新的输出,这将被存储在HDFS。
5. Hive – Hadoop的一个数据仓库工具
在使用了一段时间的 MapReduce 以后,发现 MapReduce 的程序写起来太麻烦。希望能够封装出一种更简单的方式去完成 MapReduce 程序,于是就有了 Pig 和 Hive。Pig 是以类似脚本的方式去描述 MapReduce,而 Hive 则是以 SQL 的方式。它们会自动把脚本或者 SQL 翻译成 MapReduce 程序,然后丢给计算引擎去计算处理。有了 Hive 以后人们发现 SQL 的优势太大了。一是容易写,一两行的 SQL 换成 MapReduce 可能要几十上百行。二是容易上手,即使非计算机背景的用户也可以很快的学会。三是易写易改,一看就懂,容易维护。所以自从 Hive 问世很快就成长为大数据仓库的核心技术。使用了一段时间的 Hive 后人们发现 Hive 运行在 MapReduce 上太慢了。于是有开发出了针对于 SQL 优化的技术 Impala,Drill 和 Presto 等。这些技术牺牲了系统的通用性和稳定性来提高 SQL 的效率,最终并没有流行起来。
Hive本质上就是数据库,用来存储数据,是构建Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。hive存储结构主要包括:数据库,文件,表,视图
用户接口主要有三个:CLI,JDBC/ODBC和 WebUI
- CLI,即Shell命令行
- JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似
- WebGUI是通过浏览器访问 Hive
小结上面介绍的就是数据仓库的基本架构了,底层是 HDFS,上面运行的是 MapReduce/Tez/Spark,在往上封装的是 Pig 和 Hive。接下来延伸
6. Storm – 实时计算框架
如果想要更快的计算速度,比如视频网站的热博榜,要求更新延迟在一分钟内,上面的任何一种手段都无法胜任。于是 Streaming(流)计算模型被开发出来了。Storm 是最流行的流计算平台。流处理的思路就是在数据进入系统的时候就进行处理,基本无延迟。缺点是不灵活,必须事先直到需要统计的数据,数据流过就没有了,没法进行补算。因此它是个好东西,但还是无法代替上述体系的。
7. HBase – 分布式的、面向列的开源数据库存储系统
HBase 是一个构建与 HDFS 的分布式,面向列的开源数据库存储系统。以 kv 对的方式存储数据并对存取操作做了优化,能够飞快的根据 key 获取绑定的数据。例如从几个 P 的数据中找身份证号只需要零点几秒。
8. flume – 分布式的海量日志采集、聚合和传输的系统
它将各个服务器中的数据收集起来并送到指定的地方去比如说送到图中的HDFS,简单来说flume就是收集日志的。同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
flume的架构主要有一下几个核心概念:
Event:一个数据单元,带有一个可选的消息头
Flow:Event从源点到达目的点的迁移的抽象
Client:操作位于源点处的Event,将其发送到Flume Agent
Agent:一个独立的Flume进程,包含组件Source、Channel、Sink
Source:用来消费传递到该组件的Event
Channel:中转Event的一个临时存储,保存有Source组件传递过来的Event
Sink:从Channel中读取并移除Event,将Event传递到Flow Pipeline中的下一个Agent(如果有的话)
9. Spark – 内存计算框架
spark是开源的类hadoop mapreduce的通用的并行计算框架,spark基于mapreduce算法实现的分布式计算,拥有hadoop mapreduce所具有的有点,但不同于mapreduce的job中间输出和结果 可以保存在内存中,从而不在需要读写hdfs,因此spark更好的适用于数据挖掘与机器学习等需要迭代mapreduce的算法。和hadoop联合使用,增强hadoop性能,增加内存缓存,流数据处理,图数据处理等更为高级的数据处理能力
————————————————————————————————————————————————————
Zookeeper 是集群管理工具,Flume 是日志采集工具。除此之外还有需要定制的组件。比如:Oozie 是作业流调度系统,Sqoop 是 Hadoop 和数据库之间的导入导出工具,Mahout 是机器学习和推荐引擎,Nutch 是搜索引擎,