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

来源:互联网 发布:淘宝有哪些好的布料店 编辑:程序博客网 时间:2024/05/16 02:10

客户端挂载表

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



*

0 0
原创粉丝点击