我编写了一个简单的程序,将数据放入hdfs。我通过配置对象将dfs.replication设置为3,并针对伪分布式hdfs集群运行这个程序。我希望得到一个异常,因为复制因子是3,并且只有一个datanode;但是程序成功地完成了它的执行。这是一种理解我的数据处于未复制状态的方法吗?我认为这与dfs.replication.min有关,但当我将它也更改为3(在program configuration对象中)时,写入仍然成功,并且没有出现任何异常。
whlutmcx1#
如果要强制同步hdfs复制,请使用以下命令。hadoop-setrep[-r][-w]:设置文件的复制级别,-r标志请求递归更改整个树的复制级别。
3b6akqbq2#
我做了一些测试,找出了原因。首先,创建文件时,其复制因子必须大于或等于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,因此如果将其设置为lower layer,则无法提高可靠性。
2条答案
按热度按时间whlutmcx1#
如果要强制同步hdfs复制,请使用以下命令。hadoop-setrep[-r][-w]:设置文件的复制级别,-r标志请求递归更改整个树的复制级别。
3b6akqbq2#
我做了一些测试,找出了原因。
首先,创建文件时,其复制因子必须大于或等于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,因此如果将其设置为lower layer,则无法提高可靠性。