zoukankan      html  css  js  c++  java
  • 查找某个文件在HDFS集群中的位置

         通过"FileSystem.getFileBlockLocation(FileStatus file,long start,long len)"可查找指定文件在HDFS集群上的位置,其中file为文件的完整路径,start和len来标识查找文件的路径。

    以下是java代码的实现:

    package com.njupt.hadoop;


    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.BlockLocation;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.hdfs.DistributedFileSystem;
    import org.apache.hadoop.hdfs.protocol.DatanodeInfo;


    public class FindFileOnHDFS {


    public static void main(String[] args) throws Exception{
    getHDFSNodes();
    getFileLocal();
    }


    public static void getFileLocal() throws Exception {


    Configuration conf = new Configuration();
    FileSystem hdfs = FileSystem.get(conf);
    Path fpath = new Path("/user/root/20120722/word.txt");

    FileStatus fileStatus = hdfs.getFileStatus(fpath);
       BlockLocation[] blkLocations = hdfs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());

       int blockLen = blkLocations.length;
       
       for(int i = 0 ; i < blockLen ; ++i ){
       String[] hosts = blkLocations[i].getHosts();
       System.out.println("block_"+i + "_location:" + hosts[i]);
       }
    }


    public static void getHDFSNodes() throws Exception{
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(conf);
    DistributedFileSystem hdfs = (DistributedFileSystem)fs;
    DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();

    for( int i = 0 ; i < dataNodeStats.length ; ++i ){
    System.out.println("DataNode_" + i + "_Node:" + dataNodeStats[i].getHostName());
    }
    }
    }

  • 相关阅读:
    Linux Bash
    grep 及正则表达式
    Linux 文件系统
    Linux 操作系统基础
    常见的磁盘I/O和网络I/O优化技巧
    NIO的工作方式
    网络I/O 工作机制
    spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
    深入分析Java I/O 工作机制
    CDN工作机制和负载均衡
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3060015.html
Copyright © 2011-2022 走看看