我写了一个简单的程序,将数据放入HDFS。我通过Configuration对象将dfs.replication设置为3,并针对伪分布式hdfs集群运行此程序。我希望得到一个Exception,因为复制因子是3并且只有一个datanode;但该计划成功完成了执行。
是否可以了解我的数据处于未复制状态?我认为这与dfs.replication.min有关,但当我将其更改为3时(在程序配置对象中),写入仍然成功,我没有得到任何例外。
答案 0 :(得分:3)
我已完成一些测试并找出原因。
首先,当您创建文件时,其复制因子必须大于或等于dfs.replication.min。 HDFS提供到dfs.replication.min节点的复制是同步的,正在异步处理到其余节点(dfs.replication - dfs.replication.min)的复制。
由于dfs.replication.min的默认设置为1,因此我成功将dfs.replication = 3的文件写入一个节点的hdfs集群。
默认复制因子(dfs.replication)设置为3,但可以通过Configuration对象按请求更改。可悲的是,您无法根据请求更改dfs.replication.min,因此如果将其设置为较低层,则无法提高可靠性。
答案 1 :(得分:2)
如果要强制同步hdfs复制,请使用此命令。 hadoop -setrep [-R] [-w]:设置文件的复制级别。-R标志请求递归更改整个树的复制级别。