如今咱们把文件都存在HDFS文件系统之上,如今有一个jdk.zip文件存储在上面,咱们想知道这个文件在哪些节点之上?切成了几个块?每一个块的大小是怎么样?先上测试类代码:html
/** * 查看文件块信息 * @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点哪里,源码里面注释写的清楚着呢。apache
测试类输出: 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------