2013-10-21 76 views
3

我在我的“群集”上使用Cloudera Manager免费版,并在我的单台机器上安装了所有服务。HDFS在复制块下

我的机器充当datanode,namenode以及辅助名称节点。

设置在HDFS与复制,

dfs.replication         - 1 
dfs.replication.min, dfs.namenode.replication.min - 1 
dfs.replication.max        - 1 

不过我得到下复制块,因此坏健康,

名称节点日志说,

Requested replication 3 exceeds maximum 1 
java.io.IOException: file /tmp/.cloudera_health_monitoring_canary_files/.canary_file_2013_10_21-15_33_53 on client 111.222.333.444 
Requested replication 3 exceeds maximum 1 
    at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.verifyReplication(BlockManager.java:858) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:1848) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:1771) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:1747) 
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:439) 
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create(ClientNamenodeProtocolServerSideTranslatorPB.java:207) 
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44942) 
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453) 
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1002) 
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1751) 
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1747) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408) 
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1745) 

我已经改变了值,已保存,已部署的客户端配置,也已重新启动。它仍然是一样的。

我需要设置哪些属性才能使CM读取复制因子为1而不是3

回答

2

这是一个客户端设置。客户想要复制文件3次。金丝雀测试作为客户。看起来你必须调整hdfs金丝雀测试设置。 或玩具可以尝试使用Cloudera managr并将复制因子prop设置为最终。它会禁止客户更改此属性。

2

我遇到了这个问题。在我的情况下,这是由于缺少块。请确认是否是这种情况,然后转到hdfs:// hostname:50070并查看块报告。尝试删除或上传缺少块的文件。这应该可以解决你的问题。这就是我解决我的问题。

+0

好的。所以你的意思是说那些被错过的街区?根本没有任何副本。这就说得通了。谢谢 –

+0

您好Vusp ..我的回答是否帮助你。如果是的话,请将其标记为正确。 –

11

如果您有权限的问题,有什么工作对我来说是改变复制因子为每个文件的用户在shell

hadoop fs -setrep -R 1/

直接更改复制因子。我必须更改oozie文件的复制因子,如下所示:

sudo -u oozie bash 
hadoop fs -setrep -R 1/

对每个用户重复授权失败。

0

那么,不建议在同一个节点中同时保存辅助namenode和namenode。放入单独的机器以获得更好的结果。

回到你的问题。我希望你在同一台机器上进行测试。 Cloudera错误地认为你有三个副本,这就是为什么出现这个问题。形成一个独立的集群,它应该至少有4个系统。

首先检查在hdfs-site.xml您的HDFC配置有此类配置,或者不是

<property> 
    <name>dfs.replication</name> 
    <value>3</value> 
</property> 

我希望你的集群有2个或3个系统,使副本的其余部分不能正常复制,使这一问题出现了。

您可以解决此问题。只需打开终端输入这个命令

$ hadoop fs -setrep -R 1/

现在重复覆写和解决这个问题,否则很少有系统三个或更多的现有群集添加。这意味着佣金流程肯定会解决您的问题。

0
$ hadoop fs -setrep -R 1/

更新您的hdfs-site.xml文件属性

dfs.replication=1 
0
  1. 使用HDFS用户#su - hdfs

  2. 执行这组命令下修复登录复制在HDFS块手工

    # hdfs fsck/| grep 'Under replicated' | awk -F':' '{print $1}' >> /tmp/under_replicated_files` 
    # for hdfsfile in `cat /tmp/under_replicated_files\`; do echo "Fixing $hdfsfile :" ; hadoop fs -setrep 3 $hdfsfile; done