hdfs

rxztt3cl  于 2021-06-03  发布在  Hadoop
关注(0)|答案(6)|浏览(365)

我在我的“集群”上使用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 read replication factor为 1 而不是 3 ?

efzxgjgh

efzxgjgh1#

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

v440hwme

v440hwme2#

好吧,不建议将辅助namenode和namenode都保存在同一个节点中。为了得到更好的结果,把它放在不同的机器里。
来回答你的问题吧。我希望你在同一台机器上测试。cloudera错误地认为您有三个副本,这就是为什么出现这个问题的原因。形成一个单独的集群,它至少应该有4个系统。
首先检查中的hdfc配置 hdfs-site.xml 是否有此配置

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

我希望您的集群有2个或3个系统,因此其余的副本没有正确复制,因此出现了此问题。
你可以解决这个问题。只要打开终端输入这个命令

$ hadoop fs -setrep -R 1 /

现在,复制覆盖并解决了这个问题,或者在现有集群中添加几个系统(三个或更多)。这意味着你的问题一定会得到解决。

2nc8po8w

2nc8po8w3#

使用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
vsmadaxz

vsmadaxz4#

我面对这个问题。在我的情况下,这是由于缺少块。请确认情况是否属实,然后转到hdfs://hostname:50070并查看块报告。尝试删除或上载缺少块的文件。这应该能解决你的问题。我就是这样决定的。

kxkpmulp

kxkpmulp5#

$ hadoop fs -setrep -R 1 /

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

dfs.replication=1
3wabscal

3wabscal6#

直接在shell中更改复制因子

hadoop fs -setrep -R 1 /

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

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

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

相关问题