课程说明
项 | 内容 |
---|---|
课程类型 | 视屏课程 |
内容类型 | Hadoop |
课程名称 | Hadoop大数据实战开发 |
地址 | https://edu.csdn.net/course/detail/24831 |
时长 | 2400 |
费用 | 免费 |
学习心得
看了那么多的Hadoop课程,除了linux和hadoop安装配置外,内容基本都集中在HDFS和MapReduce上,还有少量的YARN内容。
我主要关注HDFS和MapReduce,因为学习Hadoop的目的不是为了做运维,也不是为了搭建Hadoop系统,是为了数据处理任务的排错和优化。
当前大数据开发平台的产品越来越成熟,以后除了运维外,大数据的工作基本不怎么涉及这些技术,更多的是数据处理方面的内容,如数据分析、挖掘、可视化等数据处理工作。
受限于资源和对任务稳定性的要求,任务排错优化是必不可少的。
了解了HDFS,就能知道一些数据文件导致的错误的原因,了解了MapReduce的过程,就能知道如何优化任务提升效率。
如小文件过多,会占用大量内存,任务读取数速度越会很慢。合适的压缩方式可以节省存储空间,更重要的是能减少加载数据的速度。任务在运行时,会拆分出多个任务,如果任务间计算量差异较大,最后完成的任务拖累整个任务的运行时长。shuffle过程涉及大量的磁盘读写和网络通信,速度比较慢,是任务优化需要重点关注的一个过程。
课程目录和概要
一.大数据概论
- 码农眼中的大数据,偏向技术,会关注技术细节,谁在使用
- 市场人员眼中的大数据,偏向应用,会关注能做什么,有什么价值
- 大数据核心是大量数据的存储和大量数据的计算
二.集群搭建和Hadoop安装部署(这是运维的工作)
三.HDFS入门
HDFS优点:
- 处理超大文件,因为分布式计算,可以把超大文件分解成小文件运行,几乎无上限(依赖资源)
- 处理非结构化数据
- 流式的数据访问
- 运行于廉价的商用机器集群上,因为容错性强,所以对硬件要求较低,可以使用便宜的机器集群
HDFS局限性:
- 不适合处理低延时数据访问,因为分布式架构组织复杂,效率低(可以使用HBase)
- 无法高效存储大量的小文件,因为架构的特性,组织复杂,文件越多效率越低(可以合并小文件)
- 不支持多用户写入及任务修改文件,因为架构的特性,单个文件是最小单位,不支持文件内的操作
HDFS特性:
- 高容错,可扩展、可配置
- 跨平台
- shell命令接口
- 负载均衡
- Wed界面
HDFS数据块是数据单位
- 一个文件如果超过数据块的限制,将会被切割
- 数据块就像是容器,用来存储数据,按照一定的规范标准
- 避免数据过大,同时一个容易可以存多个数据,避免空间浪费
- 用数据库切割文件,目的是为了方便后续分布式计算、数据备份、数据寻址等操作
NameNode
- 存储元数据
- 元数据保存在内存
- 保存文件、block、datanode之间的关系
DataNode
- 存储文件内容
- 文件内容保存在磁盘
- 维护了block id到datanode本地文件的映射关系
Hadoop的HA
- 之所以很多地方都在提HA,因为这是Hadoop的一个很重要的特性,就是高容错
- 通过冗余的设定,可以在问题发生会还能继续运行系统,预留处理问题的时间,不影响业务
四.HDFS接口
- hadoop fs的命令可以对文件进行基本操作(创建删除目录,上传下载文件)
- FileSystem是java的文件系统接口,可以实现对文件的读、写、查询等操作
- 使用java.net.URL可以从Hadoop URL中读取数据
五.HDFS的运行机制
- 使用RPC实现文件的读取、写入,确保文件一致性
- 创建Standby NameNode实时同步Active NameNode状态确保主节点不可用的时候能及时切换到从节点上
- HDFS Federation 是解决 namenode 内存瓶颈问题的水平横向扩展方案,它们之间相互独立且不需要互相协调,各自分工,管理自己的区域
六.Hadoop I/O流操作
- HDFS会在数据写入、存储、读取时计算验证校验和,以保证数据完整性。如果出现损坏,可以通过复制正确的副本文件恢复
- 压缩数据可以减少存储空间,提升数据传输速度。基于不同的应用场景,可以选择不同的压缩算法(压缩比、解压缩速度、数据是否可拆分)
- 将内存中的对象或数据,转换成字节数组,以便于存储(持久化)和网络传输,这就是序列化,反序列化就是将字节数组转换成内存对象。
- SequenceFile可以用二进制键值对的方式存储数据,节省空间,也可以作为小文件的容器,包装小文件,提高存储和处理效率
七.初识MapReduce编程模型
- MapReduce是一种数据处理的编程模型,支持多种语言,本质是并行运行的,适合处理大规模数据集
- 包含Map和Reduce两部分,map用来处理拆分后的数据,reduce用来对map的处理做汇总
- MapReduce流程:Input(输入)-》Splitting(拆分)-》Mapping(计算)-》Shuffling(混洗)-》Reduceing(合并)-》Final result(输出)
- 所有的Map都完成后,才能进行Reduce阶段,所有的Reduce都完成后,才能输出。如果各map和reduce计算量分布不均,耗时最长任务的就是瓶颈
八.MapReduce运行机制与YARN平台
MapReduce架构
- yarn负责资源分配
- resourceManage负责接受客户端的作业请求
- master.ApplicationMaster负责把计算任务分配给YarnChild,负责监控YarnChild上任务的执行情况
- slave.Yarnchild负责执行具体的计算任务
MapReduce作业的运行过程
- 提交作业(开始)
- 获取作业运行的ID
- 拷贝作业运行时所需要的jar以及其他的资源文件
- 提交作业(真正的提交)
- 初始化作业
- 获取分片数据
- 创建TaskTracker和Jobtracker通信机制
- 获取任务运行的资源
- 开辟内存JVM
- 运行具体的map或者reduce任务
Shuffle和排序
- 为了确保每个reducer的输入都按键排序,map和reduce之间有个排序过程,成为shuffle
- shuffle分为map端shuffle和reduce端shuffle两部分
- map端的shuffle在map完成写数据到内存后,进行分区、排序、合并,然后再写入磁盘
- reduce端的shuffle会拷贝各map的文件合并排序,传给reduce
任务的执行
- 一个分片默认值启动一个任务,如果一个任务运行时间过长,系统会启动推测任务,即重复启动相同的任务,避免任务出问题后再重启速度太慢
YARN的架构
- ResourceManager:负责资源管理、调度和监控,只有一个
- NodeManager:负责单个节点的资源管理和监控,接收AM的命令,像RM汇报
- ApplicationMaster:负责管理单个应用程序,向RM申请资源启动任务,负责任务运行和容错
- Container:资源(CPU、内存等)的抽象,AM获得了eContainer才能启动任务,AM本身就运行在Container中