2013-10-21 107 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