1

我有一个在安装了 Tachyon、Spark 和 Hadoop 的 Dataproc 主节点上运行的简单示例。

我从 Spark 写入 Tachyon 时出现复制错误。有没有办法指定它不需要复制?

15/10/17 08:45:21 WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer Exception
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /tmp/tachyon/workers/1445071000001/3/8 could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.
    at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1550)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3110)

我打印的日志部分只是一个警告,但会立即出现 Spark 错误。

我检查了Tachyon 配置文档,发现了可能导致此问题的原因:

tachyon.underfs.hdfs.impl   "org.apache.hadoop.hdfs.DistributedFileSystem"

鉴于这一切都在 Dataproc 主节点上,预装了 Hadoop 并且 HDFS 与 Spark 一起工作,我认为这是可以从 Tachyon 内部解决的问题。

4

2 回答 2

2

您可以通过手动将dfs.replication内部设置/etc/hadoop/conf/hdfs-site.xml为 Dataproc 的默认值以外的某个值来调整默认复制2。仅在您的主服务器上设置它应该至少涵盖驱动程序调用,hadoop fs调用,并且它似乎也可以正确传播到hadoop distcp调用中,因此很可能您不必担心在每个工作人员上设置它,只要工作人员正在获取他们的文件系统来自作业范围配置的配置。

请注意,1已经复制意味着数据的单个副本,而不是“除了主副本之外的一个副本”。因此,复制不能真正低于 1。最小复制控制dfs.namenode.replication.min在同一hdfs-site.xml;你可以看到它在此处BlockManager.java引用。

于 2015-10-29T17:50:49.560 回答
1

这是一个复制问题,自然会查看工作节点的状态。

事实证明,他们失败了还有另一个原因。修复之后,这个错误就消失了。

我想知道并且会接受的答案是如何手动更改复制因子。

于 2015-10-27T18:58:52.440 回答