Hadoop集群优化

Hadoop集群优化及相关问题

一、 HDFS优化

1. 集群存在的问题

集群存在单点故障隐患。一旦NN或者RM出现故障,整套集群将进入瘫痪状态。

解决方案:

将集群配置为高可用群(HA),在一个集群中配置多台NN和RM。

2. HA中存在多台NN,由谁提供服务

高可用集群中存在多台NN,只将其中一台NN的状态设置为active并对外听过服务。其余的状态为standby,作为服务NN的热备。

3. HA中的元数据管理模式是否发生改变

元数据的管理模式没有发生改变,仍然由fsimageedits管理元数据,不过HA集群中没有配置2NN,所以合并元数据的工作交给standby的NN完成。NN间的数据同步由JournalNode完成。

4. JN如何实现源数据共享

HA集群中,当有请求对元数据进行更改时,active状态的NN会处理请求,想edits文件中追加记录,通过本地的JN向其他standby的NN发送数据。热备收到JN的信息后,会读取本地的JN服务中的最新的编辑日志信息,在内存中生成最新的元数据。如果active状态的NN发生故障,热备将立即作为替补顶替工作。

二、 小文件对集群的影响

1. 小文件对存储空间的影响

因为HDFS中对数据使用元数据管理,而每条元数据的大小都是固定的(约为150字节)。如果集群中存放了大量的小文件,那么NN中存放元数据的空间就会被占满,但是真实存储数据的存储空间就会大量的剩余,对资源的使用十分浪费。并且过多的元数据也会降低寻址索引的速度。

2. 小文件对MR的影响

小文件过多会严重拖累MR程序效率,因为进行Map阶段计算时,会对文件进行切片,而Map是按照文件的数量进行切片。这样就会产生大量的MT任务,导致MT任务的处理时间远小于启动时间,白白的造成资源浪费。

3. 小文件的解决方案
  1. 数据采集时,对小文件或小批数据提前进行聚合,合并成大文件再上传到HDFS。
  2. 处理业务之前,就对小文件提前处理。合并成大文件再进行计算。
  3. 在MapReduce处理时,可采用CombineTextInputFormat提高效率。
  4. 开启uber模式,实现jvm重用。

三、 MR优化

MR阶段容易出现问题的阶段:数据输入、Map姐u但、Reduce阶段、IO传输阶段、数据倾斜问题、参数调优问题

1. 数据输入阶段

Hadoop对小文件是十分敏感的,大量的小文件会大大增加Map阶段的任务数量,因此导致集群的性能降低。

在MR任务开始之前,将大量的小文件合并成一份大文件,通过CombineTextInputFormat实现类完成小文件合并。

2. Map阶段

减少Map阶段的溢写次数(spill),增加溢写空间的内存上限。这样可以减少磁盘的IO次数和压力。

减少文件合并次数(Merge),增大Merge文件的数量,可以减少Merge的合并次数,缩短了MR的处理时间。

在不影响业务逻辑的前提下,使用Combiner对输出结果进行预处理,减少磁盘IO。Combiner是Map阶段输出到Reduce阶段的文件预处理操作。

3. Reduce阶段

优化Reduce阶段,需要合理的分配Map和Reduce的任务数量。

将MR程序设置为,当Map阶段运行到一定程度之后,Reduce开始运行,这样可以减少Reduce的等待时间。

合理的设计Reduce阶段的Buffer,合理利用资源。

需要将多个数据集连接时,尽量避免大量的使用Reduce。

4. IO传输问题

IO传输在MR阶段也需要进行优化。

采用数据压缩算法,按照不同的阶段要求,使用不同的压缩算法对数据进行压缩,以此减少IO传输时间。

使用二进制文件SequenceFile

5. 数据倾斜问题

为什么会出现数据倾斜

数据倾斜分为数据频率倾斜数据大小倾斜

  • 频率倾斜:某一个区域的数据量远大于其他区域的数据量。
  • 大小倾斜:部分记录的大小远大于平均值。

解决方案:

  1. 抽样和范围分区:对原始数据进行抽象,通过抽样得到的结果集对预设分区设置边界值。
  2. 使用自定义分区,将分区规则变得更加合理、高效。
  3. 不影响整体业务逻辑的前提下,使用combiner对Mapper输出到Reducer的结果进行预处理。这样就可以大大的减少数据倾斜。
  4. 存在大小表连接时,使用Map Join ,尽量避免使用Reduce Join。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值