3

我编写了一个简单的程序,将数据放入 HDFS。我通过配置对象将 dfs.replication 设置为 3,并针对伪分布式 hdfs 集群运行该程序。我希望得到一个异常,因为复制因子是 3 并且只有一个数据节点;但程序成功完成了执行。

这是一种了解我的数据处于复制不足状态的方法吗?我认为这与 dfs.replication.min 有关,但是当我也将其更改为 3 时(在程序配置对象中),写入仍然成功并且我没有得到任何异常。

4

2 回答 2

4

我已经完成了一些测试并找出了原因。

首先,当您创建文件时,其复制因子必须高于或等于 dfs.replication.min。HDFS 规定到 dfs.replication.min 节点的复制是同步的,对其余节点 (dfs.replication - dfs.replication.min) 的复制是异步处理的。

由于dfs.replication.min的默认设置是1,所以我成功将dfs.replication = 3的文件写入了一个节点的hdfs集群。

默认复制因子 (dfs.replication) 设置为 3,但可以通过配置对象根据请求进行更改。可悲的是,您无法根据请求更改 dfs.replication.min,因此如果将其设置为较低层,则无法提高可靠性。

于 2012-09-18T14:47:43.730 回答
2

如果要强制同步 hdfs 复制,请使用此命令。hadoop -setrep [-R] [-w] :设置文件的复制级别。-R 标志请求整个树的复制级别的递归更改。

于 2012-10-19T16:41:28.927 回答