91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

hbase-0.96.x相對hbase-0.94.x有什么改變

發布時間:2021-12-09 10:17:59 來源:億速云 閱讀:125 作者:小新 欄目:云計算

小編給大家分享一下hbase-0.96.x相對hbase-0.94.x有什么改變,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

環境:
Hadoop:hadoop-2.2.0
hbase:hbase-0.96.0
1.org.apache.hadoop.hbase.client.Put
    <1>取消了無參的構造方法
    <2>Put類不再繼承Writable類     
        0.94.6時public class Put extends Mutation implements HeapSize, Writable, Comparable<Row>
        0.96.0時public class Put extends Mutation implements HeapSize, Comparable<Row>
解決方法:
        由public class MonthUserLoginTimeIndexReducer extends Reducer<BytesWritable,MonthUserLoginTimeIndexWritable, ImmutableBytesWritable, Writable> {
改public class MonthUserLoginTimeIndexReducer extends Reducer<BytesWritable,MonthUserLoginTimeIndexWritable, ImmutableBytesWritable, Put> {
2.org.apache.hadoop.hbase.client.Mutation.familyMap
     org.apache.hadoop.hbase.client.Mutation.familyMap類型改變:
     /**
     * 0.94.6
     * protected Map<byte[],List<KeyValue>> familyMap
     * 
     * 0.96.*
     * protected NavigableMap<byte[],List<Cell>> familyMap
     * org.apache.hadoop.hbase.Cell hbase-0.94.*中是沒有的
     */    

     org.apache.hadoop.hbase.KeyValue的改變:
     /**
     * 0.94.*
     * public class KeyValue extends Object implements Writable, HeapSize
     * 
     * 0.96.0
     * public class KeyValue extends Object implements Cell, HeapSize, Cloneable
     */
     解決方法:將代碼中的List<KeyValue>改成List<Cell>
3. org.apache.hadoop.hbase.KeyValue
     0.96.0中方法getFamily已被棄用(Deprecated),改成方法getFamilyArray() 
4.org.apache.hadoop.hbase.HTableDescriptor   
     類org.apache.hadoop.hbase.HTableDescriptor的構造方法public HTableDescriptor(String name)已被棄用(Deprecated)
     解決方法:使用public HTableDescriptor(TableName name)
     舊:HTableDescriptor tableDesc = new HTableDescriptor(tableName);
     新:HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName));
5.org.apache.hadoop.hbase.client.HTablePool
     類org.apache.hadoop.hbase.client.HTablePool整個被棄用(Deprecated)
     解決方法:使用HConnection.getTable(String)代替,HConnection是個接口,類CoprocessorHConnection是它唯一的實現類:
     HRegionServer hRegionServer = new HRegionServer(conf) ;
     HConnection connection = HConnectionManager.createConnection(conf);
     hConnection = new CoprocessorHConnection(connection,hRegionServer);
6.org.apache.hadoop.hbase.client.Result
     方法public KeyValue[] raw()被棄用(Deprecated),建議使用public Cell[] rawCells()
     方法getRow被棄用(Deprecated)
     方法getFamily被棄用(Deprecated)
     方法getQualifier被棄用(Deprecated)
     方法getValue被棄用(Deprecated)
     方法public List<KeyValue> getColumn(byte[] family,byte[] qualifier)被棄用(Deprecated)
     方法public KeyValue getColumnLatest(byte[] family,byte[] qualifier)被棄用(Deprecated)
     Cell中:改成以下方法
     getRowArray()
     getFamilyArray()
     getQualifierArray()
     getValueArray()
     Result中:增加如下方法
     public List<KeyValue> getColumnCells(byte[] family,byte[] qualifier)
     public KeyValue getColumnLatestCell(byte[] family,byte[] qualifier)
     改動:所有ipeijian_data中凡是和【新增用戶活躍用戶流失用戶】相關的都做如下變化:
     舊代碼:if (value.raw().length == 1
     新代碼:if (value.rawCells().length == 1
7.job中設置TableInputFormat.SCAN
     0.96.0中去掉了方法:public void write(DataOutput out)throws IOException
     之前版本使用conf.set(TableInputFormat.SCAN, StatUtils.convertScanToString(scan));進行設置
     StatUtils.convertScanToString的具體實現為:
     public static String convertScanToString(Scan scan) throws IOException {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(out);
            scan.write(dos);
            return Base64.encodeBytes(out.toByteArray());
     }
     該方法的實現與TableMapReduceUtil.convertScanToString(Scan scan)是一樣的。
     但是當hbase升級到了0.96.*是對于類Scan棄用(不僅僅是Deprecated,而是Deleted)了方法write,所以上面
     的實現變為不正確
     hbase0.96.*中對該方法進行了重新的實現:
     public static String convertScanToString(Scan scan) throws IOException {
            ClientProtos.Scan proto = ProtobufUtil.toScan(scan);
            return Base64.encodeBytes(proto.toByteArray());
     }
     所以做如下更改:
     StatUtils類中方法convertScanToString的實現做如上更改以適配hbase0.96.* 
8.cn.m15.ipj.db.hbase.MyPut
    自定義的Put類,比傳統的Put類多一個length,原版和新版代碼比較:
    原版:(紅色字體為API變為新版時報錯的地方)

public class MyPut extends Put {
     public MyPut(byte[] row, int length) {                                    
     //原因是put的無參構造方法已經在新本中消失
          if (row == null || length > HConstants.MAX_ROW_LENGTH) {
               throw new IllegalArgumentException(“Row key is invalid”);
          }
          this.row = Arrays.copyOf(row, length);
          this.ts = HConstants.LATEST_TIMESTAMP;
     }    
     public MyPut add(byte[] family, byte[] qualifier, long ts, byte[] value,int length) {
          List<KeyValue> list = getKeyValueList(family);
          KeyValue kv = createPutKeyValue(family, qualifier, ts, value, length);
          list.add(kv);
          familyMap.put(kv.getFamily(), list);                                   
          //familyMap的類型已經改變
          return this;
      }
     private List<KeyValue> getKeyValueList(byte[] family) {
          List<KeyValue> list = familyMap.get(family);                     
          //familyMap的類型已經改變
          if (list == null) {
               list = new ArrayList<KeyValue>(0);
          }
          return list;
     }
     private KeyValue createPutKeyValue(byte[] family, byte[] qualifier,long ts, byte[] value, int length) {
          return new KeyValue(this.row, 0, this.row.length, family, 0,
          family.length, qualifier, 0, qualifier.length, ts,
          KeyValue.Type.Put, value, 0, length);
     }
}

更改之后:

public MyPut(byte[] row, int length) {
     super(row,length);                                                                      
     //新增加
     if (row == null || length > HConstants.MAX_ROW_LENGTH) {
          throw new IllegalArgumentException(“Row key is invalid”);
     }
     this.row = Arrays.copyOf(row, length);
     this.ts = HConstants.LATEST_TIMESTAMP;
     }
     public MyPut add(byte[] family, byte[] qualifier, long ts, byte[] value,int length) {
          List<Cell> list = getCellsList(family);
          KeyValue kv = createPutKeyValue(family, qualifier, ts, value, length);
          list.add(kv);
          familyMap.put(CellUtil.cloneFamily(kv), list);
          return this;
     }    
     private List<Cell> getCellsList(byte[] family) {
          List<Cell> list = familyMap.get(family);
          if (list == null) {
              list = new ArrayList<Cell>(0);
          }
          return list;
     }
     private KeyValue createPutKeyValue(byte[] family, byte[] qualifier,long ts, byte[] value, int length) {
          return new KeyValue(this.row, 0, this.row.length, family, 0,family.length, qualifier, 0, qualifier.length, ts,
                    KeyValue.Type.Put, value, 0, length);
     }
}

以上是“hbase-0.96.x相對hbase-0.94.x有什么改變”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁津县| 桐乡市| 锦屏县| 敦煌市| 菏泽市| 简阳市| 呼和浩特市| 仙游县| 滨海县| 海丰县| 砚山县| 江津市| 冷水江市| 随州市| 都江堰市| 马关县| 上林县| 商河县| 沙坪坝区| 壤塘县| 三门县| 柘荣县| 冀州市| 灵武市| 仙游县| 亚东县| 铅山县| 井陉县| 汤阴县| 申扎县| 安国市| 万荣县| 涟源市| 皋兰县| 上栗县| 济源市| 龙里县| 惠水县| 钟山县| 阳山县| 蒙山县|