Hadoop复习回顾

版权声明:Hualvl 版权所有 https://blog.csdn.net/qq_36499475/article/details/83584533

Hadoop复习回顾

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可分配的内存大小

猜你喜欢

转载自blog.csdn.net/qq_36499475/article/details/83584533
今日推荐