课程说明
项 | 内容 |
---|---|
课程类型 | 视屏课程 |
内容类型 | Hadoop |
课程名称 | hadoop从初级到高手 |
地址 | https://edu.youkuaiyun.com/course/detail/6841 |
时长 | 1500 |
费用 | 免费 |
学习心得
这个视频课程讲的非常详细,先把课程内容结构列出,再用流程图的方式讲解过程细节,再进行实际编码操作,最后验证数据,总结回顾。
因为我最主要的是了解Hadoop的结构、原理、过程。并不需要了解Hadoop的搭建、配置、MapReduce的编程,所以跳过的比较多。课程1500分钟,双倍速度播放,一共用了大概5个小时近300分钟的时间。虽然没有上机操作,但收获还是很多的。
- 更清楚了Hadoop存储、计算、调度之间的关系,HDFS不只是存储,更重要的工作是文件管理,自动实现分布式的文件读、写、存、备份、容错等功能
- 理解了MapReduce计算的完整过程,这有利于以后数据处理任务开发时的排错和优化
- 了解了数据处理中常见的数据倾斜问题发生的原理和处理方式
- 终于知道了为什么都说Hadoop扩展性强,成本低,易管理,高可用,强容错。通过把文件、存储甚至是计算资源切分成更小单位后重组的方式,实现了部分变更不影响整体,避免了部分问题引发全面崩溃,实现了部分新增扩展整体资源上限的能力。这就像是把原先的一根链条变成了一张大网,链条任意缓解断裂,整个链条就断裂了。但一张网的某些节点断裂,并不会太影响这张网的作用。能这样做,也是因为资源充足,可以冗余备份。
课程目录和概要
一.Hadoop的部署和配置
1.Hadoop组成
- Common
- HDFS(分布式文件系统)
- MapReduce(MR编程模型)
- YARN(资源调度框架)
2.Hadoop的部署模式
- Local(本地)
- Pseudo(伪分布式)
- Full(完全分布式)
3.Hadoop的管理
- 配额管理(目录配额/空间配额)
- 快照管理(记录的是数据的差异)
- 镜像管理(记录的是复制的数据)
4.Hadoop数据写入流程剖析
- client联系Namenode
- 数据先写入client的缓冲区
- 缓冲区有两个队列
- send是发送队列(数据发送后会进入ack队列)
- ack是确认队列(收到消息的回执会删除数据)
- 通过packet(64K)的方式发送,内部有chunk(512b+4b)
- 通过pipeline,写入dn1后,自动写入dn2和dn3
5.各种压缩算法效能评测
- 如何在HDFS中进行数据压缩以实现高效存储?(这篇文章写得更详细)
- http://blog.itpub.net/31545816/viewspace-2215281/
二.MapReduce的编程
1.Map负责变换(对数据切分转换为kv格式)
- 输出的数据是kv格式
- Map的数量取决于split的结果
2.Reduce负责聚合(对kv数据按k进行聚合)
- Map的输出是Reduce的输入
- 输入输出的数据都是kv格式
- Reduce的数量可以自行指定
3.Shuffle负责混洗(核心机制:数据分区,排序,局部聚合,缓存,拉取,再合并 排序)
- Hadoop学习之路(二十三)MapReduce中的shuffle详解(这篇文章写得更详细)
- https://www.cnblogs.com/qingyunzong/p/8615024.html
- Map和Reduce中间有Shuffle的过程(混洗)
三.Map和Reduce详解
1.排序
- 部分排序(Map输出的数据在单个Reduce里基于key有序)
- 全排序(所有Reduce的key都有序)
- 二次排序(Reduce里的key和value都有序)
2.连接查询(内连接,外连接,全连接)
- Map端连接(数据到达Map处理函数之前进行合并,效率远高于Reduce端连接,适合一大一小表可以都加载到内存中)
- Reduce端连接(通过二次排序,所有数据都要经过Shuffle,非常消耗资源,能解决两个大表的问题)
3.数据倾斜(大量的数据聚集在少数几个节点运算)
- Map较少产生倾斜,Reduce的倾斜主要是经过hashpartitioner后大部分数落入了少数几个Reduce中
- 硬倾斜:大量数据的key相同,落入到相同的Redduce中
- 软倾斜:输入的key不同,经过分组计算落入到了相同的Reduce中
4.数据倾斜解决方法
- 重新设置key,可解决硬倾斜
- 重新设计分区类(放弃hash分区,使用随机分区)
四.MapReduce全流程详解
1.InputFormat(输入)
- getSplits()
- createReader()
- isSplits()
2.RecordReader(阅读器)
- nextKV()
3.Map
- run()
- setup()
- loop:map
- cleanup()
- Partitioner
- combiner
4.Reduce
- shot:sortsortComparator(key - value)
- group:groupComparator
- run()
- setup
- loop:reduce
- clean()
5.OutputFormat
- getRecordWriter()
6.Writer
- write(key,value)
五.Hadoop的高可用(HA)
- Hadoop的HA(高可用)实现方式就是 冗余+故障自动转移
- 异地多活,一个出故障了,立即切换另一个,两个同时出故障几率太小