HDFS复制属性未反映hfs-site.xml中定义的内容

时间:2017-05-03 15:50:09

标签: java hadoop hdfs replication

我正在使用HDFS并在hfs-site.xml中将复制因子设置为1,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>

  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/Users/***/Documnent/hDir/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/Users/***/Documnent/hDir/hdfs/datanode</value >
  </property>

  <property>
    <name>dfs.permissions</name>
    <value>false</value>
  </property>

</configuration>

但是当我尝试将文件从本地系统复制到hdfs文件系统时,我发现该文件的复制因子是3.这是在hdfs上复制文件的代码:

    public class FileCopyWithWrite {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String localSrc = "/Users/***/Documents/hContent/input/docs/1400-8.txt";
        String dst = "hdfs://localhost/books/1400-8.txt";
        try{

            InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
            Configuration conf = new Configuration();;
            FileSystem fs = FileSystem.get(URI.create(dst), conf);

            OutputStream out = fs.create(new Path(dst), new Progressable() {

                public void progress() {
                    // TODO Auto-generated method stub
                    System.out.println(".");
                }
            });

            IOUtils.copyBytes(in, out, 4092, true);


        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

请查看此屏幕截图,显示复制因子为3:

enter image description here

请注意,我已经以伪分布式模式启动,并且我已根据Hadoop The Definite Guide一书中的文档更新了hdfs-site.xml。有关为何发生这种情况的任何建议?

2 个答案:

答案 0 :(得分:0)

删除namenode目录和datanode目录为我解决了这个问题。 所以我遵循以下程序:

  1. 停止服务,即dfs,yarn和mr。

  2. 删除hfs-site.xml文件中指定的namenode和datanote目录。

  3. 重新创建namenode和datanode目录。

  4. 重新启动服务,即dfs,yarn和mr。

答案 1 :(得分:0)

如果在运行状态期间更改了上述属性,则需要群集重新启动,因为更改的属性仅在重新加载后才会反映,这相当于重新启动群集。