zoukankan      html  css  js  c++  java
  • hbase持有者工具类

      1 import org.apache.commons.lang.StringUtils;
      2 import org.apache.hadoop.conf.Configuration;
      3 import org.apache.hadoop.hbase.*;
      4 import org.apache.hadoop.hbase.client.*;
      5 import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;
      6 import org.apache.hadoop.hbase.util.Bytes;
      7 import org.slf4j.Logger;
      8 import org.slf4j.LoggerFactory;
      9 
     10 import java.io.Closeable;
     11 import java.io.IOException;
     12 import java.io.Serializable;
     13 import java.util.ArrayList;
     14 import java.util.HashMap;
     15 import java.util.List;
     16 import java.util.Map;
     17 
     18 /**
     19  * <p>
     20  * HBase工具类
     21  * </p>
     22  *
     23  * @author 用户名 2015年6月18日 上午8:58:38
     24  * @version V1.0
     25  * @modify by user: {修改人} 2015年6月18日
     26  * @modify by reason:{方法名}:{原因}
     27  */
     28 public class HBaseHolder implements Serializable,Closeable {
     29 
     30     // 日志记录器
     31     protected static final Logger LOGGER = LoggerFactory.getLogger(HBaseHolder.class);
     32     private static final int DEFAULT_MAX_VERSIONS = 3;
     33     // HBase配置
     34     private Configuration config;
     35     private Admin admin;
     36     private Connection connection;
     37 
     38     public HBaseHolder() {
     39         config = HBaseConfiguration.create();
     40     }
     41 
     42     public HBaseHolder(Configuration config) {
     43         this.config = config;
     44     }
     45 
     46     /**
     47      * 从连接池获取HTable对象
     48      *
     49      * @param tableName
     50      * @return
     51      * @throws IOException
     52      * @author
     53      */
     54     public Table getTable(String tableName) throws IOException {
     55         return getConnection().getTable(TableName.valueOf(tableName));
     56     }
     57 
     58     /**
     59      * 获取HAdmin对象,建表等操作
     60      *
     61      * @return
     62      * @throws IOException
     63      * @author 
     64      */
     65     public Admin getHBaseAdmin() throws IOException {
     66         if (admin == null) {
     67             admin = getConnection().getAdmin();
     68         }
     69         return admin;
     70     }
     71 
     72     /**
     73      * 关闭HTable对象
     74      *
     75      * @param table
     76      * @author
     77      */
     78     public void doCloseTable(Table table) {
     79         if (table == null) {
     80             return;
     81         }
     82         try {
     83             table.close();
     84         } catch (IOException e) {
     85             e.printStackTrace();
     86         }
     87     }
     88 
     89     /**
     90      * 创建表操作
     91      *
     92      * @param tableName
     93      * @param families
     94      * @author
     95      */
     96     public void createTable(String tableName, String[] families) {
     97         createTable(tableName, DEFAULT_MAX_VERSIONS, null, families);
     98     }
     99 
    100     /**
    101      * 创建表操作
    102      *
    103      * @param tableName
    104      * @param splitKeys
    105      * @param families
    106      * @author
    107      */
    108     public void createTable(String tableName, byte[][] splitKeys, String[] families) {
    109         createTable(tableName, DEFAULT_MAX_VERSIONS, splitKeys, families);
    110     }
    111 
    112     /**
    113      * 创建表操作
    114      *
    115      * @param tableName
    116      * @param maxVersions
    117      * @param families
    118      * @author
    119      */
    120     public void createTable(String tableName, int maxVersions, String[] families) {
    121         createTable(tableName, maxVersions, null, families);
    122     }
    123 
    124     /**
    125      * 创建表操作
    126      *
    127      * @param tableName
    128      * @param family
    129      * @author
    130      */
    131     public void createTable(String tableName, int maxVersions, byte[][] splitKeys, String[] families) {
    132         // 参数判空
    133         if (StringUtils.isBlank(tableName) || families == null || families.length <= 0) {
    134             return;
    135         }
    136         try {
    137             // 表不存在则创建
    138             if (!getHBaseAdmin().tableExists(TableName.valueOf(tableName))) {
    139                 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName));
    140                 for (String family : families) {
    141                     HColumnDescriptor columnDescriptor = new HColumnDescriptor(family);
    142                     columnDescriptor.setCompressionType(Algorithm.SNAPPY);
    143                     columnDescriptor.setMaxVersions(maxVersions);
    144                     desc.addFamily(columnDescriptor);
    145                 }
    146                 if (splitKeys != null) {
    147                     getHBaseAdmin().createTable(desc, splitKeys);
    148                 } else {
    149                     getHBaseAdmin().createTable(desc);
    150                 }
    151             } else {
    152                 LOGGER.warn("Table " + tableName + " already exists.");
    153             }
    154         } catch (IOException e) {
    155             LOGGER.error("", e);
    156         }
    157     }
    158 
    159     /**
    160      * 删除表
    161      *
    162      * @param tableName
    163      * @author
    164      */
    165     public void dropTable(String tableName) {
    166         Admin admin = null;
    167         try {
    168             admin = getHBaseAdmin();
    169             if (admin.tableExists(TableName.valueOf(tableName))) {
    170                 admin.disableTable(TableName.valueOf(tableName));
    171                 admin.deleteTable(TableName.valueOf(tableName));
    172             }
    173         } catch (IOException e) {
    174             LOGGER.error("drop table error." + e);
    175         } finally {
    176             if (null != admin) {
    177                 try {
    178                     admin.close();
    179                 } catch (IOException e) {
    180                     LOGGER.error("close admin error " + e);
    181                 }
    182             }
    183         }
    184     }
    185 
    186     /**
    187      * 获取单个列值
    188      *
    189      * @param tableName
    190      * @param rowkey
    191      * @return
    192      * @author
    193      */
    194     public byte[] get(String tableName, String rowkey, String family, String qualifier) {
    195         Table table = null;
    196         try {
    197             Get get = new Get(Bytes.toBytes(rowkey));
    198             get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
    199             table = getTable(tableName);
    200             if (getHBaseAdmin().tableExists(TableName.valueOf(tableName))) {
    201                 Result result = table.get(get);
    202                 return result.getValue(Bytes.toBytes(family), Bytes.toBytes(qualifier));
    203             } else {
    204                 LOGGER.warn("Table " + tableName + " does not exist.");
    205             }
    206         } catch (IOException e) {
    207             LOGGER.error("获取列值失败! " + e);
    208             e.printStackTrace();
    209         }
    210         return null;
    211     }
    212 
    213     /**
    214      * 获取单个列值,字符串返回
    215      *
    216      * @param tableName
    217      * @param rowkey
    218      * @return
    219      * @author zhanglei11
    220      */
    221     public String getString(String tableName, String rowkey, String family, String qualifier) {
    222         return Bytes.toString(get(tableName, rowkey, family, qualifier));
    223     }
    224 
    225     /**
    226      * 获取一行中某列族的值
    227      *
    228      * @param tableName
    229      * @param rowkey
    230      * @return
    231      * @author
    232      */
    233     public Map<String, byte[]> getMapByKeyAndFamily(String tableName, String rowkey, String family) {
    234         Map<String, byte[]> map = new HashMap<String, byte[]>();
    235         Table table = null;
    236         try {
    237             Get get = new Get(Bytes.toBytes(rowkey));
    238             get.addFamily(Bytes.toBytes(family));
    239             table = getTable(tableName);
    240             if (getHBaseAdmin().tableExists(TableName.valueOf(tableName))) {
    241                 Result result = table.get(get);
    242                 for (Cell cell : result.rawCells()) {
    243                     byte[] q = CellUtil.cloneQualifier(cell);
    244                     byte[] v = CellUtil.cloneValue(cell);
    245                     map.put(Bytes.toString(q), v);
    246                 }
    247             } else {
    248                 LOGGER.warn("Table " + tableName + " does not exist.");
    249             }
    250         } catch (IOException e) {
    251             e.printStackTrace();
    252         }
    253         return map;
    254     }
    255 
    256     /**
    257      * 获取一整行的值
    258      *
    259      * @param tableName
    260      * @param rowkey
    261      * @return
    262      * @author
    263      */
    264     public Map<String, byte[]> getRowMap(String tableName, String rowkey) {
    265         Map<String, byte[]> map = new HashMap<String, byte[]>();
    266         Table table = null;
    267         try {
    268             Get get = new Get(Bytes.toBytes(rowkey));
    269             table = getTable(tableName);
    270             if (getHBaseAdmin().tableExists(TableName.valueOf(tableName))) {
    271                 Result result = table.get(get);
    272                 for (Cell cell : result.rawCells()) {
    273                     byte[] q = CellUtil.cloneQualifier(cell);
    274                     byte[] v = CellUtil.cloneValue(cell);
    275                     map.put(Bytes.toString(q), v);
    276                 }
    277             } else {
    278                 LOGGER.warn("Table " + tableName + " does not exist.");
    279             }
    280         } catch (IOException e) {
    281             e.printStackTrace();
    282         }
    283         return map;
    284     }
    285 
    286     /**
    287      * 获取记录
    288      *
    289      * @param tableName
    290      * @param rowkeys
    291      * @return
    292      */
    293     public Result[] getRecodes(String tableName, List<String> rowkeys) {
    294         Table table = null;
    295         if (rowkeys == null || rowkeys.size() == 0) {
    296             LOGGER.warn("Has no rowkeys to get.");
    297             return null;
    298         }
    299         try {
    300             List<Get> gets = new ArrayList<>();
    301             Get get = null;
    302             for (String rowkey : rowkeys) {
    303                 get = new Get(Bytes.toBytes(rowkey));
    304                 gets.add(get);
    305             }
    306             table = getTable(tableName);
    307             if (getHBaseAdmin().tableExists(TableName.valueOf(tableName))) {
    308                 Result[] results = table.get(gets);
    309                 return results;
    310             } else {
    311                 LOGGER.warn("Table " + tableName + " does not exist.");
    312                 return null;
    313             }
    314         } catch (IOException e) {
    315             LOGGER.error("get table [{}] recodes error", tableName, e);
    316             return null;
    317         }
    318     }
    319 
    320     /**
    321      * 获取记录
    322      *
    323      * @param tableName
    324      * @param rowkey
    325      * @return
    326      */
    327     public Result getRecode(String tableName, String rowkey) {
    328         Table table = null;
    329         try {
    330             Get get = new Get(Bytes.toBytes(rowkey));
    331             table = getTable(tableName);
    332             if (getHBaseAdmin().tableExists(TableName.valueOf(tableName))) {
    333                 Result result = table.get(get);
    334                 return result;
    335             } else {
    336                 LOGGER.warn("Table " + tableName + " does not exist.");
    337                 return null;
    338             }
    339         } catch (IOException e) {
    340             LOGGER.error("get table [{}] recodes error", tableName, e);
    341             return null;
    342         }
    343     }
    344 
    345     /**
    346      * 获取记录
    347      *
    348      * @param tableName
    349      * @param gets
    350      * @return
    351      */
    352     public Result[] getRecodesByGets(String tableName, List<Get> gets) {
    353         Table table = null;
    354         if (gets == null || gets.size() == 0) {
    355             LOGGER.warn("Has no gets to get.");
    356             return null;
    357         }
    358         try {
    359             table = getTable(tableName);
    360             if (getHBaseAdmin().tableExists(TableName.valueOf(tableName))) {
    361                 Result[] results = table.get(gets);
    362                 return results;
    363             } else {
    364                 LOGGER.warn("Table " + tableName + " does not exist.");
    365                 return null;
    366             }
    367         } catch (IOException e) {
    368             LOGGER.error("get table [{}] recodes error", tableName, e);
    369             return null;
    370         }
    371     }
    372 
    373     /**
    374      * 获取记录
    375      *
    376      * @param tableName
    377      * @param get
    378      * @return
    379      */
    380     public Result getRecodeByGet(String tableName, Get get) {
    381         Table table = null;
    382         try {
    383             table = getTable(tableName);
    384             if (getHBaseAdmin().tableExists(TableName.valueOf(tableName))) {
    385                 Result result = table.get(get);
    386                 return result;
    387             } else {
    388                 LOGGER.warn("Table " + tableName + " does not exist.");
    389                 return null;
    390             }
    391         } catch (IOException e) {
    392             LOGGER.error("get table [{}] recodes error", tableName, e);
    393             return null;
    394         }
    395     }
    396 
    397     /**
    398      * 检测HBase服务是否可用
    399      *
    400      * @return
    401      * @author
    402      */
    403     public boolean isHBaseAvailable() {
    404         try {
    405             HBaseAdmin.checkHBaseAvailable(config);
    406         } catch (ZooKeeperConnectionException zkce) {
    407             LOGGER.error("", zkce);
    408             return false;
    409         } catch (MasterNotRunningException e) {
    410             LOGGER.error("", e);
    411             return false;
    412         } catch (Exception e) {
    413             LOGGER.error("Check HBase available throws an Exception. We don't know whether HBase is running or not.", e);
    414             return false;
    415         }
    416         return true;
    417     }
    418 
    419     public Connection getConnection() {
    420         if (connection == null) {
    421             try {
    422                 connection = ConnectionFactory.createConnection(config);
    423             } catch (IOException e) {
    424                 LOGGER.error("Create HBase connect error.", e);
    425             }
    426         }
    427         return connection;
    428     }
    429 
    430     @Override
    431     public void close() throws IOException {
    432         if(admin != null){
    433             admin.close();
    434             admin = null;
    435         }
    436         if(connection != null){
    437             connection.close();
    438             connection = null;
    439         }
    440     }
    441 }
  • 相关阅读:
    IE下全局对象报 脚本错误提示“对象不支持此属性或方法”解决方案
    IE6、7下inline-block不起作用
    IE下图片切换的时候,图片总是切换不成功---根本问题是IE缓存图片
    Fiddler 跟踪 手机页面数据包
    Regular Expression Matching——没理解的动态规划
    常见排序算法分析
    Flyweight模式(亨元模式)
    组合模式(Composite Pattern)
    装饰者模式(不太理解的设计模式)
    适配器模式
  • 原文地址:https://www.cnblogs.com/jinniezheng/p/6384002.html
Copyright © 2011-2022 走看看