1. HDFS分布式文件存储系统
1.1 HDFS的架构
- 主从架构,可以配置主节点的主备架构
- 冷备份 热备份
- HDFS的元数据:
- fsimage:元数据镜像文件,较为完整的一份元数据
- edits:元数据的操作日志(一小部分元数据,用作缓冲)
- namenode内存中存储的是:fsimage+edits
- SecondaryNameNdoe:定时定量合并fsimage和edits
1.2 HDFS写数据流程
- 关键字:RPC 备份机制 机架感知 ACK消息不丢失机制 pipeline管道 packet(64KB) block块
1.3 HDFS读数据流程
- 关键字:RPC block块 集群拓扑结构(最近原则) Socker-Stream流 read方法读文件
1.4 HDFS中的JavaAPI
- HDFS上文件的增删改查
1.5 案例
- Shell定时采集数据上传到HDFS
2. MapReduce分布式计算框架
2.1 InputFormat
- 所有的文件读入到MapReduce中进行处理前都需要继承InputFormat类,该类对读入的文件进行逻辑切分为块,默认每个块的大小是一个block块的大小,也就是128MB
- 若input的文件非常大,可将HDFS中的block块的大小设置为256MB或512MB等
- 注:若切分后最后剩余的文件大小<=128* 1.1=140.8MB,则该文件将会被规划成一个块而不是两个块
2.2 MapTask端的工作机制
- 按行读取
- 默认使用HashPartitioner对K2进行分区
- 将分区后的结果写入buffer进行初步局部排序(环型缓冲区,默认100MB,阈值为80%,溢出将写入到磁盘)
- 当MapTask任务结束时,将溢出的所有小文件合并(merge)成一个中间数据文件,其中包含多个分区及分区中的数据
2.3 shuffle的过程
- MapTask产生输出开始到ReduceTask取得数据作为输入之前开始的阶段
- Collect阶段:将读取的数据写入环型缓冲区
- Spill阶段:排序-溢出-写入磁盘
- Merge阶段:一个MapTask只能产生一个中间数据文件
- Copy阶段:ReduceTask到中间数据文件中领取数据自己的那一部分
- Merge阶段:ReduceTask对拉取过来的文件进行合并
- Sort阶段:对合并后的文件进行整体排序
- 可设置shuffle中的缓冲区的大小以提高MapReduce的执行效率
- 数据压缩机制:
- 利用代码实现在map阶段的数据压缩(推荐使用snappy压缩算法)
- 配置mapred-site.xml对mapreduce全局数据进行压缩(snappy)
- 优点:节约磁盘空间,加速数据在磁盘和网络中的传输
2.4 ReduceTask端的工作机制
- 拉取MapReduce阶段产生的中间数据文件中属于自己分区的那一块
- 合并拉取的文件,排序…
- 编辑业务逻辑,实现特定的需求
- 若处理的数据分布不均匀,在Reduce阶段可能产生数据倾斜
- ReduceTask的数量可以手动直接设置以提高并行处理的速度
- 每个Task的运行时间至少一分钟
2.5 OutputFormat
- 主要用于描述输出数据的格式
- 分为:行存储 和 列存储
2.6 特殊的组件:partitioner
- 主要作用是将K2/V2分片,每个reducer对应一个分片
- 计算key.hashCode%(reducer个数)
- 好处:可以随机地将整个key空间平均分发给每个reducer,同时确保不同的mapper产生的相同的key能被分发到同一个reducer
- 自定义partitioner需要注意:必须提前知道分区的个数,确保map端和reduce端的数目一致
2.7 特殊的组件:combine
- 是MapReuce的一种优化手段,可减少map-reduce间的数据传输,提高IO性能
- 作用是将map端的输出结果先做一次合并
- combiner是MR程序中Mapper和Reducer之外的一种组件
- combiner继承自Reducer
- combiner在map所在的节点运行
- 一般来说,combiner和reducer做的是同样的事情
2.8 案例一:单词计数,WordCount
- 需要对谁排序就把谁定义成K2
2.9 案例二:手机上网流量统计,用MR进行排序,求出topN
- SQL中的开窗函数
2.10 案例三:多表关联查询
- map端的join算法
- 原理阐述:适用于小表join大表的情况,把小表发送到map中,这样map就可以对读到的大表中的数据进行join并输出最终结果,可大大提高join操作的并发度,加快处理速度
- reduce端的join算法
- 实现机制:通过将关联的条件作为map输出的key,将两张表中满足join条件的数据并携带数据来源的文件信息,发往同一个ReduceTask,在reduce中进行数据的串联
2.11 案例四:社交粉丝数据分析,求两个人的共同好友
- 注意K2的选取和自定义逻辑的分组
- 采用倒排索引的方法
3. Yarn分布式资源调度框架
3.1 干什么的?
- 接收用户的任务请求
- 分配,监控和管理计算机中的硬件资源
3.2 Yarn的工作流程
- client–resourcemanager–container–ApplicationMaster–RM–container–nodemanager…
3.3 Yarn的调度器
- FIFO Scheduler:先进先出队列
- Capacity Scheduler:为每个组织分配专门的资源,Apache版本采用
- Fair Scheduler:公平调度器,动态分配资源,CDH版本采用
3.4 Yarn常用参数的配置
- 为每个container分配最小/最大内存
- 为每个container分配的最小/最大虚拟内核个数
- NodeManager可分配的内存大小