第三章 Hadoop分布式文件系统-2

列出文件 fs.listStatus
String uri = args[0];
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(uri), conf);

        Path[] paths = new Path[args.length];
        for(int i=0;i<paths.length;i++){
            paths[i] = new Path(args[i]);
        }
        FileStatus[] status = fs.listStatus(paths);
        Path[] listedPaths = FileUtil.stat2Paths(status);
        for(Path p: listedPaths)
        {
            System.out.println(p);
        }


 //使用例子        
 hadoop jar hadoopdemo-1.0-SNAPSHOT.jar ListStatus hdfs://localhost/  hdfs://localhost/user/qiao/

文件模式
  • 通配符 同正则 ? 匹配单一字符
  • public FileStatus[] globStatus(Path pathPattern) throws IOException //通配方法
  • PathFilter对象
删除数据
  • public abstract boolean delete(Path f, boolean recursive) throws IOException;
    • f是一个文件或空目录, 那么recursive的值就会被忽略
    • 只有recursive 为True 时,非空目录及其内容才会被删除

数据流

  • DistributedFileSystem
  • 将两个节点间的带宽作为距离的衡量标准
  • 文件读取

客户端读取HDFS中的数据

  • 文件写入

客户端将数据写入HDFS

  • 管线
    • 适合存储数据复本的一组datanode
  • 一致模型
    • 新建一个文件之后,它能在文件系统的命名空间中立即可见
    • 写入文件的内容并不能立即可见,即使数据流已经刷新并存储,所以文件长度显示0
    • hflush() 强制将所有缓存刷新到datanode中,但不保证datanode 已经将数据写到磁盘上,仅确保数据在datanode的内存中(断电容易丢失) ,使用 hsync()替代
    • 衡量hflush() hsync() 该使用哪个 hsync开销比较大

通过distcp并行复制

 hadoop distcp fil1 fil2 # 将file1 复制到file2
 hadoop distcp dir1 dir2
 hadoop distcp -update dir1 dir2

 # 在两个集群间传送数据

 hadoop distcp -update -delete -p hdfs://namenode1/too hdfs://namenode2/foo
  • 保持HDFS集群的均衡
    • 文件块在集群中均匀分布时,HDFS能达到最佳工作状态
    • 最好使用默认的每个节点20个map来运行distcp 命令

转载于:https://my.oschina.net/mrq/blog/3098729

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值