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());
    }
    }
    }

  • 相关阅读:
    Redis概述
    容器化VS微服务
    HTTP协议
    Java传参都是传引用变量的副本
    短连接、长连接和短轮询、长轮询
    Netty 5 获取客户端IP(非HTTP)
    Linux上从Java程序中调用C函数
    【转载】Log4j详细使用教程
    【转载】Windows下VSCode编译调试c/c++
    SpringCloud与Seata分布式事务初体验
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3060015.html
Copyright © 2011-2022 走看看