前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你问我答1 - HDFS数据的写入原理

你问我答1 - HDFS数据的写入原理

作者头像
Fayson
发布于 2022-08-26 09:49:43
发布于 2022-08-26 09:49:43
8500
举报
文章被收录于专栏:Hadoop实操Hadoop实操

我们在集群中配置了hdfs异构存储策略,配置如下:

dfs.datanode.data.dir:/data02/dfs/dn,/data03/dfs/dn,[ARCHIVE]/mnt/nfs01/dfs/dn

dfs.namenode.replication.min:1

dfs.replication:2

然后做了如下测试:

hdfs dfs -mkdir /user/xxx/warm

hdfs storagepolicies -setStoragePolicy -path /user/xxx/warm -policy warm

hdfs mover -p /user/xxx/warm

hadoop jar hadoop-mapreduce-client-jobclient-3.0.0-cdh6.3.2-tests.jar  TestDFSIO -Dmapreduce.job.queuename=q1 -write -nrFiles 100 -fileSize 10240

以上脚本写100个10G的文件到/user/xxx/warm,平均耗时1147.63s

hdfs dfs -mkdir /user/xxx/hot

hdfs storagepolicies -setStoragePolicy -path /user/xxx/hot -policy hot

hdfs mover -p /user/xxx/hot

hadoop jar hadoop-mapreduce-client-jobclient-3.0.0-cdh6.3.2-tests.jar  TestDFSIO -Dmapreduce.job.queuename=q1 -write -nrFiles 100 -fileSize 10240

以上脚本写100个10G的文件到/user/xxx/hot,平均耗时379.3s

根据我们配置的dfs.namenode.replication.min:1,dfs.replication:2和副本放置规则,无论存储策略为warm还是hot,第一份副本都放置在本节点的disk上,另一个副本异步放置到disk或archive上

所以以上两个脚本预期的耗时应该是一样的,但是实际不符合预期,请问原因何在?


你的问题就是期望假如数据放到了archive,就希望这个数据的所有副本,比如3个副本都放到archive的主机或者磁盘上是吧?跟描述里说的性能数据,比如花了多少秒是没关系的。


有关系,根据官网的说法,三副本中第一个副本放到disk,其余副本异步放到archive,因此warm策略性能应该是和hot没有差别的。但实际差别很大,dfs.namenode.replication.min=1,第一个副本写成功后,其余副本异步写到archive或者disk


所以你应该关心2个问题:1.配置了异构磁盘的HDFS的分层存储后,block的分布是否符合预期;2.对于写入到hot或者warm目录的性能是否符合预期,目前看到的数据理论应该性能差不了太多,但是实际差别很大。


第一个问题我们自己看过日志,block分布符合预期,一个在disk上,两个在archive上。第二个问题就是我们关心的问题


第二个问题不应该关心才对啊,因为是挂载的NAS盘到所有DN,真的在有数据写入的时候,会有IO争用的问题,所以会慢。


性能问题需要关心呀,异步写到nfs盘不应该影响性能呀,这与理论不符


就是认为HDFS写入数据是异步的,1个block写入成功了,namenode就返回client成功,其余两个会异步在后台慢慢做,这个场景他们认为第3个副本是异步写到NFS,不应该影响到写入时间才对。


我再描述一下问题哈,warm策略的时候,写文件第一个block块写入本节点的disk,另外两个block异步写入archive,hot策略的时候,第一个block块写入本节点disk,另外两个异步写入其他节点disk,所以无论是warm还是hot写数据的耗时都是第一个block块写入本地disk的时间,应该性能是一样的,但实际warm耗时远多于hot,想知道原因和解决方法。或者我们对hdfs写数据原理理解有误差


HDFS写数据要所有block都写成功了才返回给client写成功,这里默认3副本,从这个图 444 / 555 ack,即写到3个DN都成功了才ack返回成功。你之前写2个副本只到2个DN的时候,同理。


dfs.namenode.replication.min=1具体含义是什么呢?我理解的是写数据时,满足一个副本即返回成功,其他副本异步完成直至满足dfs.replication。

另外还有类似参数dfs.replication.max的含义?


dfs.namenode.replication.min和dfs.namenode.replication.max这两个参数和之前说的默认block包含其副本都写入成功了才返回给客户端不矛盾。

“dfs.namenode.replication.min : Minimal block replication.

Once dfs.namenode.replication.min has been met, write operation will be treated as successful.

But this replication up to dfs.replication will happen in sequential pipeline. First Datanode writes the block and forward it to second Datanode. Second Datanode writes the block and forward it to third Datanode”

1.dfs.namenode.replication.min是说假如在数据写入时候,有DataNode损坏(比如某个block的第2个和第3个副本写到第2台和第3台DataNode失败),某个block只要达到了dfs.namenode.replication.min即表明数据写入成功,剩余的dfs.replication - dfs.replication.min个副本会异步的在后端去复制副本数。

参考(重点看回复):

https://stackoverflow.com/questions/23799658/hadoop-replication-factor-confusion

https://stackoverflow.com/questions/37533600/whats-the-hdfs-writing-consistency

2.dfs.namenode.replication.max是block的最大副本数,设置后,用户在操作数据写入的时候不能指定超过这个副本数。

参考(重点看回复):

https://stackoverflow.com/questions/71265410/what-is-the-meaning-of-dfs-replication-max


总结就是跟之前的不冲突。正常情况是等所有的副本都写入成功才返回client,如果出现异常比如DN损坏,则按照min默认是1个副本写入就算成功,剩下的副本数异步再去做。


HDFS数据的写入可以认为又同步又异步,集群一切正常就是同步,如果有部分DN或者磁盘故障,即集群有异常时,数据写入可以认为又是异步的,只要达到dfs.replication.min就行

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[hadoop3.x]HDFS存储类型和存储策略(五)概述
[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
Maynor
2021/12/06
1.6K0
[hadoop3.x]HDFS存储类型和存储策略(五)概述
HDFS异构存储简介
Hadoop在2.6.0版本中引入了一个新特性异构存储.异构存储关键在于异构2个字.异构存储可以根据各个存储介质读写特性的不同发挥各自的优势.一个很适用的场景就是上篇文章提到的冷热数据的存储.针对冷数据,采用容量大的,读写性能不高的存储介质存储,比如最普通的Disk磁盘.而对于热数据而言,可以采用SSD的方式进行存储,这样就能保证高效的读性能,在速率上甚至能做到十倍于或百倍于普通磁盘读写的速度.换句话说,HDFS的异构存储特性的出现使得我们不需要搭建2套独立的集群来存放冷热2类数据,在一套集群内就能完成.所以这个功能特性还是有非常大的实用意义的.本文就带大家了解HDFS的异构存储分为哪几种类型,存储策略如何,HDFS如何做到智能化的异构存储.
大数据真好玩
2020/08/04
2.3K0
HDFS异构存储简介
[hadoop3.x]HDFS存储策略和冷热温三阶段数据存储(六)概述
[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
Maynor
2021/10/09
8440
0675-6.2.0-什么是HDFS分层存储
CDH支持Hadoop分布式文件系统HDFS中的各种存储类型。早期的CDH只支持一种存储类型。现在,您可以为DataNode数据目录指定不同的存储类型,这样可以根据数据使用频率优化数据使用并降低成本。例如需要频繁使用的数据,可以存储在SSD中,而归档的数据可以存放在相对便宜的存储介质中。
Fayson
2019/07/30
1.2K0
Hadoop中HDFS写入文件的原理剖析
要为即将到来的大数据时代最准备不是,下面的大白话简单记录了Hadoop中HDFS在存储文件时都做了哪些个事情,位将来集群问题的排查提供一些参考依据。
星哥玩云
2022/07/04
8360
大数据之Hadoop企业级生产调优手册(下)
注:演示纠删码和异构存储需要一共 5台虚拟机。尽量拿另外一套集群。提前准备 5台服务器的集群。
王知无-import_bigdata
2021/10/13
6440
初识HDFS原理及框架
      HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,首先它是一个文件系统,用于存储文件,通过目录树来定位文件位置;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
星哥玩云
2022/07/19
4200
初识HDFS原理及框架
Hadoop(四)HDFS集群详解
前言   前面几篇简单介绍了什么是大数据和Hadoop,也说了怎么搭建最简单的伪分布式和全分布式的hadoop集群。接下来这篇我详细的分享一下HDFS。   HDFS前言:     设计思想:(分而治之)将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析。     在大数据系统中作用:为各类分布式运算框架(如:mapreduce,spark,tez,……)提供数据存储服务。   分布式文件系统:     问题引发:海量数据超过了单台物理计算机的存储能力     解
用户1195962
2018/01/18
2.3K0
Hadoop(四)HDFS集群详解
HDFS 原理、架构与特性介绍
本文主要讲述 HDFS原理-架构、副本机制、HDFS负载均衡、机架感知、健壮性、文件删除恢复机制 1:当前HDFS架构详尽分析  HDFS架构  •NameNode  •DataNod
用户1177713
2018/02/24
3.4K0
HDFS 原理、架构与特性介绍
Hadoop(四)HDFS集群详解
  前面几篇简单介绍了什么是大数据和Hadoop,也说了怎么搭建最简单的伪分布式和全分布式的hadoop集群。接下来这篇我详细的分享一下HDFS。
大道七哥
2019/09/10
1.8K0
Hadoop(四)HDFS集群详解
[hadoop3.x]HDFS中的内存存储支持(七)概述
[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
Maynor
2021/12/06
1.6K0
[hadoop3.x]HDFS中的内存存储支持(七)概述
【大数据哔哔集20210122】面试官问我HDFS丢不丢数据?我啪就把这个文章甩到他脸上
HDFS作为分布式文件系统在分布式环境下如何保证数据一致性。HDFS中,存储的文件将会被分成若干的大小一致的block分布式地存储在不同的机器上,需要NameNode节点来对这些数据进行管理,存储这些block的结点称为DataNode,NameNode是用来管理这些元数据的。
大数据真好玩
2021/01/27
1K0
【大数据哔哔集20210122】面试官问我HDFS丢不丢数据?我啪就把这个文章甩到他脸上
Hadoop(六)之HDFS的存储原理(运行原理)
前言   其实说到HDFS的存储原理,无非就是读操作和写操作,那接下来我们详细的看一下HDFS是怎么实现读写操作的! 一、HDFS读取过程   1)客户端通过调用FileSystem对象的open()
用户1195962
2018/01/18
2K0
Hadoop(六)之HDFS的存储原理(运行原理)
[hadoop3.x]HDFS中的内存存储支持(七)概述
l DataNode异步地将内存中数据刷新到磁盘,从而减少代价较高的磁盘IO操作,这种写入称之为懒持久写入
Maynor
2021/10/12
1.8K0
2021年大数据Hadoop(九):HDFS的高级使用命令
安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。
Lansonli
2021/10/11
5710
大数据存储平台之异构存储实践深度解读
经常做数据处理的伙伴们肯定会有这样一种体会:最近一周内的数据会被经常使用到,而比如最近几周的数据使用率会有下降,每周仅仅被访问几次;在比如3月以前的数据使用率会大幅下滑,存储的数据可能一个月才被访问几次。 这就产生了一种热和冷数据,对需要频繁访问的数据我们称之为“热”数据,反之我们称之为”冷”数据,而处于中间的数据我们称之为”温”数据。 在数据被视为公司资产的时代,每个公司基本都会保存最近数年的数据,而这些数据尤其是冷数据的累积也给存储平台带来了甜蜜的负担。下面就来分享下如何解决这些“负担”。 首先如何定义
程序你好
2018/07/20
6630
HDFS最基础使用
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
ha_lydms
2023/10/04
2970
HDFS最基础使用
【万字长文】HDFS最全知识点整理(建议收藏)
1)跟NN通信查询元数据(block所在的DN的节点),找到文件块所在的DN的服务器。2)挑选一台DN(就近原则,然后随机)服务器,请求建立socket流。3)DN开始发送数据(从磁盘里读取数据放入流,一packet为单位做校验) 4)客户端以packet为单位接收,现在本地缓存,然后写入目标文件中,后面的block块就相当于append到前面的block块,最后合成最终需要的文件。
857技术社区
2022/05/17
3.1K0
【万字长文】HDFS最全知识点整理(建议收藏)
HDFS原理概念扫盲
hdfs文件系统主要设计为了存储大文件的文件系统;如果有个TB级别的文件,我们该怎么存储呢?分布式文件系统未出现的时候,一个文件只能存储在个服务器上,可想而知,单个服务器根本就存储不了这么大的文件;退而求其次,就算一个服务器可以存储这么大的文件,你如果想打开这个文件,效率会高吗
用户4283147
2022/10/27
5030
HDFS原理概念扫盲
大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和Seconda
传统硬盘HDD(Hard Disk Drive)传输速率:100MB/s 固态硬盘SSD(Solid State Drive)传输速率:500MB/s 混合硬盘HHD(Hybrid Harddrive)传输速率:300MB/s PCIe固态硬盘SSD(Solid State Drive)传输速率:1500MB/s
黑泽君
2019/03/04
1.4K0
推荐阅读
相关推荐
[hadoop3.x]HDFS存储类型和存储策略(五)概述
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档