【HDFS API编程】查看文件块信息

现在我们把文件都存在HDFS文件系统之上,现在有一个jdk.zip文件存储在上面,我们想知道这个文件在哪些节点之上?切成了几个块?每个块的大小是怎么样?先上测试类代码:

   /**
     * 查看文件块信息
     * @throws Exception
     */
    @Test  
    public void getFileBlockLocations() throws Exception{
        FileStatus fileStatus = fileSystem.getFileStatus(new Path("/hdfsapi/test/jdk.zip"));
        BlockLocation[] blocks = fileSystem.getFileBlockLocations(fileStatus,0,fileStatus.getLen());
        for(BlockLocation block : blocks){
            for(String name : block.getNames() )
            System.out.println(name + " : " + block.getOffset() + " : " + block.getLength());
        }
    }

我们使用fileSystem的getFileStatus方法获得文件的状态信息,然后使用fileSystem下的getFileBlockLocations方法获取块的信息,然后对块的信息进行迭代。我们点开block.getNames()方法,它返回的是一个字符串类型,因为文件被切成块了所以会有很多的名字,所以我们再对name进行迭代然后进行输出每个块的名字+偏移量+长度。对于API方法的使用还是那句话:哪里不会Ctrl点哪里,源码里面注释写的清楚着呢。

测试类输出:
setUp-----------
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
192.168.42.110:50010 : 0 : 134217728
192.168.42.110:50010 : 134217728 : 47150214
----------tearDown------

 

posted on 2019-04-20 21:50  Liuyt_61 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Liuyt-61/p/10742894.html

HDFS (Hadoop Distributed File System) 是Apache Hadoop生态系统的核心组成部分,它是一个分布式文件系统,用于存储大量数据。在Java API中操作HDFS,你可以使用`java.net.URI`、`FileSystem`和`Path`等类来下载HDFS文件。 以下是简单的步骤来通过HDFS Java API下载文件: 1. **创建FileSystem实例**: 首先,你需要获取到一个`FileSystem`实例,通常是在`Configuration`对象的帮助下从`FileSystem.get()`方法得到的。这个配置可以包含HDFS集群的相关信息。 ```java Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); ``` 2. **构造文件路径**: 使用`Path`类表示你想要下载的文件HDFS上的路径。 ```java Path filePath = new Path("hdfs://<your_cluster_address>/<file_path>"); ``` 替换 `<your_cluster_address>` 和 `<file_path>` 为实际的HDFS地址和文件名。 3. **检查文件是否存在**: 可能需要确认文件存在再下载,可以用`exists()`方法。 ```java if (!filePath.exists(fs)) { throw new FileNotFoundException("File does not exist at " + filePath); } ``` 4. **打开并读取文件流**: 创建一个`FSDataInputStream`,这是HDFS文件输入流,然后可以从这里开始下载文件。 ```java FSDataInputStream in = fs.open(filePath); ``` 5. **下载文件**: 最后,你可以选择将数据直接写入本地文件,或者将其传递给其他处理程序,例如`Files.copy(in, new File("<local_file_path>"), StandardCopyOption.REPLACE_EXISTING)`。 ```java Files.copy(in, new File("<local_file_path>"), StandardCopyOption.REPLACE_EXISTING); ``` 记得替换 `<local_file_path>` 为你要保存到本地的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值