分享

Hadoop里面如何查看一个文件的分布在哪几个节点上

导读:
明白LocatedBlocks作用即可








此问题来自about云(371358502):

可实现:
DFSClient dfsClient = new DFSClient(new URI(defaultFS),this.fileSystem.getConf());
LocatedBlocks locatedBlocks = dfsClient.getLocatedBlocks(filePath, 0);



LocatedBlocks的作用:

getBlockLocations
函数原型:public LocatedBlocks getBlockLocations(String src,long offset, long length)
函数作用:用于确定文件内容的位置,它的输入参数为:文件名、偏移量、长度、返回值是一个LocatedBlocks 对象的列表:

getBlockLocations:确定数据的位置  

下面可参考,来说明LocatedBlocks的作用:
  1. 从NameNode中获得将要被打开文件的元数据信息
  2. 1, 调用 callGetBlockLocations() 方法 取得用户请求的file的元数据信息,数据保存在 locatedBlocks   中
  3.      //非常关键的一步
  4.      LocatedBlocks newInfo =   callGetBlockLocations(namenode, src, 0, prefetchSize);  
  5. 2,若无法定位某个文件的数据Block,则表示文件不存在,则抛出对应异常
  6.      if (newInfo == null) {
  7.         throw new IOException("Cannot open filename " + src);
  8.       }
  9. 3, 使用定位到locatedBlocks来更新当前的locatedBlocks   
  10.        if (locatedBlocks != null) {
  11.         Iterator<LocatedBlock> oldIter = locatedBlocks.getLocatedBlocks().iterator();
  12.         Iterator<LocatedBlock> newIter = newInfo.getLocatedBlocks().iterator();
  13.         while (oldIter.hasNext() && newIter.hasNext()) {
  14.           if (! oldIter.next().getBlock().equals(newIter.next().getBlock())) {
  15.             throw new IOException("Blocklist for " + src + " has changed!");
  16.           }
  17.         }
  18.       }
  19.    this.locatedBlocks = newInfo;
复制代码




没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条