第十二周 数据应用(一)总结
一、内容梳理
大数据概述
大数据技术发展史
1.第一个技术节点,google 发表发表著名的大数据“三驾马车”,分别是分布式文件系统 GFS、大数据分布式计算框架 MapReduce 和 NoSQL 数据库系统 BigTable
2.第二个技术节点,Hadoop(HFDS 和 MapReduce)以及周边产品(Pig、Hive、Sqoop、Flume、Oozie)
3.第三个技术节点,Spark 基于内存的计算框架
4.第四个技术节点,实时流式计算框架 Storm、Flink、Spark Streaming
5.第五个技术节点,NoSQL(HBase、Cassandra)
大数据应用发展史
1.大数据应用的搜索引擎时代
2.大数据应用的数据仓库时代
3.大数据应用的数据挖掘时代
4.大数据应用的机器学习时代
大数据应用领域
1.医学影像智能识别
2.病历大数据智能诊疗
3.AI 外语老师
4.智能解题
5.舆情监控与分析
6.大数据风控
7.新零售
8.无人驾驶
HDFS(分布式存储)
HDFS 系统架构
HDFS 设计目标
1.HDFS 以流式数据访问模式存储超大文件,运行于商用硬件集群上。
超大文件
流式数据访问 : 一次写入多次读取
商用硬件
2.任何一个节点失效,不影响 HDFS 服务
3.HDFS 可以自动完成副本的复制
不适合 HDFS 场景
低延迟的数据访问
大量小文件 (超过 NameNode 的处理能力)
多用户随机写入修改文件
HDFS 关键运行机制(高可用)
一个名字节点和多个数据节点
数据复制(冗余机制)
• 存放的位置(机架感知策略)
故障检测 数据节点
• 心跳包(检测是否宕机)
• 块报告(安全模式下检测)
• 数据完整性检测(校验和比较) 名字节点(日志文件,镜像文件)
空间回收机制
HDFS 如何写文件
HDFS 如何读文件
HDFS 一致性模型
文件创建以后,不保证在 NameNode 立即可见,即使文件刷新并存储,文件长度依 然可能为 0;
当写入数据超过一个块后,新的 reader 可以看见第一个块,reader 不能看见当前正 在写入的块;
HDFS 提供 sync()方法强制缓存与数据节点同步,sync()调用成功后,当前写入数据 对所有 reader 可见且一致;
调用 sync()会导致额外的开销.
副本摆放策略
压缩
减少存储所需的磁盘空间
加速数据在网络和磁盘上的传输
MapReduce(分布式计算)
MapReduce 特性
自动实现分布式并行计算
容错
提供状态监控工具
模型抽象简洁,程序员易用
InputFormat
验证作业的输入的正确性
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 接口决定了在哪里以及怎样持久化作业结果。
Partitioner
什么是 Partitioner
• Mapreduce 通过 Partitioner 对 Key 进行分区,进而把数据按我们自己的需求来分发。
什么情况下使用 Partitioner
• 如果你需要 key 按照自己意愿分发,那么你需要这样的组件。
• 框架默认的 HashPartitioner
• 例如:数据内包含省份,而输出要求每个省份输出一个文件。
主要调度方法
单队列调度
• 特点:FIFO
• 优点:简单
• 缺点:资源利用率低
容量调度(Capacity Scheduler ,Hadoop-0.19.0 )
• 特点:
Ø 多队列,每个队列分配一定系统容量(Guaranteed Capacity)
Ø 空闲资源可以被动态分配给负载重的队列
Ø 支持作业优先级
• 作业选择:
Ø 选择队列:资源回收请求队列优先;最多自由空间队列优先。
Ø 选择作业:按提交时间、优先级排队;检查用户配额;检查内存。
• 优点:
Ø 支持多作业并行执行,提高资源利用率
Ø 动态调整资源分配,提高作业执行效率
• 缺点:
Ø 队列设置和队列选择无法自动进行,用户需要了解大量系统信息
公平调度(Fair Scheduler,Hadoop-0.19.0)
• 目标:
Ø 改善小作业的响应时间
Ø 确保生产性作业的服务水平
• 特点:
Ø 将作业分组——形成作业池(based on a configurable attribute , such as user name, unixgroup,…)
Ø 给每个作业池分配最小共享资源(Minimum map slots, Minimum reduce slots)
Ø 将多余的资源平均分配给每个作业
• 作业选择:
Ø 优先调度资源小于最小共享资源的作业
Ø 选择分配资源与所需资源差距最大的作业
• 优点:
Ø 支持作业分类调度,使不同类型的作业获得不同的资源分配,提高服务质量
Ø 动态调整并行作业数量,充分利用资源
• 缺点:
Ø 不考虑节点的实际负载状态,导致节点负载实际不均衡
JobTracker
内部实现
作业控制
• 作业抽象成三层:作业监控层(JIP),任务控制层(TIP),任务执行层。
• 任务可能会被尝试多次执行,每个任务实例被称作 Task Attempt(TA)
• TA 成功,TIP 会标注该任务成功,所有 TIP 成功,JIP 成功
资源管理
• 根据 TaskTracker 状态信息进行任务分配
容错
JobTracker 失败,那么未完成 Job 失败; 通过 Job 日志,Job 可部分恢复。
TaskTracker
容错
超时
• TaskTracker10 分钟(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。
Yarn(大数据集群资源管理系统)
Yarn 架构
Yarn 工作流程
我们向 Yarn 提交应用程序,包括 MapReduce ApplicationMaster、我们的 MapReduce 程序,以及 MapReduce Application 启动命令。
ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分 配第一个容器,并将 MapReduce ApplicationMaster 分发到这个容器上面,并在容 器里面启动 MapReduce ApplicationMaster。
MapReduce ApplicationMaster 启动后立即向 ResourceManager 进程注册,并为自 己的应用程序申请容器资源。
MapReduce ApplicationMaster 申请到需要的容器后,立即和相应的 NodeManager 进程通信,将用户 MapReduce 程序分发到 NodeManager 进程所在服务器,并在容 器中运行,运行的就是 Map 或者 Reduce 任务。
Map 或者 Reduce 任务在运行期和 MapReduce ApplicationMaster 通信,汇报自己 的运行状态,如果运行结束,MapReduce ApplicationMaster 向 ResourceManager 进程注销并释放所有的容器资源。
资源管理器 HA
Hive(数据仓库)
Hive 架构
Hive 执行流程
操作符(Operator)是 Hive 的小处理单元
每个操作符处理代表 HDFS 操作或 MR 作业
编译器把 Hive SQL 转换成一组操作符
Hive 编译器
Hive Metastore
二、收获和体会
通过本期课程的学习对大数据的技术发展史、应用发展史、应用领域、HDFS(分布式存储)、MapReduce(分布式计算)、Yarn(大数据集群资源管理系统)、Hive(数据仓库)有了系统的认识,相关技术的原理启发了对于分布式系统的一些思考。
三、思考
大数据本质上是一个以分布式技术作为基础结合数据统计和数据科学的技术,学习大技术首先要对分布式系统的特性和常用架构模式了解,对数据库技术有一定了解,可以更好的理解、学习和应用大数据。
评论