尝试写入HDFS作为我的多线程应用程序的一部分时,我收到以下错误
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
这是怎么回事:
PartitionTextFileWriter
线程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)
导致此错误的原因是什么?
由于
答案 0 :(得分:15)
此错误是由HDFS的块复制系统引起的,因为它无法在聚焦文件中设置特定块的任何副本。常见原因:
还请:
参考:https://wiki.apache.org/hadoop/CouldOnlyBeReplicatedTo
另外,请检查:Writing to HDFS from Java, getting "could only be replicated to 0 nodes instead of minReplication"
答案 1 :(得分:1)
我最近遇到过类似的问题。由于我的datanodes(仅)具有用于存储的SSD,因此我将[SSD]file:///path/to/data/dir
用于dfs.datanode.data.dir
配置。由于包含unavailableStorages=[DISK]
的日志,我删除了[SSD]
标记,从而解决了问题。
显然,Hadoop使用[DISK]
作为默认存储类型,并且不会后退' (如果没有[DISK]
标记的存储位置可用,则使用SSD(或者更确切地说是' fallup')。我找不到关于这种行为的任何文件。
答案 2 :(得分:1)
检查运行数据节点的计算机上的jps
命令是否显示数据节点正在运行。如果它们正在运行,则意味着它们无法与namenode连接,因此namenode认为hadoop系统中没有datanode。
在这种情况下,运行start-dfs.sh
后,在主节点中运行netstat -ntlp
。 9000是大多数教程告诉您在core-site.xml
中指定的端口号。因此,如果您在netstat
tcp 0 0 120.0.1.1:9000 0.0.0.0:* LISTEN 4209/java
那么你的主机别名有问题。我遇到了同样的问题,所以我将说明它是如何解决的。
这是我core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://vm-sm:9000</value>
</property>
</configuration>
因此主计算机中的vm-sm
别名映射到127.0.1.1。这是因为我/etc/hosts
文件的设置。
127.0.0.1 localhost
127.0.1.1 vm-sm
192.168.1.1 vm-sm
192.168.1.2 vm-sw1
192.168.1.3 vm-sw2
看起来主系统的core-site.xml
似乎已映射到120.0.1.1:9000
,而工作节点的192.168.1.1:9000
正在尝试通过/etc/hosts
进行连接。
所以我必须更改127.0.0.1 localhost
127.0.1.1 vm-sm
192.168.1.1 vmsm
192.168.1.2 vm-sw1
192.168.1.3 vm-sw2
文件中hadoop系统的主节点的别名(刚刚删除了连字符)
core-site.xml
并反映了mapred-site.xml
,slave
和tmp
文件的变化(无论主要旧别名发生在何处)。
从hadoop位置删除旧的hdfs文件以及netstat -ntlp
文件夹并重新启动所有节点后,问题就解决了。
现在,启动DFS后tcp 0 0 192.168.1.1:9000 0.0.0.0:* LISTEN ...
...
返回
require 'time'
puts "Enter the time"
a = gets.chomp
p Time.parse(":#{a}").strftime("%H:%M:%S")
答案 3 :(得分:1)
我遇到了同样的错误,重新启动hdfs服务解决了此问题。即重新启动NameNode和DataNode服务。
答案 4 :(得分:1)
在我的情况下,这是将storage policy的输出路径设置为COLD。
如何检查文件夹设置:
hdfs storagepolicies -getStoragePolicy -path my_path
就我而言,它返回了
The storage policy of my_path
BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}
我将数据转储到其他地方(到HOT存储),问题就消失了。
答案 5 :(得分:1)
您可以退出HDFS安全模式:
hdfs dfsadmin -safemode forceExit
答案 6 :(得分:1)
在我的情况下,问题是Hadoop临时文件
日志显示以下错误:
2019-02-27 13:52:01,079 INFO org.apache.hadoop.hdfs.server.common.Storage: Lock on /tmp/hadoop-i843484/dfs/data/in_use.lock acquired by nodename 28111@slel00681841a
2019-02-27 13:52:01,087 WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-i843484/dfs/data: namenode clusterID = CID-38b0104b-d3d2-4088-9a54-44b71b452006; datanode clusterID = CID-8e121bbb-5a08-4085-9817-b2040cd399e1
我通过删除hadoop tmp文件解决了
sudo rm -r /tmp/hadoop-*
答案 7 :(得分:1)
另一个原因可能是您的Datanode机器没有暴露该端口(默认为50010)。就我而言,我试图将文件从Machine1写入HDFS,该文件运行在Machine2上托管的Docker容器C1上。 为了使主机将请求转发到容器上运行的服务,应注意端口转发。将端口50010从主机转发到客户机后,我可以解决此问题。
答案 8 :(得分:0)
我也有同样的错误,然后我更改了块大小。这是为了解决问题。
答案 9 :(得分:0)
由于该数据节点未运行,因此得到了此错误。要在VM上解决此问题