我在我的“群集”上使用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
?
答案 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)
使用HDFS用户#su - hdfs
执行这组命令以手动修复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 /
现在,复制会覆盖并解决此问题,或者将三个或更多系统添加到现有群集中。这意味着佣金过程肯定会解决你的问题。