2016-03-15 160 views
11

我得到試圖寫入HDFS作爲我的多線程應用程序Hadoop:...被複制到0節點而不是minReplication(= 1)。有1數據節點(或多個)運行,沒有節點(S)被排除在此操作

could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and no node(s) are excluded in this operation. 

我的一部分,當出現以下錯誤「在這裏已經試過收視率最高的答案圍繞格式化但這並不爲我工作:HDFS error: could only be replicated to 0 nodes, instead of 1

正在發生的事情是這樣的:

  1. 我的應用程序由2個線程每一個與自己的春天配置數據PartitionTextFileWriter
  2. 線程1是第一個來處理數據,這可以成功地寫入到HDFS
  3. 然而,一旦線程2點開始處理數據我得到這個錯誤,當它試圖刷新到一個文件

主題1和2不會寫入同一個文件,儘管它們在我的目錄樹的根目錄共享一個父目錄。

我的服務器上的磁盤空間沒有問題。

我也看到這個在我的名字節點日誌,但不知道這意味着什麼:

2016-03-15 11:23:12,149 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to place enough replicas, still in need of 1 to reach 1 (unavailableStorages=[], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=true) For more information, please enable DEBUG log level on org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy 
2016-03-15 11:23:12,150 WARN org.apache.hadoop.hdfs.protocol.BlockStoragePolicy: Failed to place enough replicas: expected size is 1 but only 0 storage types can be selected (replication=1, selected=[], unavailable=[DISK], removed=[DISK], policy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}) 
2016-03-15 11:23:12,150 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to place enough replicas, still in need of 1 to reach 1 (unavailableStorages=[DISK], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=true) All required storage types are unavailable: unavailableStorages=[DISK], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]} 
2016-03-15 11:23:12,151 INFO org.apache.hadoop.ipc.Server: IPC Server handler 8 on 9000, call org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 10.104.247.78:52004 Call#61 Retry#0 
java.io.IOException: File /metrics/abc/myfile could only be replicated to 0 nodes instead of [2016-03-15 13:34:16,663] INFO [Group Metadata Manager on Broker 0]: Removed 0 expired offsets in 1 milliseconds. (kafka.coordinator.GroupMetadataManager) 

可能是什麼這個錯誤的原因是什麼?

感謝

回答

5

此錯誤是由HDFS的塊複製系統造成的,因爲它無法管理,使聚焦文件中的特定塊的任何副本。那常見原因:

  1. 只有NameNode的實例在運行,它是不是在安全模式
  2. 沒有數據節點的實例和運行,或一些已經死了。 (檢查服務器)
  3. Namenode和Datanode實例都在運行,但它們無法相互通信,這意味着DataNode和NameNode實例之間存在連接問題。
  4. 運行數據節點實例不是談得來的服務器,因爲基於Hadoop的問題(包括數據節點的信息檢查日誌)
  5. 沒有在配置數據目錄的數據節點實例或數據管理部指定的硬盤空間有些聯網實例已經耗盡空間。 (檢查dfs.data.dir //刪除舊文件,如果有的話)
  6. dfs.datanode.du.reserved中DataNode實例的指定保留空間超過了DataNode實例理解的空閒空間,沒有足夠的可用空間。
  7. 沒有爲數據節點實例沒有足夠的線程(檢查數據節點日誌和dfs.datanode.handler.count值)
  8. 確保dfs.data.transfer.protection不等於「認證」和dfs.encrypt.data轉移等於真實。

也請:

  • 驗證的NameNode和DataNode會服務的狀態,並檢查相關日誌
  • 驗證是否核心-site.xml中有正確的價值fs.defaultFS和HDFS-site.xml中有一個有效的值。
  • 驗證hdfs-site.xml具有dfs.namenode.http-address ..對於在PHD HA配置情況下指定的所有NameNode實例。
  • 驗證是否在目錄的權限是正確的

編號:https://wiki.apache.org/hadoop/CouldOnlyBeReplicatedTo

編號:https://support.pivotal.io/hc/en-us/articles/201846688-HDFS-reports-Configured-Capacity-0-0-B-for-datanode

另外,請檢查:Writing to HDFS from Java, getting "could only be replicated to 0 nodes instead of minReplication"

1

我最近也有類似的問題。由於我的datanodes(僅)具有存儲SSD,因此我爲dfs.datanode.data.dir配置了[SSD]file:///path/to/data/dir。由於包含unavailableStorages=[DISK]的日誌,我刪除了[SSD]標籤,從而解決了問題。

顯然,Hadoop使用[DISK]作爲默認存儲類型,如果沒有可用的[DISK]標記存儲位置,則不會'使用SSD'(或者更確切地說'fallup')使用SSD。儘管如此,我無法找到有關此行爲的任何文檔。

相關問題