写点什么

架构师训练营第 12 周学习总结

用户头像
netspecial
关注
发布于: 2020 年 12 月 12 日

12.1 大数据原理概述

  • 大数据技术发展史

  • 今天我们常说的大数据技术,其实起源于 Google 在 2004 年前后发表的三篇论文,也就是我们经常听到的大数据“三驾马车”,分别是分布式文件系统 GFS、大数据分布式计算框架 MapReduce 和 NoSQL 数据库系统 BigTable。

  • Hadoop

  • Hive

  • Yarn - 资源管理框架

  • Spark - 批处理计算,大数据离线计算

  • 大数据流计算,大数据实时计算

  • NoSQL - HBase

  • 大数据应用发展史

  • 大数据应用的搜索引擎时代

  • 大数据应用的数据仓库时代

  • 大数据应用的数据挖掘时代

  • 大数据应用的机器学习时代

  • 大数据应用领域

  • 医学影像智能识别

  • 病历大数据智能诊疗

  • AI 外语老师

  • 智能解题

  • 舆情监控与分析

  • 大数据风控

  • 新零售

  • 无人驾驶

12.2 分布式文件系统 HDFS

  • 常用 RAID 技术

  • HDFS 系统架构

  • HDFS 设计目标

  • HDFS 以流式数据访问模式存储超大文件,运行于商用硬件集群上。

  • 超大文件

  • 流式数据访问

  • 一次写入多次读取

  • 商用硬件

  • 不适合 HDFS 的场景

  • 低延迟的数据访问

  • 大量小文件

  • 超过 NameNode 的处理能力

  • 多用户随机写入修改文件

  • 设计目标

  • 假设:节点失效是常态

  • 理想:

  • 1. 任何一个节点失效,不影响 HDFS 服务

  • 2. HDFS 可以自动完成副本的复制

  • 文件

  • 文件切分成块(默认大小 64M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认 3)

  • NameNode 是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的 DataNode 等等

  • DataNode 在本地文件系统存储文件块数据,以及块数据的校验和可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。

  • HDFS 如何写文件?

  • HDFS 如何读文件?

  • 节点失效是常态

  • DataNode 的磁盘挂了怎么办?

  • DataNode 正常服务

  • 坏掉的磁盘上的数据尽快通知 NameNode

  • DataNode 所在机器挂了怎么办?

  • 问:NameNode 怎么知道 DataNode 挂掉了?

  • 答:Datanode 每 3 秒钟向 NameNode 发送心跳,如果 10 分钟 DataNode 没有向 NameNode 发送心跳,则 NameNode 认为该 DataNode 已经 dead, NameNode 将取出该 DataNode 上对应的 block,对其进行复制。

  • NameNode 挂了怎么办?

  • 持久化元数据

  • 操作日志(edit log)

  • 记录文件创建,删除,修改文件属性等操作

  • Fsimage

  • 包含完整的命名空间

  • File -> Block 的映射关系

  • 文件的属性(ACL, quota, 修改时间等)

  • HDFS 一致性模型

  • 文件创建以后,不保证在 NameNode 立即可见,即使文件刷新并存储,文件长度依然可能为 0;

  • 当写入数据超过一个块后,新的 reader 可以看见第一个块,reader 不能看见当前正在写入的块;

  • HDFS 提供 sync() 方法强制缓存与数据节点同步,sync() 调用成功后,当前写入数据对所有 reader 可见且一致;

  • 调用 sync() 会导致额外的开销.

  • Hadoop 文件系统

  • 文件系统抽象(org.apache.hadoop)

  • JAVA 接口

  • 通过 FileSystem API 读取数据

12.3 大数据计算框架 MapReduce - 编程模型

  • MapReduce:大规模数据处理

  • 处理海量数据(>1TB)

  • 上百上千 CPU 实现并行处理

  • 简单地实现以上目的

  • 移动计算比移动数据更划算

  • 分而治之(Divide and Conquer)

  • WordCount 举例

  • MapReduce 的 WordCount

  • Mapper - map 函数

  • Reducer - reduce 函数

  • Combiner - 在 Map 端进行一次本地的 reduce 操作

  • MapResuce 过程

  • 分区:每个 reduce 对应一个区

  • Shuffle

  • 不同的 Map 输出,相同的 Key 会交给同一个 Reduce 去处理

12.4 大数据计算框架 MapReduce - 架构

  • 适合 MapReduce 的计算类型

  • TopK

  • K-means

  • Bayes

  • SQL

  • 不适合 MapReduce 的计算类型

  • Fibonacci

  • InputFormat

  • 验证作业的输入的正确性

  • 将输入文件切分成逻辑的 InputSplits,一个 InputSplit 将被分配给一个单独的 Mapper task

  • 提供 RecordReader 的实现,这个 RecordReader 会从 InputSplit 中正确读出一条一条的K-V对供 Mapper 使用。

  • FileInputFormat

  • 得到分片的最小值 minSize 和最大值 maxSize,可以通过设置 mapred.min.split.size 和 mapred.max.split.size 来设置;

  • 对于每个输入文件,计算 max(minSize, min(maxSize, blockSize));

  • 如果 minSize<=blockSize<=maxSize,则设为 blockSize。

  • 分片信息<file,start,length,hosts>,通过 hosts 实现 map 本地性。

  • OutputFormat

  • OutputFormt 接口决定了在哪里以及怎样持久化作业结果。

  • 默认的 OutputFormat 就是 TextOutputFormat,它是一种以行分隔,包含制表符界定的键值对的文本文件格式。

  • Partitioner

  • 什么是 Partitioner

  • Mapreduce 通过 Partitioner 对 Key 进行分区,进而把数据按我们自己的需求来分发。

  • 什么情况下使用 Partitioner

  • 如果你需要 key 按照自己意愿分发,那么你需要这样的组件。

  • 框架默认的 HashPartitioner

  • 主要调度方法

  • 单队列调度

  • 特点:FIFO

  • 优点:简单

  • 缺点:资源利用率低

  • 容量调度(Capacity Scheduler ,Hadoop-0.19.0 )

  • 特点:

  • 多队列,每个队列分配一定系统容量(Guaranteed Capacity)

  • 空闲资源可以被动态分配给负载重的队列

  • 支持作业优先级

  • 作业选择:

  • 选择队列:资源回收请求队列优先;最多自由空间队列优先。

  • 选择作业:按提交时间、优先级排队;检查用户配额;检查内存。

  • 优点:

  • 支持多作业并行执行,提高资源利用率

  • 动态调整资源分配,提高作业执行效率

  • 缺点:

  • 队列设置和队列选择无法自动进行,用户需要了解大量系统信息

  • JobTracker 内部实现

  • 作业控制

  • 作业抽象成三层:作业监控层(JIP),任务控制层(TIP),任务执行层。

  • 任务可能会被尝试多次执行,每个任务实例被称作 Task Attempt(TA)

  • TA 成功,TIP 会标注该任务成功,所有 TIP 成功,JIP 成功

  • 资源管理

  • 根据 TaskTracker 状态信息进行任务分配

  • JobTracker 容错

  • JobTracker 失败,那么未完成 Job 失败;

  • 通过 Job 日志,Job 可部分恢复。

  • TaskTracker 容错

  • 超时

  • TaskTracker 10 分钟(mapred.tasktracker.expiry.interval)未汇报心跳,则将其从集群移除

  • 灰名单,黑名单

  • TaskTracker 上部署性能监控脚本

  • 如果性能表现太差,被 JobTacker 暂停调度

  • Task 容错

  • 允许部分 Task 失败

  • 允许失败的任务占比,默认 0,Mapred.max.map.failers.percent,mapred.max.reduce.failures.percent

  • Task 由 TIP 监控,失败任务多次尝试,慢任务启动备份任务

  • 每次都是一个 TA(Task Attempt),最大允许尝试次数:mapred.map.max.attempts,mapred.reduce.max.attempts

  • Record 容错

  • 跳过导致 Task 失败的坏记录

  • K,V 超大,导致 OOM,配置最大长度,超出截断 mapred.linercordreader.maxlength。

  • 异常数据引发程序 bug,task 重试几次后,自动进入 skip mode,跳过导致失败的记录,mapred.skip.attempts.to.start.skipping 。

12.5 大数据集群资源管理系统 Yarn

  • YARN:Yet Another Resource Negotiator

  • 下一代 MapReduce 框架的名称。

  • 不再是一个传统的 MapReduce 框架,甚至与 MapReduce 无关。

  • 一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。

  • Yarn 架构

  • Yarn 的工作流程(MapReduce 为例)

  1. 我们向 Yarn 提交应用程序,包括 MapReduce ApplicationMaster、我们的 MapReduce 程序,以及 MapReduce Application 启动命令。

  2. ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分配第一个容器,并将 MapReduce ApplicationMaster 分发到这个容器上面,并在容器里面启动 MapReduce ApplicationMaster。

  3. MapReduce ApplicationMaster 启动后立即向 ResourceManager 进程注册,并为自己的应用程序申请容器资源。

  4. MapReduce ApplicationMaster 申请到需要的容器后,立即和相应的 NodeManager 进程通信,将用户 MapReduce 程序分发到 NodeManager 进程所在服务器,并在容器中运行,运行的就是 Map 或者 Reduce 任务。

  5. Map 或者 Reduce 任务在运行期和 MapReduce ApplicationMaster 通信,汇报自己的运行状态,如果运行结束,MapReduce ApplicationMaster 向 ResourceManager 进程注销并释放所有的容器资源。


12.6 大数据仓库 Hive

  • Hive 架构

  • Hive 和 Hadoop

  • Hive 编译器

  • Parser - 把 SQL 转换为抽象语法树(AST)

  • SemanOc Analyzer - 把抽象语法树转化为查询块(QB)

  • Logical Plan Generator - 把 QB 转化为逻辑执行计划(Logical Plan)

  • Logical OpOmizer - 重写执行计划,带入更多的优化后的计划。

  • Physical Plan Generator - 将逻辑执行计划转化为物理执行计划(M/R jobs)

  • Physical OpOmizer - 适应性 Join 策略调整

  • Hive Metastore

  • Single User Mode (Default)

  • Multi User Mode


用户头像

netspecial

关注

还未添加个人签名 2011.07.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 12 周学习总结