zoukankan      html  css  js  c++  java
  • org.apache.hadoop.fs-BlockLocation


    工具类吧


      1 package org.apache.hadoop.fs;
      2 
      3 import org.apache.hadoop.io.*;
      4 //IO包下的类还没涉及到。遇到一个分析一个。
      5 import java.io.*;
      6 
      7 /*
      8  * A BlockLocation lists hosts, offset and length
      9  * of block. 
     10  * 
     11  */
     12 //记录block的元数据信息,如所在host,长度和偏移量
     13 public class BlockLocation implements Writable {
     14 //针对集群块位置的类
     15   static {               // register a ctor
     16     WritableFactories.setFactory
     17       (BlockLocation.class,
     18        new WritableFactory() {
     19          public Writable newInstance() { return new BlockLocation(); }
     20        });
     21   }
     22 //注册了一个Writable子类BlockLocation的工厂。内部类。详细可看http://book.2cto.com/201305/21915.html
     23   private String[] hosts; //hostnames of datanodes
     24   //节点的主机名数组
     25   private String[] names; //hostname:portNumber of datanodes
     26   //节点的名称数组。名称的格式。
     27   private String[] topologyPaths; // full path name in network topology
     28   //节点在网络拓扑结构中的地址
     29   private long offset;  //offset of the of the block in the file
     30   //块在文件中的偏移量
     31   private long length;
     32   //块长度
     33 
     34   /**
     35    * Default Constructor
     36    */
     37   public BlockLocation() {
     38     this(new String[0], new String[0],  0L, 0L);
     39   }
     40 //默认构造方法
     41   /**
     42    * Constructor with host, name, offset and length
     43    */
     44   public BlockLocation(String[] names, String[] hosts, long offset, 
     45                        long length) {
     46     if (names == null) {
     47       this.names = new String[0];
     48     } else {
     49       this.names = names;
     50     }
     51     if (hosts == null) {
     52       this.hosts = new String[0];
     53     } else {
     54       this.hosts = hosts;
     55     }
     56     this.offset = offset;
     57     this.length = length;
     58     this.topologyPaths = new String[0];
     59   }
     60 //根据名称主机偏移量长度初始化一个块对象
     61   /**
     62    * Constructor with host, name, network topology, offset and length
     63    */
     64   public BlockLocation(String[] names, String[] hosts, String[] topologyPaths,
     65                        long offset, long length) {
     66     this(names, hosts, offset, length);
     67     if (topologyPaths == null) {
     68       this.topologyPaths = new String[0];
     69     } else {
     70       this.topologyPaths = topologyPaths;
     71     }
     72   }
     73 //根据.........
     74   /**
     75    * Get the list of hosts (hostname) hosting this block
     76    */
     77   public String[] getHosts() throws IOException {
     78     if ((hosts == null) || (hosts.length == 0)) {
     79       return new String[0];
     80     } else {
     81       return hosts;
     82     }
     83   }
     84 //获得块的主机
     85   /**
     86    * Get the list of names (hostname:port) hosting this block
     87    */
     88   public String[] getNames() throws IOException {
     89     if ((names == null) || (names.length == 0)) {
     90       return new String[0];
     91     } else {
     92       return this.names;
     93     }
     94   }
     95 //。。。。
     96   /**
     97    * Get the list of network topology paths for each of the hosts.
     98    * The last component of the path is the host.
     99    */
    100   public String[] getTopologyPaths() throws IOException {
    101     if ((topologyPaths == null) || (topologyPaths.length == 0)) {
    102       return new String[0];
    103     } else {
    104       return this.topologyPaths;
    105     }
    106   }
    107   //。。。。。
    108   /**
    109    * Get the start offset of file associated with this block
    110    */
    111   public long getOffset() {
    112     return offset;
    113   }
    114   //。。。。。
    115   /**
    116    * Get the length of the block
    117    */
    118   public long getLength() {
    119     return length;
    120   }
    121   //。。。。。
    122   /**
    123    * Set the start offset of file associated with this block
    124    */
    125   public void setOffset(long offset) {
    126     this.offset = offset;
    127   }
    128 //。。。。。
    129   /**
    130    * Set the length of block
    131    */
    132   public void setLength(long length) {
    133     this.length = length;
    134   }
    135 //。。。。。
    136   /**
    137    * Set the hosts hosting this block
    138    */
    139   public void setHosts(String[] hosts) throws IOException {
    140     if (hosts == null) {
    141       this.hosts = new String[0];
    142     } else {
    143       this.hosts = hosts;
    144     }
    145   }
    146 //。。。。。
    147   /**
    148    * Set the names (host:port) hosting this block
    149    */
    150   public void setNames(String[] names) throws IOException {
    151     if (names == null) {
    152       this.names = new String[0];
    153     } else {
    154       this.names = names;
    155     }
    156   }
    157 //。。。。。
    158   /**
    159    * Set the network topology paths of the hosts
    160    */
    161   public void setTopologyPaths(String[] topologyPaths) throws IOException {
    162     if (topologyPaths == null) {
    163       this.topologyPaths = new String[0];
    164     } else {
    165       this.topologyPaths = topologyPaths;
    166     }
    167   }
    168 //。。。。。
    169   /**
    170    * Implement write of Writable
    171    */
    172   public void write(DataOutput out) throws IOException {
    173     out.writeLong(offset);
    174     out.writeLong(length);
    175     out.writeInt(names.length);
    176     for (int i=0; i < names.length; i++) {
    177       Text name = new Text(names[i]);
    178       name.write(out);
    179     }
    180     out.writeInt(hosts.length);
    181     for (int i=0; i < hosts.length; i++) {
    182       Text host = new Text(hosts[i]);
    183       host.write(out);
    184     }
    185     out.writeInt(topologyPaths.length);
    186     for (int i=0; i < topologyPaths.length; i++) {
    187       Text host = new Text(topologyPaths[i]);
    188       host.write(out);
    189     }
    190   }
    191   //把块信息写到输出流中。用到了Writable子类Long,Int,Text的Write方法。序列化
    192   /**
    193    * Implement readFields of Writable
    194    */
    195   public void readFields(DataInput in) throws IOException {
    196     this.offset = in.readLong();
    197     this.length = in.readLong();
    198     int numNames = in.readInt();
    199     this.names = new String[numNames];
    200     for (int i = 0; i < numNames; i++) {
    201       Text name = new Text();
    202       name.readFields(in);
    203       names[i] = name.toString();
    204     }
    205     int numHosts = in.readInt();
    206     for (int i = 0; i < numHosts; i++) {
    207       Text host = new Text();
    208       host.readFields(in);
    209       hosts[i] = host.toString();
    210     }
    211     int numTops = in.readInt();
    212     Text path = new Text();
    213     for (int i = 0; i < numTops; i++) {
    214       path.readFields(in);
    215       topologyPaths[i] = path.toString();
    216     }
    217   }
    218   //把块信息从输入流中读出来。....。反序列化
    219   public String toString() {
    220     StringBuilder result = new StringBuilder();
    221     result.append(offset);
    222     result.append(',');
    223     result.append(length);
    224     for(String h: hosts) {
    225       result.append(',');
    226       result.append(h);
    227     }
    228     return result.toString();
    229   }
    230   //。。。。。。
    231 }
    欲为大树,何与草争;心若不动,风又奈何。
  • 相关阅读:
    yii---模型的创建
    yii---控制器的创建
    yii的安装
    windows下安装composer
    wpgcms---列表页数据渲染
    Twig---基本使用
    wpgcms---详情页面数据怎么渲染
    Twig---的使用
    vue---指令怎么写
    vue---设置缩进为4个空格
  • 原文地址:https://www.cnblogs.com/admln/p/BlockLocation.html
Copyright © 2011-2022 走看看