HDFS的dfs.replication不同验证

来源:互联网 发布:吃饭排队叫号软件 编辑:程序博客网 时间:2024/05/21 14:01

集群只有三个Datanode,hadoop系统replication=4时,会出现什么情况?文件块只有三份,hadoop fsck -locations 如图所示:

HDFS的dfs.replication不同验证 - jiayouweijiewj - 此时此刻 | 此情此景
       对于上传文件到hdfs上时,当时hadoop的副本系数是几,这个文件的块数副本数就会有几份,无论以后你怎么更改系统副本系统,这个文件的副本数都不会改变,也就说上传到分布式系统上的文件副本数由当时的系统副本数决定,不会受replication的更改而变化,除非用命令来更改文件的副本数。因为dfs.replication实质上是client参数,在create文件时可以指定具体replication,属性dfs.replication是不指定具体replication时的采用默认备份数。文件上传后,备份数已定,修改dfs.replication是不会影响以前的文件的,也不会影响后面指定备份数的文件。只影响后面采用默认备份数的文件。但可以利用hadoop提供的命令后期改某文件的备份数:hadoop fs -setrep -R 1。如果你是在hdfs-site.xml设置了dfs.replication,这并一定就得了,因为你可能没把conf文件夹加入到你的 project的classpath里,你的程序运行时取的dfs.replication可能是hdfs-default.xml里的 dfs.replication,默认是3。可能这个就是造成你为什么dfs.replication老是3的原因。你可以试试在创建文件时,显式设定replication。replication一般到3就可以了,大了意义也不大。
       client也可以通过Datanode上传数据到hdfs上,我的集群是在Datanode的/home/hadoop/bin/./hadoop dfs -copyFromLocal 文件所在路径 分布式路径,不用ssh登录到NameNode上,这样,文件的第一个副本数在这个Datanode上,会将文件传到第二个节点上,而第二个节点在接收并保存数据时,又以4KB的速度将文件传到第三个节点上,以此类推。


hadoop多种环境的简单切换办法
hadoop提供了三种环境,单机运行,单机模拟伪分布运行,以及真分布运行。 一种简单的在这三种运行环境之间切换的方法, 
在HADOOP_HOME底下建三个conf目录,分别为conf_a,conf_b,conf_c,分别对应三种环境的运行配置,接下来切换就简单了:想切换到a,只需要停服务,ln -s conf_a conf,然后启服务。b和c也是同理。
修改hadoop集群的备份数
之前dfs.replication值为3,运行一段时间后使用完了磁盘空间,所以现在我想通过降低备份的个数来释放空间,那么对于之前存储的文件会自动把备份数改为1吗?还是需要手动执行命令来执行呢?dfs.replication这个参数其实只在文件被写入dfs时起作用,虽然更改了配置文件,但是不会改变之前写入的文件的备份数。但是可以通过命令更改备份数:bin/hadoop fs -setrep -R 1 /

 

修改hadoop的备份系数dfs.replication


Hadoop中常常需要增加新的节点,或者变更备份系数。在完成这些操作后,往往出现数据未自动备份,或者数据节点不可用的情况。本文就讨论一下这个问题。


Hadoop的备份系数是指每个block在hadoop集群中有几份,系数越高,冗余性越好,占用存储也越多。备份系数在hdfs-site.xml中定义,默认值为3.


如何变更备份系数?


首先stop-all.sh停止节点,修改master节点的hdfs-site.xml文件,设置dfs.relication值为目标值。启动hadoop集群。

查看文件的备份系数:hadoop dfs -ls [filename]  结果行中的第二列是备份系数 (注:文件夹信息存储在namenode节点上,所以没有备份,故文件夹的备份系数是横杠)

在操作后会发现,以前文件的备份系数仍是原来的值。原来hadoop并不会自动的按照新的备份系数调整,我们需要手动完成。

查看hadoop集群的备份冗余情况:hadoop fsck / 我很喜欢的命令,可以方便的看到各种类型block所占比例。

我们发现Average block replication的值仍然为旧值,所以我们需要修改hdfs中文件的备份系数。

修改hdfs文件备份系数:hadoop dfs -setrep [-R] <path> 如果有-R将修改子目录文件的性质。hadoop dfs -setrep -w 3 -R /user/hadoop/dir1 就是把目录下所有文件备份系数设置为3.

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

自动负载均衡hadoop文件:hadoop balancer

查看各节点的磁盘占用情况 hadoop dfsadmin -report

0 0
原创粉丝点击