架构师训练营第 1 期 - 第 12 周学习总结
本周学习了大数据原理、分布式文件系统 HDFS、MapReduce、YARN、Hive
一、大数据原理
大数据技术发展史
大数据技术起源于 Google 的三驾马车,分别是分布式文件系统 GFS、大数据分布式计算框架 MapReduce 和 NoSQL 数据库系统 BigTable。搜索引擎需要网页抓取和构建索引并排序,大量的数据需要存储和计算。Google 的三驾马车是用来解决这个问题的,一个文件系统、一个计算框架、一个数据库系统。
Lucene 项目的创始人 Doug Cutting 根据 Google 的论文实现了类似 GFS 和 MapReduce 的功能,这个就是后来的 Hadoop,主要包括分布式文件系统 HDFS 和大数据计算引擎 MapReduce。
但是使用 MapReduce 进行大数据编程太麻烦,Hive 的出现使得 MapReduce 编程更简单。它支持 SQL 语法,会把 SQL 语句转化成 MapReduce 程序,大大降低了 Hadoop 的使用门槛。
Hadoop 早期,MapReduce 是一个执行引擎,也是一个资源调度框架,服务器集群的资源调度管理由 MapReduce 自己完成。但是这样不利于资源复用,于是有了后来的 YARN,将 MapReduce 的执行引擎和资源调度框架分离开来,YARN 用来专门进行资源调度。
Spark 的出现,相对于性能很差的 MapReduce,立即受到业界的追捧。Spark 没有 MapReduce 执行每一次 Map 和 Reduce 操作需要重启作业的无谓消耗,而且 Spark 主要使用内存作为计算过程中的存储介质,性能非常优越。
像 MapReduce、Spark 这种进行以天为单位的大数据计算,我们一般称为大数据离线计算,因为计算的是历史数据。而 Storm、Flink、Spark Streaming 等计算框架主要用来处理实时产生的数据,一般也叫它们是大数据实时计算。
NoSQL 技术主要用来存储海量的数据和支持大规模的访问,有 HBase、Cassandra 等。
利用大数据处理的主要场景有数据分析、数据挖掘和机器学习。数据分析主要使用 Hive、Spark SQL 等;数据挖掘和机器学习有专门的机器学习框架 TensorFlow、Mahout 以及 MLib 等。
大数据应用发展史
大数据应用的搜索引擎时代 - Google 的搜索引擎根据 PageRank 算法计算网页排名时,就使用了专门的 GFS 文件系统和 MapReduce 计算框架,对海量的网页数据进行处理。
大数据应用的数据仓库时代 - 利用 Hive 直接编写 SQL 对海量的数据比如运行日志、采集数据、数据库数据等进行数据分析,为公司的运营决策提供支持。
大数据应用的数据挖掘时代 - 利用大数据技术,根据数据为每个人打上不同的标签,根据标签组成用户画像,然后有针对性地进行商品推荐等。
大数据应用的机器学习时代 - 利用大数据技术,对历史数据进行分析,找到规律,并预测未来可能发生的事情,这就是机器学习可以实现的事情。
大数据应用领域
医学影像智能识别
病历大数据智能诊疗
AI 外语老师
智能解题
舆情监控与分析
大数据风控
新零售
无人驾驶
二、分布式文件系统 HDFS
HDFS 系统架构
HDFS 设计目标
HDFS 以流式数据访问模式存储超大文件,运行于商用硬件服务器集群上
超大文件
流式数据访问,一次写入多次读取
商用硬件
不适合 HDFS 的场景
低延迟的数据访问
大量小文件
多用户随机写入修改文件
文件
文件在 HDFS 中切分成块,默认小大 64M,以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件声称是指定,默认是 3
NameNode
NameNode 是一个中心服务器,负责管理文件系统的 namespace 以及客户端对文件的访问。NameNode 负责文件元数据的操作,保存了文件对应的数据块的位置。
DataNode
DataNode 会存储实际的文件,文件被分成块存储。DataNode 启动后向 NameNode 注册,心跳是每 3 秒一次,心跳返回结果还带有 NameNode 给 DataNode 的命令比如复制数据块等。如果超过 10 分钟还没有收到 DataNode 的心跳,那节点会标记为不可用。
HDFS 关键运行机制
一个 NameNode 和多个 DataNode
数据复制,数据块有多个副本
故障检测
DataNode 节点
NameNode 节点
空间回收机制
HDFS 一致性模型
文件创建以后,不是立马可见
当数据超过一个数据块后,新的 reader 可以看见第一个块,但是不能看见正在写的块
HDFS 提供 sync 方法强制缓存和数据节点同步,成功后,写入数据对所有 reader 可见
调用 sync 会有额外的开销
三、MapReduce
MapReduce 根据分而治之的思想,把大数据量划分成一个个小数据量进行处理,处理完之后,再对结果进行归并。
MapReduce 特性
自动实现分布式并行计算
容错
提供状态监控工具
模型抽象简洁,程序员易上手
适合 MapReduce 的计算类型
TopK
K-means
Bayes
SQL
不适合的计算类型也很多,比如 Fibonacci
MapReduce 包含以下概念
InputFormat
FileInputFormat
OutputFormat
Partitioner - 根据指定的列作为 key 对数据进行分区,
JobTracker - JobTracker 包括作业控制和资源管理
TaskTracker - TaskTracker 主要是用来运行任务,会有超时机制,如果 TaskTracker10 分钟内没有汇报心跳,那么可以将 TaskTracker 从集群中移出
四、YARN
YARN 架构
包括 2 个部分:
资源管理器
资源管理器负责整个集群的资源调度管理,通常部署在独立的服务器上
资源管理又包括 2 个主要组件:
调度器,它根据应用程序客户端提交的资源申请和当前服务集群的资源状况进行资源分配。内置的调度算法有 Fair Scheduler、Capacity Scheduler 等。
应用程序管理器,负责应用程序的提交、监控应用程序运行状态等。每个应用程序启动后都会先启动自己的 ApplicationMaster,由 ApplicationMaster 根据应用程序的资源需求进一步向资源管理器申请资源,得到资源以后分发应用程序代码,然后进行分布式计算。
节点管理器
节点管理器负责具体服务器上的资源和任务管理,在集群中的每一台服务器上都会启动,基本上跟 HDFS 的 DataNode 进程一起出现
五、Hive
Hive 架构
Hive 执行流程
Operator 是 Hive 中的最小处理单元
每一个 Operator 代表 HDFS 操作或者 MapReduce 作业
编译器把 Hive SQL 转换成一组 Operator
Hive 编译器
做了如下事情:
把 SQL 转换成抽象语法树 AST
把抽象语法树转换成查询块 Query Block
把 QB 转换成逻辑执行计划 Logical Plan
重写执行计划,带入更多的优化后的计划
将逻辑执行计划转换成物理执行计划 M/R jobs
适应性 Join 策略调整
Hive Metastore
Hive Metastore 就是一个数据库,默认使用 derby,可以配置成其他数据库比如 mysql,保存了 Hive 表结构的一些信息,Hive Metastore 进行元数据管理。
评论