hdfs丢失块过多的问题
在HDFS客户端,并执行如下命令:
执行命令退出安全模式
hadoop dfsadmin -safemode leave
执行健康检查,删除损坏掉的block
hdfs fsck / -delete
namenode 空间不足无法使用
在导入数据的时候把namenode误作为datanode,直接从namenode上传数据到hdfs中,当namenode的磁盘完全被存满之后报错namenode is in safemode。想要删除上传的文件,发现已经无法删除,并且再次提示此错误,想通过以下命令强制离开安全模式safemode:
hadoop dfsadmin -safemode leave
但再次操作删除文件仍然进入safemode,此时进入循环 最后的解决方案:重启hadoop集群,查看是否在safemode中,不是,则删除文件,成功
datanode各节点分布数据差异大
分布最小的节点20%,最大的60%,这样下次导入数据容易导致磁盘不足,需要对集群中分布的数据做balancer,在任意节点执行:
hadoop balancer -threshold 5 #节点之间允许5%大小的容量差值,大小在0-100
设置hdfs中平衡数据的传输带宽
如果传输的带宽过大或者过小都有可能影响节点性能,需要根据情况取一个合适的值,参数 dfs.balance.bandwidthPerSec
默认值: 1048575(1M/s),在balancer的时候每个节点传输的最大带宽,可以修改hdfs-site.xml来修改平衡的带宽
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>20971520</value>
<description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description>
</property>
这里调整传输的最大带宽为 20M/s,当然也可以临时修改带宽:
hdfs dfsadmin -setBalancerBandwidth 104857600
如果是cdh,则可以通过图形化页面修改值来持久化修改
对当前上传的文件设置冗余
hdfs中上传的文件,如果不特定修改参数,那么副本数就是之前的默认值,但如果对于一些临时大文件,不想要多个副本,则可以在上传的时候手动设置其副本数即可:
hadoop fs -D dfs.replication=1 -put /file/to/path /file/to/hadooppath
如果想要修改以前已上传文件的副本数,则可以通过如下命令:
hadoop fs -setrep -R
cdh中root用户无法在任何hdfs文件夹中创建文件
发现使用root用户也无法在hdfs 根目录下创建文件夹,google了一下,有几个解决办法: 方法一:
a. In cloudera manager, you can change the settings: hdfs->configuration->view&edit, uncheck the Check HDFS Permissions dfs.permissions and restart the hdfs.
# 具体操作:在cdh的web中点击集群-hdfs-配置
方法二:
b. I resolved the issue by creating a supergroup in /etc/group and updated the user logins on it. I mean user should be part of HDFS supergroup to have access to write on HDFS.
# 具体操作:在服务器中添加supergroup组,然后添加root用户到这个组中/etc/group文件内容直接修改即可supergroup:x:501:root
评论