大数据分布式
一、数据导论
1.1.数据是什么?
数据:一种可以被鉴别的对客观事件进行记录的符号。简单来说就是:对人类的行为及产生的事件的一种记录。生活中无时无刻不在产生数据:

1.2.数据对于现实生活有什么影响?
对于京东而言,数据可以更好的了解客户

1.3.数据有什么价值?
- 对数据的内容进行深入分析,可以更好的帮助了解事和物在现实世界的运行规律
- 比如,购物的订单记录(数据)可以帮助平台更好的了解消费者,从而促进交易。
二、大数据诞生
2.1.大数据的发展
大数据的诞生和信息化以及互联网的发展是密切相关的。
⑴.早期的计算机(上世纪 70 年代之前)大多数是相互独立的,各自处理各自的数据

⑵.上世纪 70 年代后,逐步出现了基于 TCP/IP 协议的小规模的计算机互联互通。但多数是军事、科研等用途。

⑶.上世纪 90 年代左后,全球互联的互联网出现。个人、企业均可参与其中,真正逐步的实现了全球互联。

⑷.在 2000 年后,互联网上的商业行为剧增,现在知名的互联网公司(谷歌、 AWS 、腾讯、阿里等)也是在这个年代开始起步。在互联网参与者众多的前提下,商业公司、科研单位等,所能获得的数据量也是剧增。

2.2.大数据的诞生
2.2.1.为什么需要大数据技术?
剧增的数据量和羸弱的单机性能,让许多科技公司开始尝试以数量来解决问题。

剧增的数据量,和羸弱的单机性能,让许多科技公司开始尝试以数量来解决问题。在这个过程中,分布式处理技术诞生了。

2008年之前在当时较为”高端”的分布式技术基本上还处于大企业内部专用且不够成熟

2.2.2.Hadoop
Apache Hadoop 是一款开源的分布式处理技术栈为业界提供了:
- 基于 Hadoop HDFS 的:分布式数据存储技术
- 基于 Hadoop MapReduce 的:分布式数据计算技术
- 基于 Hadoop YARN 的:分布式资源调度技术
Apache Hadoop 的出现具有非常重大的意义:
- 为业界提供了”第一款”企业级开源大数据分布式技术解决方案
- 从 Hadoop 开始,大数据体系逐步建成,各类大数据技术不断出现
Apache Hadoop 开源技术栈说明:
- Apache HBase NoSQL 数据库
- Apache Kafka 分布式消息队列
- Apache Hive 分布式 SQL 平台
- Apache Spark 分布式内存计算
- Apache Flume 流式数据传输工具
- Apache Flink 流计算平台
三、大数据概述
3.1.什么是大数据?
通过大数据的诞生可以发现:大数据的出现,本质上是为了解决海量数据处理的难题
大数据就是:使用分布式技术完成海量数据的处理,得到数据背后蕴含的价值。
- 狭义上:大数据是一类技术栈,是一种用来处理海量数据的软件技术体系。
- 广义上:大数据是数字化时代、信息化时代的基础(技术)支撑,以数据为生活赋能。
3.2.大数据的特征
大数据有 5 个主要特征,称之为: 5V 特性

从海量的高增长、多类别、低信息密度的数据中挖掘出高质量的结果
3.3.大数据的核心工作
整个大数据学习的技术也是围绕着这三点来进行的,即:
- 分布式存储相关技术栈
- 分布式计算相关技术栈
- 海量数据传输相关技术栈

四、大数据软件生态
4.1.大数据的核心工作
- 存储:妥善保存海量待处理数据
- 计算:完成海量数据的价值挖掘
- 传输:协助各个环节的数据传输
4.2.大数据软件生态
- 存储: Apache Hadoop HDFS 、 Apache HBase 、 Apache Kudu 、云平台
- 计算: Apache Hadoop MapReduce 、 Apache Spark 、 Apache Flink、 Apache Hive
- 传输: Apache Kafka 、 Apache Pulsar 、 Apache Flume 、 Apache Sqoop
大数据体系内的软件种类还是非常多的:

4.3.数据存储
Apache Hadoop - HDFS:Apache Hadoop 框架内的组件 HDFS 是大数据体系中使用最为广泛的分布式存储技术

4.4.数据计算
Apache Hadoop - MapReduce:Apache Hadoop 的 MapReduce 组件是最早一代的大数据分布式计算引擎对大数据的发展做出了卓越的贡献

Apache Hive:Apache Hive 是一款以 SQL 为要开发语言的分布式计算框架。其底层使用了 Hadoop的 MapReduce 技术Apache Hive 至今仍活跃在大数据一线,被许多公司使用。

Apache Spark:Apache Spark 是目前全球范围内最火热的分布式内存计算引擎。是大数据体系中的明星计算产品

Apache Flink:Apache Flink 同样也是一款明星级的大数据分布式内存计算引擎。特别是在实时计算(流计算)领域, Flink 占据了大多数的国内市场。

4.5.数据传输
Apache Kafka:Apache Kafka 是一款分布式的消息系统,可以完成海量规模的数据传输工作。Apache Kafka 在大数据领域也是明星产品

五、Apache Hadoop 概述
5.1.什么是 Hadoop?
Hadoop 是 Apache 软件基金会下的顶级开源项目,用以提供:
- 分布式数据存储
- 分布式数据计算
- 分布式资源调度
为一体的整体解决方案。Apache Hadoop 是典型的分布式软件框架,可以部署在 1 台乃至成千上万台服务器节点上协同工作。个人或企业可以借助 Hadoop 构建大规模服务器集群,完成海量数据的存储和计算。
5.2.为什么学习 Hadoop?
近 10 年来,大数据技术体系一词一直和 Hadoop 是划上等号的,提起大数据技术基本就是在提及 Hadoop 。随着近些年的发展,越来越多的新技术框架的出现,给大数据技术体系带来了丰富的生态,但是拥有元老地位的Hadoop 依旧非常重要。为什么学习 Hadoop 有如下几个至关重要的原因:
- Hadoop 是最早的一批大数据技术框架,在市面上拥有极高的占有率和庞大的用户群体。
- Hadoop 在大数据体系内,技术难度相对较低,非常适合作为大数据学习的入门技术栈。
所以,学习 Hadoop 不仅仅因为其适合入门,同时也可以为大数据学习打下良好的基础。
5.3.Hadoop 的功能
通常意义上, Hadoop 是一个整体,其内部还会细分为三个功能组件,分别是:

Hadoop 是一个集合了:存储、计算、资源调度为一体的大数据分布式框架
5.4.Hadoop 发展历程
Hadoop 创始人:道格·卡丁(Doug Cutting)

Hadoop 起源于 Apache Lucene 子项目: Nutch
- Nutch 的设计目标是构建一个大型的全网搜索引擎。
- 遇到瓶颈:如何解决数十亿网页的存储和索引问题
Google 三篇论文
- 《 The Google file system 》:谷歌分布式文件系统 GFS
- 《 MapReduce: Simplified Data Processing on Large Clusters 》:谷歌分布式计算框架 MapReduce
- 《 Bigtable: A Distributed Storage System for Structured Data 》:谷歌结构化数据存储系统

5.5.Hadoop 发行版本
Hadoop 发行版本(原生 Hadoop 体系)
- Apache 开源社区发行也是官方发行版本
- 优点:更新迭代快
- 缺点:兼容稳定性不周
商业公司发行(商业公司二次发行)
- 基于 Apache 开源协议,某些服务需要收费
- 优点:稳定兼容好
- 缺点:收费 版本更新慢
开源社区版本:https://hadoop.apache.org/

商业发行版本
- CDH ( Cloudera's Distribution, including Apache Hadoop ) Cloudera 公司出品,目前使用最多的商业版
- HDP ( Hortonworks Data Platform ), Hortonworks 公司出品,目前被 Cloudera 收购
- 星环,国产商业版,星环公司出品,在国内政企使用较多
① HDFS :海量数据存储
② MapReduce :海量数据计算
③ YARN :资源调度
5.6.Hadoop特性(优点)
① 扩容能力(Scalable)
Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计的节点中。
② 成本低(Economical)
Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。
③ 高效率(Efficient)
通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。
④ 可靠性(Rellable)
能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖。
副本机制 => 1TB => HDFS有副本机制(默认3副本机制,一个数据会冗余3份)
Hadoop特点:① 扩容能力强 ② 成本低 ③ 高效 ④ 可靠性
有问题:Hadoop支持随机读写么?
答:不是,Hadoop支持随机读(并行读),串行写
5.7.Hadoop国内外应用
不管是国内还是国外,Hadoop最受青睐的行业是互联网领域,可以说互联网公司是Hadoop的主要使用力量。国外来说,Yahoo、Facebook、IBM等公司都大量使用Hadoop集群来支撑业务。比如:Yahoo的Hadoop应用在支持广告系统、用户行为分析、支持Web搜索等。Facebook主要使用Hadoop存储内部日志与多维数据,并以此作为报告、分析和机器学习的数据源。国内来说,BAT、美团、JD、滴滴、字节跳动领头的互联网公司是当仁不让的Hadoop使用者、维护者。比如Ali云梯(14年国内最大Hadoop集群)、百度的日志分析平台、推荐引擎系统等。

国内其他非互联网领域也有不少hadoop的应用,比如:
- 金融行业: 个人征信分析
- 证券行业: 投资模型分析
- 交通行业: 车辆、路况监控分析
- 电信行业: 用户上网行为分析
总之:Hadoop并不会跟某种具体的行业或者某个具体的业务挂钩,它只是一种用来做海量数据分析处理的工具。
5.8.Hadoop不同版本之间的区别
到目前为止,Hadoop软件一共经历过三个阶段,形成了3个大版本:
- Hadoop1.0
- Hadoop2.0
- Hadoop3.0版本
Hadoop1.X架构,只有两个组件:HDFS 和 MapReduce
- HDFS用于完成海量数据的存储服务
- MapReduce用于完成海量数据的计算服务
Hadoop1.X架构图:

☆ 解析1.X架构
HDFS中,一共有3个节点:
① namenode节点(1个节点),负责管理整个HDFS集群,负责元数据的存储(名称、大小、权限、修改时间以及每个文件存储在datanode中的位置),每个元数据大概占用150B
namenode属于内存型应用,所以在部署时,部署namenode节点的机器内存尽量要大一些
② datanode节点(多个节点),负责整个HDFS集群中具体数据的存储。
datanode属于硬盘型应用,所以在部署时,部署datanode节点的机器要求硬盘尽量要大一些
③ secondarynamenode(2nn):非namenode备份,主要负责辅助namenode完成元数据的管理
MapReduce中,一共有两个节点:
MapReduce主要负责任务的计算,来了一个任务,MapReduce要把其分散在多个机器上实现计算操作。
例:求1-10之间,所有数字的累加结果 => MR => 3台机器(1台计算1+2+3;2台计算4+5+6;3台计算7+8+9+10),最终把结果合并
① JobTracker :MapReduce组件的核心,负责接收客户端发送过来的计算任务,以及任务的分配;除此以外还要进行资源的分配与调度。
② TaskTracker:负责处理JobTracker发送过来的任务。
Hadoop1.X架构还有缺点:主要问题集中在JobTracker问题,因为在Hadoop1.X的设计过程中,JobTracker只能是单节点设计(整个集群就只有这一个节点),无法实现高可用,一旦JobTracker出现故障,则整个MapReduce集群将处于瘫痪状态。
☆ 解析2.X 与 3.X架构
Hadoop3.x 在性能上相对于 2.x版本,性能有所提升。Hadoop2.X和3.X都有三大组件:
- HDFS
- MapReduce
- YARN(资源调度器)

很多小伙伴,看到2.X和3.X架构图会很好奇,为什么少了一个MapReduce。特别说明:并没有少,只是MapReduce不是以节点方式出现,而是以程序(代码)方式成为Hadoop的一部分。
Hadoop2.X以及Hadoop3.X版本中,MapReduce已经形成任务形式,作为Hadoop的一部分。相对于Hadoop1.X版本中,新增一个YARN组件(资源调度器)
HDFS没有变:namenode、datanode、secondarynamenode
MapReduce:已经以任务形式存在了
YARN资源调度器(新增):
- resource manager:YARN核心(接收MapReduce等计算任务、资源调度)
- node manager:负责处理resourcemanager以及appmaster分配过来的任务
[面试题] 解析Hadoop高可用架构设计
Hadoop高可用主要用于解决Hadoop集群架构中NameNode和ResourceManager单点故障问题。
- 注意点1:在高可用架构中,HDFS集群是没有SecondaryNamenode节点的。
- 注意点2:高可用就是解决NameNode和ResourceManager单点故障问题,所以有多份
实现原理:
① NameNode可以依靠zookeeper实现故障切换(自动)
② 由于NameNode中存在元数据,所以当activate出现故障时,不仅要进行节点的切换,还要把自身的元数据转移到standby备机
③ 在Hadoop高可用架构中,通过JournalNode集群实现元数据存储,平常,主namenode会定期上传元数据到JournalNode集群,当故障发生时,备namenode会自动下载元数据,从而保障元数据安全


浙公网安备 33010602011771号