zoukankan      html  css  js  c++  java
  • 关于hbase api的个人总结(带jar包)

    1。如果本机代码没问题,jar包没问题的话,检查集群也没用问题,但是代码运行显示 找不到对应的映射主机,需要在  C:WindowsSystem32driversetc  中修改host文件,增加主机映射

    2.代码的话,只需要更改配置项 zk的列表就可以了

      1 package cloudy.hbase.dao.imp;
      2 
      3 import java.io.IOException;
      4 
      5 import org.apache.hadoop.conf.Configuration;
      6 import org.apache.hadoop.hbase.HBaseConfiguration;
      7 import org.apache.hadoop.hbase.HColumnDescriptor;
      8 import org.apache.hadoop.hbase.HTableDescriptor;
      9 import org.apache.hadoop.hbase.KeyValue;
     10 import org.apache.hadoop.hbase.client.Delete;
     11 import org.apache.hadoop.hbase.client.Get;
     12 import org.apache.hadoop.hbase.client.HBaseAdmin;
     13 import org.apache.hadoop.hbase.client.HTable;
     14 import org.apache.hadoop.hbase.client.HTablePool;
     15 import org.apache.hadoop.hbase.client.Put;
     16 import org.apache.hadoop.hbase.client.Result;
     17 import org.apache.hadoop.hbase.client.ResultScanner;
     18 import org.apache.hadoop.hbase.client.Scan;
     19 import org.apache.hadoop.hbase.util.Bytes;
     20 
     21 public class hbase_demo {
     22     // 声明静态配置
     23     static Configuration conf = null;
     24 
     25     static {
     26         conf = HBaseConfiguration.create();
     27         conf.set("hbase.zookeeper.quorum", "min1:2181,min2:2181,min3:2181");             //声明 zk列表
     28     }
     29 
     30     /*
     31      * 创建表
     32      *
     33      * @tableName 表名
     34      *
     35      * @family 列族列表
     36      */
     37     public static void creatTable(String tableName, String[] family) throws Exception {
     38         HBaseAdmin admin = new HBaseAdmin(conf);
     39         HTableDescriptor desc = new HTableDescriptor(tableName);
     40         for (int i = 0; i < family.length; i++) {                                        //hbase创建表的时候必须带所依赖的列蔟
     41             desc.addFamily(new HColumnDescriptor(family[i]));
     42         }
     43         if (admin.tableExists(tableName)) {
     44             System.out.println("table Exists!");
     45             System.exit(0);
     46         } else {
     47             admin.createTable(desc);
     48             System.out.println("create table Success!");
     49         }
     50         System.out.println("=========================================================================================================");
     51     }
     52 
     53     /*
     54      * 为表添加数据(适合知道有多少列族的固定表)
     55      *
     56      * @rowKey rowKey
     57      *
     58      * @tableName 表名
     59      *
     60      * @column1 第一个列族列表
     61      *
     62      * @value1 第一个列的值的列表
     63      *
     64      * @column2 第二个列族列表
     65      *
     66      * @value2 第二个列的值的列表
     67      */
     68     public static void addData(String rowKey, String tableName, String[] column1, String[] value1, String[] column2, String[] value2) throws IOException {
     69         Put put = new Put(Bytes.toBytes(rowKey));// 设置rowkey
     70         HTable table = new HTable(conf, Bytes.toBytes(tableName));// HTabel负责跟记录相关的操作如增删改查等//
     71         // 获取表
     72         HColumnDescriptor[] columnFamilies = table.getTableDescriptor() // 获取所有的列族
     73                 .getColumnFamilies();
     74 
     75         for (int i = 0; i < columnFamilies.length; i++) {                                   // 通过遍历列族添加每个列族所需要的信息
     76             String familyName = columnFamilies[i].getNameAsString(); // 获取列族名
     77             if (familyName.equals("article")) { // article列族put数据                                   
     78                 for (int j = 0; j < column1.length; j++) {
     79                     put.add(Bytes.toBytes(familyName), Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j]));         //put是包含rowkey的实例化对象,rowkey1,rowkey2,rowkey3
     80                 }
     81             }
     82             if (familyName.equals("author")) { // author列族put数据
     83                 for (int j = 0; j < column2.length; j++) {
     84                     put.add(Bytes.toBytes(familyName), Bytes.toBytes(column2[j]), Bytes.toBytes(value2[j]));
     85                 }
     86             }
     87         }
     88         table.put(put);                            //table接受每个rowkey所在的put对象
     89         System.out.println("add data Success!");
     90         System.out.println("===========================================================================================================");
     91     }
     92 
     93     /*
     94      * 根据rwokey查询rowkey下面的信息
     95      *
     96      * @rowKey rowKey
     97      *
     98      * @tableName 表名
     99      */
    100     public static Result getResult(String tableName, String rowKey) throws IOException {
    101         Get get = new Get(Bytes.toBytes(rowKey));
    102         HTable table = new HTable(conf, Bytes.toBytes(tableName));// 获取表
    103         Result result = table.get(get);
    104         for (KeyValue kv : result.list()) {
    105             System.out.println("family:" + Bytes.toString(kv.getFamily()));
    106             System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));
    107             System.out.println("value:" + Bytes.toString(kv.getValue()));
    108             System.out.println("Timestamp:" + kv.getTimestamp());
    109             System.out.println("----------Base on rowkey to search data--------");
    110         }
    111         return result;
    112     }
    113 
    114     /*
    115      * 遍历查询hbase表
    116      *
    117      * @tableName 表名
    118      */
    119     public static void getResultScann(String tableName) throws IOException {
    120         Scan scan = new Scan();
    121         ResultScanner rs = null;
    122         HTable table = new HTable(conf, Bytes.toBytes(tableName));
    123         try {
    124             rs = table.getScanner(scan);
    125             for (Result r : rs) {
    126                 for (KeyValue kv : r.list()) {
    127                     System.out.println("row:" + Bytes.toString(kv.getRow()));
    128                     System.out.println("family:" + Bytes.toString(kv.getFamily()));
    129                     System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));
    130                     System.out.println("value:" + Bytes.toString(kv.getValue()));
    131                     System.out.println("timestamp:" + kv.getTimestamp());
    132                     System.out.println("-------------------------------------------");
    133                 }
    134             }
    135         } finally {
    136             rs.close();
    137             System.out.println("==========================all the table (Base on tablename)===================");
    138         }
    139     }
    140 
    141     /*
    142      * 遍历查询hbase表
    143      *
    144      * @tableName 表名
    145      */
    146     public static void getResultScann(String tableName, String start_rowkey, String stop_rowkey) throws IOException {
    147         Scan scan = new Scan();
    148         scan.setStartRow(Bytes.toBytes(start_rowkey));
    149         scan.setStopRow(Bytes.toBytes(stop_rowkey));
    150         ResultScanner rs = null;
    151         HTable table = new HTable(conf, Bytes.toBytes(tableName));
    152         try {
    153             rs = table.getScanner(scan);
    154             for (Result r : rs) {
    155                 for (KeyValue kv : r.list()) {
    156                     System.out.println("row:" + Bytes.toString(kv.getRow()));
    157                     System.out.println("family:" + Bytes.toString(kv.getFamily()));
    158                     System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));
    159                     System.out.println("value:" + Bytes.toString(kv.getValue()));
    160                     System.out.println("timestamp:" + kv.getTimestamp());
    161                     System.out.println("-------------------------------------------");
    162                 }
    163             }
    164         } finally {
    165             rs.close();
    166             System.out.println("==================rowkey reduce to search data");
    167         }
    168     }
    169 
    170     /*
    171      * 查询表中的某一列
    172      *
    173      * @tableName 表名
    174      *
    175      * @rowKey rowKey
    176      */
    177     public static void getResultByColumn(String tableName, String rowKey, String familyName, String columnName) throws IOException {
    178         HTable table = new HTable(conf, Bytes.toBytes(tableName));
    179         Get get = new Get(Bytes.toBytes(rowKey));
    180         get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); // 获取指定列族和列修饰符对应的列
    181         Result result = table.get(get);
    182         for (KeyValue kv : result.list()) {
    183             System.out.println("family:" + Bytes.toString(kv.getFamily()));
    184             System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));
    185             System.out.println("value:" + Bytes.toString(kv.getValue()));
    186             System.out.println("Timestamp:" + kv.getTimestamp());
    187             System.out.println("-------------------查询最小列中的数据-----------------------");
    188         }
    189     }
    190 
    191     /*
    192      * 更新表中的某一列
    193      *
    194      * @tableName 表名
    195      *
    196      * @rowKey rowKey
    197      *
    198      * @familyName 列族名
    199      *
    200      * @columnName 列名
    201      *
    202      * @value 更新后的值
    203      */
    204     public static void updateTable(String tableName, String rowKey, String familyName, String columnName, String value) throws IOException {
    205         HTable table = new HTable(conf, Bytes.toBytes(tableName));
    206         Put put = new Put(Bytes.toBytes(rowKey));
    207         put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));//只能用于修改最小列中的values值,如果最小列名更改的话,会报错,显示没有找到
    208         table.put(put);
    209         System.out.println("update table Success!  table and rowkey");
    210     }
    211 
    212     /*
    213      * 查询某列数据的多个版本
    214      *
    215      * @tableName 表名
    216      *
    217      * @rowKey rowKey
    218      *
    219      * @familyName 列族名
    220      *
    221      * @columnName 列名
    222      */
    223     public static void getResultByVersion(String tableName, String rowKey, String familyName, String columnName) throws IOException {
    224         HTable table = new HTable(conf, Bytes.toBytes(tableName));
    225         Get get = new Get(Bytes.toBytes(rowKey));
    226         get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));
    227         get.setMaxVersions(5);
    228         Result result = table.get(get);
    229         for (KeyValue kv : result.list()) {
    230             System.out.println("family:" + Bytes.toString(kv.getFamily()));
    231             System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));
    232             System.out.println("value:" + Bytes.toString(kv.getValue()));
    233             System.out.println("Timestamp:" + kv.getTimestamp());
    234             System.out.println("-------------------------------------------");
    235         }
    236         /*
    237          * List<?> results = table.get(get).list(); Iterator<?> it =
    238          * results.iterator(); while (it.hasNext()) {
    239          * System.out.println(it.next().toString()); }
    240          */
    241     }
    242 
    243     /*
    244      * 删除指定的列
    245      *
    246      * @tableName 表名
    247      *
    248      * @rowKey rowKey
    249      *
    250      * @familyName 列族名
    251      *
    252      * @columnName 列名
    253      */
    254     public static void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws IOException {
    255         HTable table = new HTable(conf, Bytes.toBytes(tableName));
    256         Delete deleteColumn = new Delete(Bytes.toBytes(rowKey));
    257         deleteColumn.deleteColumns(Bytes.toBytes(falilyName), Bytes.toBytes(columnName));
    258         table.delete(deleteColumn);
    259         System.out.println(falilyName + ":" + columnName + "is deleted!");
    260     }
    261 
    262     /*
    263      * 删除所有的列
    264      *
    265      * @tableName 表名
    266      *
    267      * @rowKey rowKey
    268      */
    269     public static void deleteAllColumn(String tableName, String rowKey) throws IOException {
    270         HTable table = new HTable(conf, Bytes.toBytes(tableName));
    271         Delete deleteAll = new Delete(Bytes.toBytes(rowKey));
    272         table.delete(deleteAll);
    273         System.out.println("all columns are deleted!base on rowkey");
    274     }
    275 
    276     /*
    277      * 删除表
    278      *
    279      * @tableName 表名
    280      */
    281     public static void deleteTable(String tableName) throws IOException {
    282         HBaseAdmin admin = new HBaseAdmin(conf);
    283         admin.disableTable(tableName);
    284         admin.deleteTable(tableName);
    285         System.out.println(tableName + "is deleted!,disable+delelete");
    286     }
    287 
    288     public static void main(String[] args) throws Exception {
    289 
    290         // 创建表
    291         String tableName = "test";
    292         String[] family = {"article", "author"};
    293          creatTable(tableName, family);
    294 
    295         // 为表添加数据
    296 
    297         String[] column1 = {"title", "content", "tag"};
    298         String[] value1 = {"Head First HBase", "HBase is the Hadoop database. Use it when you need random, realtime read/write access to your Big Data.", "Hadoop,HBase,NoSQL"};
    299         String[] column2 = {"name", "nickname"};
    300         String[] value2 = {"nicholas", "lee"};
    301 
    302         addData("rowkey1", "test", column1, value1, column2, value2);
    303         addData("rowkey2", "test", column1, value1, column2, value2);
    304         addData("rowkey3", "test", column1, value1, column2, value2);
    305 
    306         // 遍历查询
    307       // getResultScann("test", "rowkey1", "rowkey5");
    308         // 根据row key范围遍历查询
    309         //getResultScann("test", "rowkey4", "rowkey5");
    310 
    311         // 查询
    312        // getResult("test", "rowkey1");
    313 
    314         // 查询某一列的值
    315        //getResultByColumn("test", "rowkey1", "author", "name");
    316 
    317         // 更新列
    318        // updateTable("test", "rowkey1", "author", "name", "bin");
    319 
    320         // 查询某一列的值
    321         //getResultByColumn("test", "rowkey1", "author", "name");
    322 
    323         // 查询某列的多版本
    324        // getResultByVersion("test", "rowkey1", "author", "name");
    325 
    326         // 删除一列
    327         //deleteColumn("test", "rowkey1", "author", "nickname");
    328 
    329         // 删除所有列
    330         //deleteAllColumn("test", "rowkey1");
    331 
    332         // 删除表
    333         //deleteTable("test");
    334 
    335     }
    336 }
    hbase(main):002:0> scan 'test'
    ROW                                     COLUMN+CELL                                                                                                      
     rowkey1                                column=article:content, timestamp=1545322109447, value=HBase is the Hadoop database. Use it when you need random,
                                             realtime read/write access to your Big Data.                                                                    
     rowkey1                                column=article:tag, timestamp=1545322109447, value=Hadoop,HBase,NoSQL                                            
     rowkey1                                column=article:title, timestamp=1545322109447, value=Head First HBase                                            
     rowkey1                                column=author:name, timestamp=1545322109447, value=nicholas                                                      
     rowkey1                                column=author:nickname, timestamp=1545322109447, value=lee                                                       
     rowkey2                                column=article:content, timestamp=1545322109476, value=HBase is the Hadoop database. Use it when you need random,
                                             realtime read/write access to your Big Data.                                                                    
     rowkey2                                column=article:tag, timestamp=1545322109476, value=Hadoop,HBase,NoSQL                                            
     rowkey2                                column=article:title, timestamp=1545322109476, value=Head First HBase                                            
     rowkey2                                column=author:name, timestamp=1545322109476, value=nicholas                                                      
     rowkey2                                column=author:nickname, timestamp=1545322109476, value=lee                                                       
     rowkey3                                column=article:content, timestamp=1545322109487, value=HBase is the Hadoop database. Use it when you need random,
                                             realtime read/write access to your Big Data.                                                                    
     rowkey3                                column=article:tag, timestamp=1545322109487, value=Hadoop,HBase,NoSQL                                            
     rowkey3                                column=article:title, timestamp=1545322109487, value=Head First HBase                                            
     rowkey3                                column=author:name, timestamp=1545322109487, value=nicholas                                                      
     rowkey3                                column=author:nickname, timestamp=1545322109487, value=lee                                                       
    3 row(s) in 0.1460 seconds
    
    
    这是添加数据的结果

     具体的结果需要自己去演示,关于hbase中的jar包问题,我尝试了很多办法,都不行,偶然得到了一个封装hbase的jar包,直接添加到依赖里就可以了

    https://pan.baidu.com/s/1mn2TbAYJVKKz_kdA3hRLeg  jar包的百度云链接
    RUSH B
  • 相关阅读:
    前缀和
    不用加减乘除做加法
    数组中重复的数字
    滑动窗口的最大值
    矩阵中的路径
    Redis 和 Memcached 的区别 Tair
    机器人的运动范围
    汉诺塔问题
    洗牌算法
    斐波那契查找算法(黄金分割查找算法)
  • 原文地址:https://www.cnblogs.com/tangsonghuai/p/10148332.html
Copyright © 2011-2022 走看看