《Hadoop篇》------HDFS与MapReduce

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

一、HDFS角色职责总结

二、CheckPoint机制

三、Mapreduce序列化

四、Mapper

4.1、官方介绍

4.2、Split计算

4.3、Split和block对应关系

4.4、启发式算法

五、MapTask整体的流程

六、压缩算法

6.1、压缩算法适用场景

6.2、压缩算法选择 

6.2.1、Gzip压缩

6.2.2、Bzips压缩

6.2.3、Lzo压缩

七、ResourceManager

八、Yarn角色

九、任务调度策略

9.1、FIFO Scheduler先进先出调度器

9.2、Capacity Scheduler容量调度器

9.3、Fair Scheduler公平调度器


一、HDFS角色职责总结

Namenode接受客户端的请求维护整个HDFS集群目录树元数据信息的存储由namenode负责

Datanode主要是负责数据块的存储定期向namenode汇报block

SecondaryNamenodeSecondaryNamenode不是第二个namenode当namenode宕机时不能由SecondaryNamenode顶替

二、CheckPoint机制

dfs.namenode.checkpoint.period=3600  #两次checkpoint的时间间隔

dfs.namenode.checkpoint.txns=1000000  #两次checkpoint之间最大的操作记录

dfs.namenode.checkpoint.check.period=60  #检测的触发条件是否满足60s

dfs.namenode.checkpoint.max-retries=3  #最大的重试次数

上面配置只要有一个满足条件就会触发checkpoint机制

三、Mapreduce序列化

“将一个对象编码成一个字节流”称为序列化该对象Serializing相反的处理过程称为反序列化Deserializing。

自定义bean对象想要序列化传输必须实现序列化接口注意反序列化的顺序和序列化的顺序完全一致

四、Mapper

4.1、官方介绍

one map task for each InputSpilt

每个切片都是由一个mapTask处理

4.2、Split计算

切片数量决定了MapTask的数量

4.3、Split和block对应关系

假设切片是跨block的也就是说maptask读取数据的时候会出现以下几种情况

1、最理想的情况有数据低负载最佳本地化读取

2、折中的情况没数据本节点没有所需的数据这个时候就需要跨节点读取这个所跨的节点是同一机架的换句话说如果本节点没有数据你就需要看同一个机架的其他节点是否有需要的数据

3、最差的情况带宽占有率会很高尽量避免跨机架不要跨数据中心如果同一个机架没有所需要的数据那只能跨机架读取其他节点的数据

4.4、启发式算法

假设Hadoop的拓扑结构如下

1、HDFS的block3个

2、某个InputSplit包含3个block大小分别是100150和75

3、准备4个机架每个机架2个节点数据的分布如下图所示

 按机架排序rack2>rack1>rack3>rack4

按机架内部的节点的数据量排rack2:node4>node3(rack1:node1>node2)

得出node4>node3>node1>node2....

最佳的host列表{node4node3node1}

结论当使用基于FileInputFormat实现InputFormat的时候为了提高mapTask本地化读取数据应该尽量使得InputSplit的大小和block相等。

五、MapTask整体的流程

1、Read阶段MapTask通过用户编写的RecodReader去读取数据从输入的InputSplit中解析出key/value键值对

2、Map阶段这个阶段将解析的key/value交给用户编写的map()函数处理并产生一系列的key/value键值对

3、Collect阶段当用户编写的map()函数处理完成之后会调用OutputCollector.collect()输出结果在该函数内部它会生成key/value分片并且写入到一个环形缓冲区将来缓冲区的数据达到溢出值内存中的数据就会刷入到磁盘。

4、Spill阶段溢出阶段当环形缓冲区满了数据溢出到磁盘生成一些小文件。数据写入磁盘之前先要对数据进行一次本地化的排序操作分区操作并且必要的时候还要对数据进行合并、压缩操作

5、Combine阶段当所有的数据处理完成之后mapTask对所有的临时文件进行一次合并以确保最终只会生成一个数据文件。

六、压缩算法

压缩可以说是mapreduce一种优化的策略

6.1、压缩算法适用场景

1、数据进入到map端的时候可以进行压缩

2、Map端的数据传输到reduce端的时候可以进行压缩

3、Reduce端将数据输出的时候可以选择压缩

6.2、压缩算法选择 

1、Bzip2压缩率是最高的这种压缩算法比较适合IO密集型的Job

2、在运算密集型的job的时候优先考虑lzo

6.2.1、Gzip压缩

优点压缩比比较高而且解压和压缩速度也比较快hadoop本身也是支持这种压缩算法在应用处理当中gzip格式文件就和处理普通文件是一样的大部分的Linux系统都是自带gzip命令使用方便

缺点不支持切分split逻辑切分

应用场景当你的文件压缩之后可以到或者是小于等于一个blocksize大小blocksize可以考虑使用它或者说如果你的文件用gzip压缩之后文件大小在128M我们就可以考虑使用这个gzip算法

6.2.2、Bzips压缩

优点支持split具有很高的压缩比hadoop本身也是支持这种算法在linux系统里面自带bzip2使用方便。

缺点压缩速度和解压速度都是很慢的不支持native本地

应用场景使用的场景针对那种速度要求不高、对压缩比要求高、对冷数据进行持久化存储的场景即IO密集型场景

6.2.3、Lzo压缩

优点压缩、解压缩速度都是比较快的压缩率不会很高。本身不支持split给Lzo压缩的文件加上索引就支持分片了它是hadoop当中较为流行的压缩格式注意的是linux服务器默认是不支持这个压缩格式需要单独的安装

缺点压缩比比gzip更低hadoo本身不支持这个格式需要额外的安装。代码还需要做特殊处理

应用场景用于这种运算密集型的job

七、ResourceManager

ResourceManager有两个重要的组件SchedulerApplication Manager

八、Yarn角色

Yarn结构里的核心角色ResourceManagerApplicationNodemanager

九、任务调度策略

9.1、FIFO Scheduler先进先出调度器

先进先出的策略简单来说按照提交作业的先后顺序运行。Hadoop1.x默认的资源调度器是FIFO的方式。它按照作业的优先级高低再按照到达时间的先后选择被执行的作业

9.2、Capacity Scheduler容量调度器

支持多个队列每个队列可配置一定的资源量每个队列采用FIFO调度策略为了防止同一个用户的作业独占队列中的资源该调度器会对同一用户提交的作业所占资源量进行限定

9.3、Fair Scheduler公平调度器

公平调度是一种赋予作业job资源的方法它的目的是让所有的作业随着时间的推移都能平均的获得等同的共享资源。所有的job具有相同的资源当单独一个作业在运行时它将使用整个集群。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Hadoop