4

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

我的机器充当数据节点、名称节点以及辅助名称节点。

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

4

6 回答 6

11

直接在 shell 中更改复制因子

hadoop fs -setrep -R 1 /

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

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

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

于 2014-05-06T15:33:48.810 回答
3

这是客户端设置。客户想要复制文件 3 次。Canary 测试充当客户端。看起来你必须调整 hdfs 金丝雀测试设置。或者玩具可以尝试使用 Cloudera 管理器并将复制因子属性设置为最终值。它将禁止客户更改此属性。

于 2013-11-11T20:15:22.143 回答
2

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

于 2013-12-04T06:50:43.217 回答
1
  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
    
于 2017-12-13T07:49:30.913 回答
0
$ hadoop fs -setrep -R 1 /

或者

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

dfs.replication=1
于 2015-02-10T04:07:16.210 回答
-1

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

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

首先检查你的hdfc配置hdfs-site.xml是否有这个配置

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

我希望你的集群有 2 或 3 个系统,所以其余的副本没有正确复制,所以出现了这个问题。

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

$ hadoop fs -setrep -R 1 /

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

于 2014-12-06T15:02:29.917 回答