HDFS在复制块下

时间:2013-10-21 10:23:14

标签: hadoop hdfs cloudera cloudera-manager

我在我的“群集”上使用Cloudera Manager免费版,我的单台机器上有所有服务。

我的机器充当datanode,namenode以及辅助namenode。

HDFS中与复制有关的设置,

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

我仍然得不到重复的块,因此身体不好,

Namenode日志说,

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

6 个答案:

答案 0 :(得分:11)

直接在shell中更改复制因子

hadoop fs -setrep -R 1 /

如果您有权限问题,对我有用的是将复制因子更改为每个文件的用户。我必须更改oozie文件的复制因子,如下所示:

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

对权限失败的每个用户重复。

答案 1 :(得分:3)

这是一个客户端设置。客户希望复制文件3次。金丝雀测试充当客户端。看起来你必须调整hdfs canary测试设置。 或玩具可以尝试使用Cloudera管理器并将复制因子prop设置为final。它会禁止客户更改此属性。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

$ hadoop fs -setrep -R 1 /

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

dfs.replication=1

答案 4 :(得分:0)

  1. 使用HDFS用户#su - hdfs

  2. 登录
  3. 执行这组命令以手动修复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
    

答案 5 :(得分:-1)

嗯,不建议在同一节点中同时保存辅助名称节点和名称节点。放入单独的机器以获得更好的效果。

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

首先检查hdfs-site.xml中的hdfc配置是否具有此配置

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

我希望您的群集有2个或3个系统,因此其余的副本未正确复制,因此出现了此问题。

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

$ hadoop fs -setrep -R 1 /

现在,复制会覆盖并解决此问题,或者将三个或更多系统添加到现有群集中。这意味着佣金过程肯定会解决你的问题。