hdfs 客户端挂载,集群间复制

客户端挂载表

core-site.xml配置
<xi:includehref=“cmt.xml"/>
<property>
    <name>fs.defaultFS</name>
    <value>viewfs://nsX</value>
   <description>整个Federation集群对外提供服务的NS逻辑名称,
        注意,这里的协议不再是hdfs,而是新引入的viewfs
        这个逻辑名称会在下面的挂载表中用到</description>
</property>
*core-site.xml配置
<property>
<name>fs.viewfs.mounttable.default.link./cluster1</name>
<value>hdfs://crxy1:9000/</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./cluster3</name>
<value>hdfs://crxy3:9000</value>
</property>


ViewFileSystemfsView = (ViewFileSystem) ViewFileSystem.get(conf);
MountPoint[]m = fsView.getMountPoints();
for(MountPoint m1 : m)
    System.out.println( m1.getSrc() );
// 直接使用/share/test.txt创建文件
// 如果按照之前的配置,客户端会自动根据挂载表找到是ns1
// 然后再通过failover proxy类知道nn1是Active NN并与其通信
Pathp = new Path("/share/test.txt");
FSDataOutputStreamfos = fsView.create(p);



自己实现放入回收站功能

*配置:在每个节点(不仅仅是主节点)上添加配置core-site.xml,增加如下内容
<property>
   <name>fs.trash.interval</name>
   <value>1440</value>
</property>

public static boolean rm(FileSystem fs, Path path, boolean recursive, boolean skipTrash) throws IOException {
        if (!skipTrash) {
            Trash trashTmp = new Trash(fs, conf);
            if (trashTmp.moveToTrash(path)) {
                log.info("Moved to trash: " + path);
                return true;
            }
        }
        boolean ret = fs.delete(path, recursive);
        if (ret)
            log.info("rm: " + path);
        return ret;
    }


集群间复制

distcp一般用于在两个HDFS集群中传输数据。如果集群在Hadoop的同一版本上运行,就适合使用hdfs方案

 hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar 

在两个运行着不同版本HDFS的集群上利用distcp,使用hdfs协议是会失败的,因为RPC系统是不兼容的

hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar 
注意,需要在URI源中指定名称节点的Web端口。这是由dfs.http.address的属性决定的,默认值为50070



*

你可能感兴趣的:(hdfs)