Hadoop EC 踩坑 :data block 缺失导致的 HDFS 传输速率下降

环境:hadoop-3.0.2 + 11 机集群 + RS-6-3-1024K 的EC策略

状况:某天,往 HDFS 上日常 put 业务数据时,发现传输速率严重下降

分析:

  • 检查集群发现,在之前的传输中,发生过个别 datanode 临时不可用的状况。
  • 而由于 hadoop EC 机制,当失效 datanode 小于容忍值 (这里是3),put 等传输任务仍然成功。但 hadoop 当时会报错,用于提示程序员,这个报错不会影响当此传输任务,故 put 等传输请求会返回成功。然后,缺失的 data block 会在出发 EC 恢复机制时被恢复。
  • 缺失的 data block 何时恢复?EC恢复的触发机制是低优先的:
    • 首先,恢复非常吃CPU和带宽,EC policy 引用的机器越多,这种消耗越大,因此,恢复任务会被执行于机器不忙碌的时候。
    • 然后,据我发现,EC恢复机制的主动触发有两种,
      • A:碰它一下,比如 get 那个文件,那么这个文件的缺失的 data block 会立即恢复,但是,并不会立即全部恢复,实验只会立即恢复1个缺失的data block,剩下的会被安排在接下来的时间内陆续恢复,这个时间无法控制。之前说过,EC恢复消耗大,会被安排在机器空闲时。
      • B:强制全部立即恢复,在重启HDFS时执行。虽然强效,但实际HDFS很少选择重启,故这个方法选择性采用。

操作:尝试重启了HDFS,强制立即全部恢复所有丢失数据块。

结果:HDFS传输速率恢复。

结论:

  • 无论在 hadoop ec 的官方文档中,还是在google等社区帖子中,都没有提到过EC的这种BUG。
  • 所以,本文提到的这个HDFS速率 BUG 和 EC 策略的相关性待进一步考究,先mark在这里。
  • 追究根本,还是 EC 对于恢复机制的高消耗带来的隐患,所以采纳 hadoop 的建议,要再一次考虑引入 ISL 编码的必要性。

  

原文地址:https://www.cnblogs.com/PigeonNoir/p/9226759.html

时间: 2024-08-04 20:26:13

Hadoop EC 踩坑 :data block 缺失导致的 HDFS 传输速率下降的相关文章

Hadoop编程踩坑

Hadoop踩坑 在hadoop所有组件编程中,遇到在Windows下运行程序出现 1 java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. 2 at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:356) 3 at org.apache.hadoop.util.Shell.getWinU

Ubuntu搭建Hadoop的踩坑之旅(三)

之前的两篇文章介绍了如何从0开始到搭建好带有JDK的Ubuntu的过程,本来这篇文章是打算介绍搭建伪分布式集群的.但是后来想想反正伪分布式和完全分布式差不多,所幸直接介绍完全分布式了. 如果你想自己搭建伪分布式玩的话,参考:在VMware下安装Ubuntu并部署Hadoop1.2.1分布式环境 - CSDN博客 这一篇主要参考这篇文章:Hadoop2.6.0安装 - 集群(搭建的过程中没截图,大家可以到原博客看) 一.所需的环境和软件:(以下是我们的环境,仅供参考) 1. 操作系统:Window

hadoop安装踩坑

切记!!!!! 没有比官网教程更详细,更靠谱的教程!!!!! 其他的基本都是官网的翻译,但是官网的教程是实时更新的,要是不注意版本,坑根本就踩不完!!! 附上官网部署教程: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html 单节点的安装只需要关注两个点: 1.linux安装的java版本,各个版本的hadoop对java版本是要求的,具体信息如下: https://

HADOOP HA 踩坑 - 所有 namenode 都是standby

报错: 无明显报错 状况: 所有namenode都是standby,即ZK服务未生效 尝试一:手动强制转化某个namenode为active 操作:在某台namenode上,执行 hdfs haadmin -transitionToActive --forcemanual nn1 (nn1是你的某台nameservice-id) 结果:nn1被成功转为active.但是在stop-dfs.sh后再一次start-dfs.sh后,所有namenode仍然都是standby 结论:果然因该是ZK的问

[踩坑] MySQL max_allowed_packet导致sql文件source异常问题

踩坑: 今天通过mysqldump导出数据,在目标机器上开个screen执行source导入数据.过一会看了下,发现居然导入报错了.报错提示如下: 刚开始还以为是sql_mode设置的问题,改了sql_mode为宽松模式,再次导入还是报错. 网上查了下,http://blog.goyiyo.com/archives/1535 set global max_allowed_packet=524288000;    设置为512MB 退出mysql,然后再登进去source即可. 究其原因,是因为之

Spark踩坑记——数据库(Hbase+Mysql)转

转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streaming进行实时的数据流处理时,我需要将计算好的数据更新到hbase和mysql中,所以本文对spark操作hbase和mysql的内容进行总结,并且对自己踩到的一些坑进行记录. Spark Streaming持久化设计

[转]Spark 踩坑记:数据库(Hbase+Mysql)

https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值. 最近一个实时消费者处理任务,在使用spark streaming进行实时的数据流处理时,我需要将计算好的数据更新到hbase和mysql中,所以本文对spark操作hbase和mysql的内容进行总结,并且对自己

Android开发在路上:少去踩坑,多走捷径【转】

作者:gzjay,腾讯MIG无线产品部 高级工程师 最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享. 1.目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2.目前, 开发Android APP时,需要考虑的分辨率有哪些? 这两个问题可以合起来回答的. http://developer.android.com/about/dashboards/index.html 源自Google Play的数据,每月都会进行upd

ELK之ES2.4.1双实例平滑升级至5.2.1踩坑并supervisor管理记

ES老集群用的2.4.1版本,跑的比较好就一直没动,最近看资料ES5.X已经稳定,并且性能有较大提升,心里就发痒了,但由于业务要保持高可以用的属性,就得想一个平滑升级的方案,最后想到了多实例过度的办法,5.X版本网上介绍配置变化较大,也做好了踩坑准备,确定好要升级后,立刻动手. 一.对应升级改造方案 使用端口9220和9330 安装并配置好新的ES5.2.1实例-->关掉logstash并将ES2.4.1实例堆栈调小重启(kafka保留3个小时日志所以不会丢失)-->启动ES5.2.1并将lo