datanode节点数量影响galera 单个节点挂掉datanode写入速度吗

DataNode节点上数据块的完整性——DataBlockScanner_服务器应用_Linux公社-Linux系统门户网站
你好,游客
DataNode节点上数据块的完整性——DataBlockScanner
来源:Linux社区&
作者:xhh198781
由于每一个磁盘或者是网络上的I/O操作可能会对正在读写的数据处理不慎而出现错误,所以HDFS提供了下面两种数据检验方式,以此来保证数据的完整性,而且这两种检验方式在DataNode节点上是同时工作的:
&&&&&& 检测损坏数据的常用方法是在第一次进行系统时计算数据的校验和,在通道传输过程中,如果新生成的校验和不完全匹配原始的校验和,那么数据就会被认为是被损坏的。
二.数据块检测程序(DataBlockScanner)
&&&& 在DataNode节点上开启一个后台线程,来定期验证存储在它上所有块,这个是防止物理介质出现损减情况而造成的数据损坏。
&&&&&&& 关于校验和,HDFS以透明的方式检验所有写入它的数据,并在默认设置下,会在读取数据时验证校验和。正对数据的每一个校验块,都会创建一个单独的校验和,默认校验块大小是512字节,对应的校验和是4字节。DataNode节点负载在存储数据(当然包括数据的校验和)之前验证它们收到的数据,如果此DataNode节点检测到错误,客户端会收到一个CheckSumException。客户端读取DataNode节点上的数据时,会验证校验和,即将其与DataNode上存储的校验和进行比较。每一个DataNode节点都会维护着一个连续的校验和和验证日志,里面有着每一个Block的最后验证时间。客户端成功验证Block之后,便会告诉DataNode节点,Datanode节点随之更新日志。这一点也就涉及到前面说的DataBlockScanner了,所以接下来我将主要讨论DataBlockScanner。
&&&& 还是先来看看与DataBlockScanner相关联的类吧!
dataset:数据块管理器;blockInfoSet:数据块扫描信息集合,按照上一次扫描时间和数据块id升序排序,以便快速获取验证到期的数据块;blockMap:数据块和数据块扫描信息的映射,以便能够根据数据块快速获取对应的扫描信息;totalBytesToScan:一个扫描周期中需要扫描的总数据量;
bytesLeft:一个扫描周期中还剩下需要扫描的数据量;
throttler:扫描时I/O速度控制器,需要根据totalBytesToScan和bytesLeft信息来衡量;verificationLog:数据块的扫描验证日志记录器;
scanPeriod:一个扫描周期,可以由Datanode的配置文件来设置,配置项是:dfs.datanode.scan.period.hours,单位是小时。
&&& DataBlockScanner是作为DataNode的一个后台线程工作的,跟着DataNode一块启动,它的工作流程如下:
&& 下面来结合源码详细讨论这个过程:
&& 在整个扫描验证过程中都一个速度控制器,
&&&private&void&init()&{&&
&&&&Block&arr[]&=&dataset.getBlockReport();&&
&&&&Collections.shuffle(Arrays.asList(arr));&&
&&&&blockInfoSet&=&new&TreeSet&BlockScanInfo&();&&
&&&&blockMap&=&new&HashMap&Block,&BlockScanInfo&();&&
&&&&long&scanTime&=&-1;&&
&&&&for&(Block&block&:&arr)&{&&
&&&&&&BlockScanInfo&info&=&new&BlockScanInfo(&block&);&&
&&&&&&info.lastScanTime&=&scanTime--;&&&
&&&&&&addBlockInfo(info);&&
&&&&File&dir&=&null;&&
&&&&FSDataset.FSVolume[]&volumes&=&dataset.volumes.&&
&&&&for(FSDataset.FSVolume&vol&:&volumes)&{&&
&&&&&&if&(LogFileHandler.isFilePresent(vol.getDir(),&verificationLogFile))&{&&
&&&&&&&&dir&=&vol.getDir();&&
&&&&&&&&break;&&
&&&&if&(dir&==&null)&{&&
&&&&&&dir&=&volumes[0].getDir();&&
&&&&try&{&&
&&&&&&verificationLog&=&new&LogFileHandler(dir,&verificationLogFile,&<FONT color=#c);&&
&&&&}&catch&(IOException&e)&{&&
&&&&&&LOG.warn("Could&not&open&verfication&log.&"&+&"Verification&times&are&not&stored.");&&
&&&&synchronized&(this)&{&&
&&&&&&throttler&=&new&BlockTransferThrottler(<FONT color=#c,&MAX_SCAN_RATE);&&
&private&void&updateBytesToScan(long&len,&long&lastScanTime)&{&&
&&&&totalBytesToScan&+=&&&
&&&&if&(&lastScanTime&&&currentPeriodStart&)&{&&
&&&&&&bytesLeft&+=&&&
&&private&synchronized&void&addBlockInfo(BlockScanInfo&info)&{&&
&&&&boolean&added&=&blockInfoSet.add(info);&&
&&&&blockMap.put(info.block,&info);&&
&&&&if&(&added&)&{&&
&&&&&&LogFileHandler&log&=&verificationL&&
&&&&&&if&(log&!=&null)&{&&
&&&&&&&&log.setMaxNumLines(blockMap.size()&*&verficationLogLimit);&&
&&&&&&updateBytesToScan(info.block.getNumBytes(),&info.lastScanTime);&&
&&}&&&&& 这个日志文件dncp_block_verification.log.curr保存在DataNode节点的一个存储目录中,并放在current/目录下,如:
相关资讯 & & &
& (07月28日)
& (08月10日)
& (05月16日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款HDFS 上每个数据节点最多能存多少,多大的数据_百度知道使用场景:各种大文件 小文件的存储与下载(占用namenode内存比较大)
namenode服务器内存100G,hadoop占用80G,datanode节点数量为100台,集群优化之前每次GC需要20多秒,优化之后每次GC只需要花费1秒左右,大大提高了集群效率
多说一句,jvm每次做GC操作时,对外界是没有响应的,所有对jvm的请求都处于等待
hadoop-env.sh配置
JVM_OPTS=&-server -verbose:gc
& -XX:&#43;PrintGCDateStamps
& -XX:&#43;PrintGCDetails
& -XX:&#43;UseGCLogFileRotation
& -XX:NumberOfGCLogFiles=9
& -XX:GCLogFileSize=256m
& -XX:&#43;DisableExplicitGC
& -XX:&#43;UseCompressedOops
& -XX:SoftRefLRUPolicyMSPerMB=0
& -XX:&#43;UseFastAccessorMethods
& -XX:&#43;UseParNewGC
& -XX:&#43;UseConcMarkSweepGC
& -XX:&#43;CMSParallelRemarkEnabled
& -XX:CMSInitiatingOccupancyFraction=70
& -XX:&#43;UseCMSCompactAtFullCollection
& -XX:CMSFullGCsBeforeCompaction=0
& -XX:&#43;CMSClassUnloadingEnabled
& -XX:CMSMaxAbortablePrecleanTime=301
& -XX:&#43;CMSScavengeBeforeRemark
& -XX:PermSize=160m
& -XX:GCTimeRatio=19
& -XX:SurvivorRatio=2
& -XX:MaxTenuringThreshold=100& //这个参数很重要,MaxTenuringThreshold这个参数用于控制对象能经历多少次Minor GC才晋升到旧生代,默认&#20540;是15
# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS=&$JVM_OPTS -Xmx80g -Xms80g -Xmn21g -Xloggc:$HADOOP_LOG_DIR/namenode_gc.log&
export HADOOP_SECONDARYNAMENODE_OPTS=&$JVM_OPTS -Xmx80g -Xms80g -Xmn21g&
export HADOOP_DATANODE_OPTS=&$JVM_OPTS -Xmx3g -Xms3g -Xmn2g -Xloggc:$HADOOP_LOG_DIR/datanode_gc.log&
export HADOOP_BALANCER_OPTS=&$JVM_OPTS -Xmx1g -Xms1g -Xmn512m -Xloggc:$HADOOP_LOG_DIR/balancer_gc.log&
export HADOOP_JOBTRACKER_OPTS=&$JVM_OPTS -Xmx1g -Xms1g -Xmn512m -Xloggc:$HADOOP_LOG_DIR/jobtracker_gc.log&
export HADOOP_TASKTRACKER_OPTS=&$JVM_OPTS -Xmx1g -Xms1g -Xmn512m -Xloggc:$HADOOP_LOG_DIR/tasktracker_gc.log&
export HADOOP_CLIENT_OPTS=&$JVM_OPTS -Xmx512m -Xms512m -Xmn256m&
欢迎各位大侠批评指正错误 ,转发请注明出处&http://blog.csdn.net/maijiyouzou/article/details/
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:412次
排名:千里之外君,已阅读到文档的结尾了呢~~
海量数据小文件分布式存储系统的设计与实现,分布式海量数据存储,分布式存储系统,分布式文件存储系统,分布式系统,分布式文件系统,分布式存储,分布式操作系统,分布式系统工程实践,什么是分布式系统
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
海量数据小文件分布式存储系统的设计与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 datanode 数量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信