HDFS 读写异常容错机制与调优技巧

5 篇文章 2 订阅
订阅专栏

前言

大家好,我是林哥

在上一篇,HDFS 底层交换原理,看这篇就够了!文章中,已经聊了 HDFS 高可用架构、HDFS 源码级读写流程及可用性问题。今天接着上篇,继续跟大家聊聊 HDFS 读写失败场景下的容错机制和 HDFS 调优的一些技巧,希望给大家带来一点点启发!本篇文章概览如下:

文章概览

1.HDFS 读写异常的容错机制

Hadoop 的设计理念就是部署在廉价的机器上,因此在容错方面做了周全的考虑,主要故障包括 DataNode 宕机,网络故障和数据损坏。本文介绍的容错机制只考虑 HDFS 读写异常场景。

1.1 读数据异常场景处理

HDFS读流程

我们通过上图,简单回顾下 HDFS 的读数据流程,先打开文件,再调用read()方法读取数据。

read()方法中,会调readWithStrategy()方法读取DataNode存储的数据。

  • readWithStrategy( )方法
readWithStrategy

readWithStrategy()方法中使用 pos 控制数据的读取位置。

  • 首先,调用 blockSeekTo()方法获取一个保存了目标数据块的 DataNode
  • 其次,再调用 readBuffer() 方法从获取到的 DataNode中读取数据

readWithStrategy()方法实现可知,读失败场景比较简单。从上述代码 48 - 59 行可知,如果发生异常:

  1. 先把当前的异常节点放入 HashMap 中,然后 DFSIputStream 会尝试重新去连接列表里的下一个 DataNode ,默认重试 2 次。
  2. 同时, DFSInputStream 还会对获取到的数据进行 checkSums 核查,如果与存储在 NameNode 的校验和不一致,说明数据块损坏, DFSInputStream 就会试图从另一个拥有备份的 DataNode 中去读取数据。
  3. 最后, NameNode 会去同步异常数据块。

1.2 写数据异常场景处理

写流程

通过上图,简单回顾下写数据流程,客户端调用creat()方法,通过 RPC 与 NameNode 通信,请求创建一个文件,之后调用write,向数据流管道(Pipeline)写入数据。

写数据过程中以数据包(Packet)为单位,进行一个一个传输,数据包发送流程如下图:

数据包发送流程图
数据包发送流程图

当构建完 DFSOutputStream 输出流时,客户端调用write()方法把数据包写入 dataQueue 队列,在将数据包发送到 DataNode 之前,DataStreamer会向 NameNode 申请分配一个新的数据块

然后,建立写这个数据块的数据流管道(pipeline),之后DataStreamer 会从 dataQueue 队列取出数据包,通过 pipeline 依次发送给各个 DataNode。

每个数据包(packet)都有对应的序列号,当一个数据块中所有的数据包都发送完毕,并且都得到了 ack 消息确认后,PacketProcessor 会将该数据包移出 ackQueue,之后,Datastreamer会将当前数据块的 pipeline 关闭。

通过不断循环上述过程,直到该文件(一个文件会被切分为多个Block)的所有数据块都写完成。 在数据块发送过程中,如果某台DataNode宕机,HDFS主要会做一下容错:

  1. 首先 pipiline 被关闭, ackQueue队列中等待确认的 packet 会被放入数据队列的起始位置不再发送,以防止在宕机的节点的下游节点再丢失数据。
  2. 然后,存储在正常的 DataNode 上的 Block 块会被指定一个新的标识,并将该标识传递给 NameNode ,以便故障 DataNode 在恢复后,就可以删除自己存储的那部分已经失效的数据块。
  3. 宕机节点会从数据流管道移除,剩下的 2 个好的 DataNode 会组成一个新的 Pipeline ,剩下的 Block 的数据包会继续写入新的 pipeline 中。
  4. 最后,在写流程结束后, NameNode 发现节点宕机,导致部分 Block 块的备份数小于规定的备份数,此时 NameNode 会安排节点的备份数满足 dfs.replication 的配置要求。

以上过程,针对客户端是透明的。

2. HDFS 调优技巧

2.1 HDFS 小文件优化方法

HDFS 集群中 NameNode 负责存储数据块的元数据,其中包括文件名、副本数、文件的BlockId、以及Block 所在的服务器等信息,这个元数据的大小大约为 150 byte。

对于元数据来说,不管实际文件是大还是小,其大小始终在 150 byte 左右。如果 HDFS 存储了大量的小文件,会产生很多的元数据文件,这样便会导致NameNode内存消耗过大;此外,元数据文件过多,使得寻址时间大于数据读写时间,这样显得很低效。

  • 数据源头解决:依赖于 HDFS 存储的数据写入前,通过 SequenceFile 将小文件或小批数据合成大文件再上传到 HDFS 上。
  • 事后解决:使用 Hadoop Archive 归档命令,将已经存储在 HDFS 上的多个小文件打包成一个 HAR 文件,即将小文件合并成大文件。

2.2 存储优化

纠删码存储

Hadoop 3.X 之前,数据默认以 3 副本机制存储,这样虽然提高了数据的可靠性,但所带来的是 200% 的存储开销。对于 I/O 频率较低的冷热数据集,在正常操作期间很少访问额外的块副本,但仍然消耗与第一个副本相同的资源量。

因此,一个自然的改进就是使用纠删码代替复制,它保证了相同级别的数据可靠性,存储空间却更少。它是将一个文件拆分成一些数据单元和一些校验单元。具体数据单元与校验单元的配比是根据纠删码策略确定的。

  • RS-3-2-1024K : 使用 RS 编码,每 3 个数据单元,生成 2 个校验单元,共 5 个单元,也就是说,这 5 个单元中,只要有任意的 3 个单元存在(无论是数据单元还是校验单元),就可以通过计算得到原始数据。每个单元的大小是 1024k。

此外,还有RS-10-4-1024k、RS-6-3-1024k、RS-LEGACY-6-3-1024k、XOR-2-1-1024k 这四种策略。所有的纠删码策略,只能在目录上设置。

默认情况下,所有内建的 EC 策略是不可用的,可以以下通过两种方式开启对纠删码策略的支持除:

  1. 通过以下配置项,指定想要使用的 EC 策略。

  2. 开发人员还可以基于集群规模和期望的容错性,使用命令行的方式:hdfs ec -enablePolicy -policy [policyName],在集群上开启对某种纠删码策略的支持,policyName为纠删码策略名。

    之后,开发人员便可以通过 hdfs ec -setPolicy -path [directoryName] -policy [policyName] 命令,实现对某个文件目录指定使用上述开启的 EC 策略了。如果缺少 [policyName] 这个参数,集群会使用系统的默认值:RS-6-3-1024k

异构存储

异构存储是另外一种存储优化,主要解决不同的数据,存储在不同类型的硬盘中,以获取最佳性能。

  1. 存储类型:

    RAM_DISK:存储在内存镜像文件系统;

    SSD:SSD 固态硬盘

    DISK:普通磁盘存储,在 HDFS 中,如果没有主动声明数据目录存储类型,默认都是 DISK

    ARCHIVE: 这个没有特指哪种存储介质,主要指的是计算能力比较弱而存储密度比较高的存储介质,用来解决数据量的容量扩增的问题,一般用于归档

  2. 存储策略:

Lazy_Persist:策略 ID 为15,它只有一个副本保存在内存中,其余副本都保存在磁盘中。

ALL_SSD:策略 ID 为12,其所有副本数都存在固态硬盘中。

One_SSD:策略 ID 为10,它有一个副本保存在固态,其余副本都保存在磁盘中

HOT(default):策略 ID 为7,所有副本都保存在磁盘中,这是默认的存储策略。

Warm:策略 ID 为5,一个副本在磁盘,其余副本都保存在归档存储上。

Cold:策略 ID 为2,所有副本都保存在归档存储上。

2.3 HDFS 调优参数

  1. NameNode 内存生产配置

    HADOOP_NAMENODE_OPTS=-Xmx102400m ,Hadoop 3.x 中,其内存是动态分配的。

    cloudera 给出的经验值NameNode 最小值 1G,每增加 100 万个 block 增加 1G 值;

    DataNode 最小值 4G,一个 DataNode 上的副本总数低于 400 万,调为 4G,超 400 万,每增加 100 万,增加 1G。

  2. NameNode 同时与 DataNode 通信的线程数,即心跳并发配置(hdfs-site.xml)

    企业经验dfs.namenode.handler.count=20 × 𝑙𝑜𝑔 𝑒^𝐶𝑙𝑢𝑠𝑡𝑒𝑟 𝑆𝑖𝑧𝑒,比如集群规模(DataNode 台 数)为 3 台时,此参数设置为 21

  3. DataNode 进行文件传输时最大线程数(hdfs-site.xml)

  4. DataNode 的最大连接数

    对于 DataNode 来说,如同 Linux 上的文件句柄的限制,当 DataNode上面的连接数超过配置中的设置时, DataNode就会拒绝连接,可以将其修改设置为65536。

  5. Hadoop 的缓冲区大小(core-site.xml)

  6. 开启回收站工作机制(core-sit.xml)

    开启回收站功能,可以将删除的文件在不超时的情况下恢复,起到防止误操作。

    注意:

    1. 如果是在网页删除的文件,不会进入回收站
    2. 要求: fs.trash.checkpoint.interval <= fs.trash.interval

3. 高频面试题

  1. 客户端在写 DataNode 的过程中, DataNode 宕机是否对写有影响?
  2. 是否要完成所有目标 DataNode 节点的写入,才算一次写成功操作?
  3. 读的过程如何保证数据没有被损坏,如果损坏如何处理?
  4. 交互过程数据校验的基本单位是什么?
  5. 数据写入各个 DataNode 时如何保证数据一致性?
  6. 短路读机制
  7. 短路读机制是如何保证文件的安全性的?

参考资料

[1]https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html

在这里插入图片描述

HDFS——文件中的异常处理
hncscwc的博客
08-11 2380
记得看过一本书,里面是这么的,软件开发中的二八原则,80%的时间运行的是正常流程,20%的时间是异常流程。而实际代码中,80%的代码是在处理异常逻辑,而正常流程只占20%。由此可见,异常...
2.HDFS 调优篇.pdf
最新发布
05-19
本文主要探讨HDFS读写异常情况下的容错机制以及HDFS调优策略。 首先,我们来看HDFS读写异常处理机制。在读数据场景中,如果遇到DataNode宕机或数据损坏,HDFS通过DFSInputStream的readWithStrategy()方法进行...
HDFS机架感知功能原理(rack awareness)
weixin_30544657的博客
05-18 166
转自:http://www.jianshu.com/p/372d25352d3a HDFS NameNode对文件块复制相关所有事物负责,它周期性接受来自于DataNode的HeartBeat和BlockReport信息,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响。 一个简单但非优化的副本放置策略是,把副本分别放在不同机架,甚至不同IDC。这样可以防止整个机架、甚至...
Hadoop生态圈(七)- HDFS优化方案
程序园@大Null
01-17 2733
短路本地读取:Short Circuit Local Reads,makeHDFS Block负载平衡器:Balancer,磁盘均衡器:HDFS Disk Balancer,纠删码技术:Erasure Coding,Reed-Solomon(RS)码,Hadoop EC架构,Erasure Coding部署方式,HDFS Disk Balancer相关命令,短路本地读取安全性改进,短路本地读取配置
HDFS优化操作
lslslslslss的博客
12-17 992
目录 一、HDFS的多目录操作 1.NameNode多目录的配置 2.DataNode多目录配置 3.集群数据均衡之磁盘间数据均衡 二、HDFS集群的扩容与缩容 1.添加白名单 2.添加新服务器 3.服务器间数据均衡 4.黑名单退役服务器 三、HDFS故障的排除 1.NameNode故障处理 2.集群安全模式&磁盘修复 一、HDFS的多目录操作 1.NameNode多目录的配置 a.在每台服务器中,NameNode的本地目录都可以配置多个,并且每个目录存...
后端分布式系列:分布式存储-HDFS 异常处理与恢复
iteye_2022的博客
09-02 357
在前面的文章 《HDFS DataNode 设计实现解析》中我们对文件操作进行了描述,但并未展开讲述其中涉及的异常错误处理与恢复机制。本文将深入探讨 HDFS 文件操作涉及的错误处理与恢复过程。 读异常与恢复 读文件可能发生的异常有两种: 读取过程中 DataNode 挂了 读取到的文件数据损坏 HDFS 的文件块多副本分散存储机制保障了数据存储的可靠性,对于第一种情况 DataN...
HDFS文件系统优化与性能调优技巧
# 1. 引言 ## 1.1 什么是HDFS文件系统 Hadoop分布式文件系统...这种分布式的数据存储方式使得HDFS具备良好的扩展性和容错性,能够应对大规模数据的处理需求。 ## 1.2 HDFS的重要性和应用场景 随着大数据技术的兴起
HDFS 存储系统中的读写性能调优技巧
HDFS的设计目标是能够在廉价的商用硬件上存储大量数据,并提供高容错性、高可用性、高吞吐量的数据访问能力。 HDFS将数据切分成多个块(block)存储在不同的机器上,通过数据分布和冗余来保障数据的可靠性和容错性...
HDFS的监控与性能调优:系统性能与资源利用率优化
HDFS具有高容错性、高可靠性和高吞吐量的特点,适用于运行在廉价硬件上的大型数据集群。 HDFS采用了主从架构,由一个NameNode和多个DataNode组成。NameNode负责管理文件系统的命名空间、存储元数据和协调数据块的...
Hadoop性能监控与调优技巧
它具有开源、可扩展、高容错等优势,能够处理大规模数据的存储和分析。在众多领域中,Hadoop被广泛应用于海量数据处理、数据挖掘、日志分析、机器学习等任务中。 Hadoop的重要性主要体现在以下几个方面: - 大规模...
hdfswriter优化之提高速度
cclovezbf的博客
09-19 1109
比如mysql读的速度是2w Records/s, hdfs的速度是1w Records/s 那么不管你怎么切分任务,的速度永远是导数的瓶颈?举例 1e的数据,mysql分成10channel,51个tasks,那么在hdfswriter上会同时有10个线程去orc文件,关键问题在于。注意这个方法当write为null的时候,会new一个writer。之前的文章介绍过优化读的速度。而datax的代码里是来一条一条,这两种效率谁高谁低就不用说了吧。目前我们能控制的无非就是并行,不能根本的解决问题。
HDFS 读写过程中的异常处理与恢复
METON的博客
08-20 4225
在前面的文章中我们对文件操作进行了描述,但并未展开讲述其中涉及的异常错误处理与恢复机制。本文将深入探讨 HDFS 文件操作涉及的错误处理与恢复过程。 读异常与恢复 读文件可能发生的异常有两种: 读取过程中 DataNode 挂了 读取到的文件数据损坏 HDFS 的文件块多副本分散存储机制保障了数据存储的可靠性,对于第一种情况 DataNode 挂了只需要失败转移到其他副本所在的 DataNode 继续读取,而对于第二种情况读取到的文件数据块若校验失败可认定为损坏,依然可以...
HDFS性能优化
小冷在努力~
09-10 6250
分布式文件系统是在多个节点上做的数据文件的部署,所以,当多个节点之间要做数据的传输通信时,就要有一个文件目录的管理者和网络带宽的使用。当namenode的可使用的内存空间和网络带宽可使用率非常大时,实现节点之间的数据快速传输通信是非常可观的。这里,就对如何提高hdfs性能做如下优化介绍。   1. Hdfs存档/归档,减少namenode内存空间的使用   存档是用来备份的时候标识用的,说...
hadoop调优-hdfs配置优化
manweizhizhuxia的博客
02-22 594
配置文件hdfs-site.xml 生产环境建议优化: <!-- 开启HDFS权限检查 --> <property> <name>dfs.permissions.enabled</name> <value>true</value> </property> <!-- NN处理rpc请求的线程数,默认为10,通常设置20*log(n),n为集群数量,100个节点的集群可设置为90 --> &
网易大数据平台HDFS性能优化实践
大数据研习社
04-15 1054
导读:本文的主题是网易大数据HDFS的优化和实践,下面会从三个方面来介绍网易在大数据存储相关的工作和努力。 网易大数据平台 HDFS在网易的实践及挑战 重点业务分享 01 网易大数据平台 网易引入Hadoop十年有余。开源是大数据行业的发展趋势,网易也是本着开源开放的心态来做好大数据。 近年来随着业务的发展,网易实现了大数据跨云部署,跨云生产,为业务在生产效益上带来了很多益处。上图是网易大数据平台的示意图,从逻辑上分为六大部分: 大数据应用开发层:提供了一些大数据开发
HDFS容错机制
编码强迫症患者
03-01 4892
概述 HDFS可以通过廉价机器搭建大规模集群,获得海量数据的分布式存储能力。对于廉价机器而言,出现网络故障、节点失效、数据损坏现象的频率并不低,所以在故障之后如何进行数据恢复和容错处理是至关重要的,HDFS提供了完善的容错机制,使得它成为一个高度容错性和高吞吐量的海量数据存储解决方案。 故障检测机制 故障的类型主要有以下三种,针对这三种故障类型,HDFS提供了不同的故障检测机制: 针对DataN...
HDFS读写数据流程&&错误问题解决
qq_61645895的博客
01-10 1454
HDFS读写数据流程&&NameNode&Secondary NameNode工作机制&&错误问题解决
Spring Batch 批处理(7) - 异常处理及容错机制
justlpf的专栏
03-17 1667
restart是针对job来使用,是重启job的一个操作。默认情况下,当任务出现异常时,SpringBatch会结束任务,当使用相同参数重启任务时,SpringBatch会去执行未执行的剩余任务。retry是对job的某一step而言,处理一条数据item的时候发现有异常,则重试一次该数据item的step的操作。skip是对job的某一个step而言,处理一条数据item的时候发现有异常,则跳过该数据item的step的操作。当第一次执行时,程序在33行抛出异常异常,curline值是30;
HDFS故障类型和检测方法
09-15 1480
读数据时,namenode会返回所有datanode的位置,如果从某个datanode无法读数据,会跳过该datanode并选择其他datanode读数据。数据未收到应答,会跳过该datanode,入其他datanode,稍后等namenode处理此datanode。1.2 datanode 3秒 发送心跳信号,如果 namenode 未接收到心跳信号,datanode 挂。移除故障datanode,并指定其他datanode拷贝数据。未接受到应答则认为通讯故障。3.datanode故障。
写文章

热门文章

  • 2021最全大数据学习路线(建议收藏) 97323
  • Spark shuffle 机制,一万字总结,建议反复看 4977
  • Spark 调度系统,内部原来是这样搬砖的 3158
  • Spark 进程模型与分布式部署:什么是分布式计算? 2984
  • Spark 中 的RDD该怎么理解? 2520

分类专栏

  • 大数据面试经验分享 6篇
  • Spark 6篇
  • HADOOP 5篇
  • 数据结构与算法 4篇

最新评论

  • 2021最全大数据学习路线(建议收藏)

    2301_76374371: 蹲蹲蹲

  • 2021最全大数据学习路线(建议收藏)

    枫原万叶�的友人: 感谢🙏🏻

  • 2021最全大数据学习路线(建议收藏)

    2201_76058646: 大哥大专学这个可以吗

  • 2021最全大数据学习路线(建议收藏)

    weixin_52315102: 大数据入门教程 https://misishijie.com/crankymonkey/big_data_analytics/big_data_analytics_overview.htm

  • Spark 中 的RDD该怎么理解?

    江海_余生: 大佬讲的真心不错,学到了,感谢表情包

最新文章

  • 云计算时代,你还不会 Docker?史上最全 Docker 教程
  • Spark shuffle 机制,一万字总结,建议反复看
  • Spark 调度系统,内部原来是这样搬砖的
2022年7篇
2021年7篇
2020年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司网站域名优化教程怎样优化网站排名番禺网站优化营销中心云南优化网站叙永优化网站德州原装网站优化咨询电话优化网站排名怎么制作优化网站软件衤要金手指专业松岗免费的网站优化大流量网站的性能优化优化网站排名垢云速捷豪杰放心的电商网站优化哪家便宜金牛区家居网站优化孝感品牌网站优化要多少钱网站优化排名快速上首页的方法网站优化有哪几种方式许昌搜索引擎网站优化平台淄博网站关键词优化排名最好用的网站优化公司有哪些携程网站优化分析报告个性网站优化设计网站数据优化西青区网站关键词优化排名梧州做网站优化网站搜索优化bj金手指霸屏江门网站排名优化江西省网站优化排名网站php优化随州外包网站优化公司网站优化 月付费歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化