HDFS超有用的知识点

不定期更新

HDFS

hdfs异构存储:2.6版本新增

在一个集群内实现冷热数据的存储。

storagetype:

ram_disk,ssd,disk,archive 由快到慢,内存/固态硬盘/硬盘/压缩,默认为disk硬盘。archive为高密度的存储介质。

异构存储的步骤:1 datanode通过心跳汇报自身数据存储目录的storagetype给namenode。2 namenode进行汇总并更新集群内各节点的存储类型情况。3 待复制文件根据自身设定的存储策略信息向namenode请求有此类型存储介质的datanode作为候选节点。

数据副本放置策略:在(请求方为datanode)当前datanode(或随机datanode)存一份,在第一个副本所在机架放第二个副本,在第二个副本所在机架的不同datanode节点上放第三个副本。

有效前提:机架的感知功能开启。若没开启,则随机取datanode存3份。

hdfs的三大磁盘目录检测扫描服务

diskchecker:坏盘检测,检测每个目录的访问权限及是否可创建判断是否为坏盘,如果是则坏盘被移除,触发块的复制。

directoryscanner:目录扫描,对扫描目录是否与内存中维护的块信息同步。

volumescanner:与directoryscanner类似,但检查是否为损坏块,若是则汇报namenode。

hdfs快照: 快照只保存差异。

hdfs fs -createSnapshot命令,传入快照所存目录及名称。 需要注意该目录需要先允许创建快照的权限执行allowsnapshot。 

快照的使用:丢失数据的恢复;元数据的差异比较;

数据平衡:长期写入导致部分机器写入数据多,部分数据少;新节点上线从0开始,从别的机器同步大量数据;节点心跳断开,剩余机器为了保证数据高可用,同步大量数据。

balancer:可以设置平衡程序的待移动块最小字节大小限制,保证只平衡大数据文件,提升性能;修改balancer的带宽限制(默认为10m,setBandwidth),同样不能设置过大,影响数据正常读写。 balancer默认对集群内所有节点进行数据平衡,通过include和exclude参数实现定向平衡。

DiskBalancer(暂未发布):(data spread report数据分布式汇报)支持各个节点汇报磁盘块使用情况;(disk balancing磁盘数据平衡)目前不支持跨存储类型的数据转移(hdfs的异构存储)。

获取namenode数据使用情况:可以通过hdp2.7里的hdfs oiv命令(offlineimageview)读镜像文件,但性能慢,不适合定时取。若要30分钟一次,可以在namenode的页面取,在dfshealth.html中找到调用的http请求。通过该请求抓数据下来做分析:如数据增长趋势,文件目录数块数折线趋势图,dfs磁盘空间使用量趋势图。

数据迁移的要素考量:(hdfs中只有追加写和删除操作,没有随机写)

带宽 bandwidth

性能 performance

增量同步 data-increment 

数据迁移同步性 syncable 在周期内完成该周期内的同步任务

Distcp: hdfs的数据迁移方案(通过mr分布式执行,纯map无reduce)

1:带宽限流bandwidth

2:增量同步update,append,diff

  update:新增文件,(目标端没有,源端有)

  append:对文件追加写

  diff:快照对比两端信息

datanode迁移

在迁移时要注意,节点会停止与namenode的心跳,默认3秒一次心跳,不然会认为是死节点,为了满足块的副本数要求,会造成集群内大量块复制的现象。 所以需要手动把心跳超时检查时间设大(默认是300秒检测一次,超时时间为630秒)。

公式: 超时时间=2*心跳检查时间+10*1000*心跳时间(毫秒)

heartbeatExpireInterval=2*heartbeatRecheckInterval+10*1000*heartbeatIntervalSeconds

hdfs-site.xml中修改dfs.namenode.heartbeat.recheck-interval默认为毫秒。

集群名修改:需停止集群,然后修改所有配置项,必须format zookeepe: hdfs zkfc -formatZK,然后再重启hdfs和yarn等。

----------------------------------------------------------------------------

若一个DataNode节点失效,其上的数据会出现在其他节点上。

如:一个数据块有2个拷贝,分别位于集群中DataNode节点机器1和机器2上,机器2挂掉,hdfs会在其他DataNode节点机器(可能是机器3)上拷贝一份此数据块,以保持其2份拷贝数量。

指定hdfs存储文件默认的块大小和拷贝份数

修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml:

<property>

<name>dfs.block.size</name>

<value>67108864</value>

<description>64MB</description>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

若只想指定某个文件的块大小和拷贝份数,可以在上传的时候指定:

hdfs dfs -Ddfs.replication=4 -Ddfs.block.size=134217728 -put file.txt hdfs_file.txt

注:改变hdfs的默认拷贝份数和数据块大小,不会影响已经存在的文件,只会对新上传的文件起作用

查看文件数据块信息

hdfs fsck input/wordcount.txt -files -blocks -locations

或 hdfs fsck input/wordcount.txt

-files能笼统的查看一个文件的大小、块数量和拷贝份数等信息

-files -blocks除了上面信息还能查看到每个块的大小和拷贝份数信息

-files -blocks -locations除了上面信息还能查看每个块的存储节点的位置信息

查看文件的备份系数:hadoop dfs -ls [filename]  结果行中的第二列是备份系数

 (注:文件夹信息存储在namenode节点上,所以没有备份,故文件夹的备份系数是横杠)

修改hdfs文件备份系数:hadoop dfs -setrep [-R]  如果有-R将修改子目录文件的性质。

hadoop dfs -setrep -w 3 -R /user/hadoop 就是把目录下所有文件备份系数设置为3.

如果再fsck时候出错,往往是由于某些文件的备份不正常导致的,可以用hadoop的balancer工具修复

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值