• Hbase表的管理


      HBaseAdmin是一个类表示管理,通过这个类可执行管理角色。HBaseAdmin这个类属于org.apache.hadoop.hbase.client包。

    1. 创建HBaseAdim实例
    2. 获取表实例
    3. 创建列簇描述
    4. 向表描述中加载列簇
    5. 调用HBaseAdmin创建表

    后面可以通过HBaseAdmin对象判断表是否存在。

    可以new一个Put对象,将rowkey传进去,并用Put对象向表中添加列和value值。

      1 package top.tianyz.hbase.api;
      2 
      3 import org.apache.hadoop.conf.Configuration;
      4 import org.apache.hadoop.hbase.HColumnDescriptor;
      5 import org.apache.hadoop.hbase.HTableDescriptor;
      6 import org.apache.hadoop.hbase.TableName;
      7 import org.apache.hadoop.hbase.client.*;
      8 import org.apache.hadoop.hbase.util.Bytes;
      9 import org.junit.Before;
     10 import org.junit.Test;
     11 
     12 import java.io.BufferedReader;
     13 import java.io.FileReader;
     14 import java.io.IOException;
     15 import java.util.ArrayList;
     16 
     17 public class Demo03HbaseApi {
     18     private HConnection connection;
     19     private HBaseAdmin hBaseAdmin;
     20     @Before
     21     public void Before() {
     22         Configuration configuration = new Configuration();
     23 
     24         configuration.set("hbase.zookeeper.quorum", "master:2181");
     25 
     26         try {
     27             connection = HConnectionManager.createConnection(configuration);
     28             hBaseAdmin = new HBaseAdmin(configuration);
     29 
     30             System.out.println("zk连接建立成功!");
     31         } catch (IOException e) {
     32             e.printStackTrace();
     33         }
     34     }
     35 
     36     //创建表
     37     @Test
     38     public void CreateTable() throws IOException {
     39 
     40         //HTableDescriptor student = hBaseAdmin.getTableDescriptor(TableName.valueOf("student"));
     41         HTableDescriptor student =new HTableDescriptor(TableName.valueOf("student"));
     42         HColumnDescriptor info = new HColumnDescriptor("info");
     43 //        info.setTimeToLive(10);
     44 //        info.setMaxVersions(10);
     45         student.addFamily(info);
     46         //创建表student
     47         hBaseAdmin.createTable(student);
     48     }
     49 
     50     // 删除表
     51     @Test
     52     public void DropTable() {
     53         try {
     54             if (hBaseAdmin.tableExists("student")) {
     55                 hBaseAdmin.disableTable("student");
     56                 hBaseAdmin.deleteTable("student");
     57             }
     58         } catch (IOException e) {
     59             e.printStackTrace();
     60         }
     61     }
     62 
     63     //添加一列
     64     @Test
     65     public void PutOne() throws IOException {
     66         HTableInterface student = connection.getTable("student");
     67 
     68         Put put = new Put("001".getBytes());
     69 
     70         put.add("info".getBytes(), "name".getBytes(), "张三".getBytes());
     71 
     72         student.put(put);
     73     }
     74 //   增加多列
     75     @Test
     76     public void PutMore() throws IOException {
     77 
     78         //批量插入数据
     79         ArrayList<Put> puts = new ArrayList<Put>();
     80 
     81         try {
     82 
     83             //获取表的实例
     84             HTableInterface student = connection.getTable("student");
     85 
     86 
     87             BufferedReader bufferedReader = new BufferedReader(new FileReader("data/students.txt"));
     88 
     89             String line;
     90             while ((line = bufferedReader.readLine()) != null) {
     91 
     92                 String[] split = line.split(",");
     93 
     94                 String id = split[0];
     95                 String name = split[1];
     96                 Integer age = Integer.parseInt(split[2]);
     97                 String gender = split[3];
     98                 String clazz = split[4];
     99 
    100 
    101                 //构建put对象   一学号作为rowkey
    102                 Put put = new Put(id.getBytes());
    103 
    104                 //增加列
    105                 put.add("info".getBytes(), "name".getBytes(), name.getBytes("utf-8"));
    106 
    107                 //Bytes.toBytes(age)  将基本数据类型转换成字节数组
    108                 put.add("info".getBytes(), "age".getBytes(), Bytes.toBytes(age));
    109 
    110                 put.add("info".getBytes(), "gender".getBytes(), gender.getBytes());
    111                 put.add("info".getBytes(), "clazz".getBytes(), clazz.getBytes());
    112 
    113                 //将put放到集合中
    114                 puts.add(put);
    115 
    116             }
    117 
    118 
    119             //批量插入数据
    120             student.put(puts);
    121 
    122         } catch (Exception e) {
    123             e.printStackTrace();
    124         }
    125     }
    126 
    127     @Test
    128     public void get() {
    129         try {
    130             HTableInterface student = connection.getTable("student");
    131 
    132             //构建get对象   指定rowkey
    133             Get get = new Get("1500100001".getBytes());
    134 
    135             //执行查询  返回 result
    136             Result result = student.get(get);
    137 
    138             //取出rowkey
    139             String id = Bytes.toString(result.getRow());
    140 
    141 
    142             // 1、直接通过列名取值   如果列名不存在 返回对应类型的默认值
    143             byte[] bytes = result.getValue("info".getBytes(), "name".getBytes());
    144             //通过String的构造函数 构建字符串
    145             //String name = new String(bytes, "utf-8");
    146 
    147             //hbase  推荐方式
    148             String name = Bytes.toString(bytes);
    149 
    150             //int  类型  Bytes.toInt  转换
    151             int age = Bytes.toInt(result.getValue("info".getBytes(), "age".getBytes()));
    152 
    153             String gender = Bytes.toString(result.getValue("info".getBytes(), "gender".getBytes()));
    154             String clazz = Bytes.toString(result.getValue("info".getBytes(), "clazz".getBytes()));
    155 
    156             System.out.println(id + "	" + name + "	" + age + "	" + gender + "	" + clazz);
    157 
    158         } catch (IOException e) {
    159             e.printStackTrace();
    160         }
    161     }
    162 }
  • 相关阅读:
    Apache+PHP配置过程详解以及常见问题
    Apache+php+mysql在windows下的安装与配置图解 写的还不错也算经典新手看看 熟手绕过
    squid和memcache区别
    转 Anaconda启动卡死的解决方案
    转 救命的教程 anaconda下载安装包网络错误的解决办法
    转 Anaconda环境管理
    转: opencv4.0.0 +opencv_contrib在vs2015中编译
    windows下pycharm使用Anaconda安装包环境
    美赛论文写作--写作规范
    Java--对象和引用 转载
  • 原文地址:https://www.cnblogs.com/zzzzrrrr/p/13073903.html
Copyright © 2020-2023  润新知