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 + "\t" + name + "\t" + age + "\t" + gender + "\t" + clazz);
157 
158         } catch (IOException e) {
159             e.printStackTrace();
160         }
161     }
162 }

 

posted @ 2020-06-09 17:13  会飞的猪、li  阅读(256)  评论(0编辑  收藏  举报