JaveHbaseAPI
Hbase API 类和数据模型的对应关系
HBaseAdmin
类:org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一个接口来管理 HBase 数据库的表信息。它提供的方法包括:创建表,删 除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。
HBaseConfiguration
类:org.apache.hadoop.hbase.HBaseConfiguration
作用:对 HBase 进行配置
HTableDescriptor
类: org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字极其对应表的列族
HColumnDescriptor
类: org.apache.hadoop.hbase.HColumnDescriptor
作用:维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添 加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。
列族被删除的时候,列族里面的数据也会同时被删除。
HTable
Put
类: org.apache.hadoop.hbase.client.Put
作用:用来对单个行执行添加操作
Get
类: org.apache.hadoop.hbase.client.Get
作用:用来获取单个行的相关信息
Result
类: org.apache.hadoop.hbase.client.Result
作用:存储 Get 或者 Scan 操作后获取表的单行值。使用此类提供的方法可以直接获取值 或者各种 Map 结构( key-value 对)
创建表
1package com.shujia; 23import org.apache.hadoop.conf.Configuration;
4import org.apache.hadoop.hbase.HBaseConfiguration; 5import org.apache.hadoop.hbase.HColumnDescriptor; 6import org.apache.hadoop.hbase.HTableDescriptor; 7import org.apache.hadoop.hbase.TableName; 8import org.apache.hadoop.hbase.client.Admin; 9import org.apache.hadoop.hbase.client.Connection;10import org.apache.hadoop.hbase.client.ConnectionFactory;1112import java.io.IOException;
13
14publicclass Demo01 {
15publicstaticvoid main(String[] args) throws IOException {
16
17//创建配置,指定zk集群
18 Configuration conf = HBaseConfiguration.create();
19 conf.set("hbase.zookeeper.quorum","master,node1,node2");
20
21//创建连接
22 Connection coon = ConnectionFactory.createConnection(conf);
23
24//创建admin对象
25 Admin admin = coon.getAdmin();
26
27//创建表
28 HTableDescriptor test_api = new HTableDescriptor(TableName.valueOf("test_api"));
29
30//创建列簇
31 HColumnDescriptor cf1 = new HColumnDescriptor("cf1");
32
33//配置列簇
34 cf1.setTimeToLive(20); //设置死亡时间20s
35 cf1.setMaxVersions(3); //设置版本
36
37//增加列簇
38 test_api.addFamily(cf1);
39
40//创建表
41 admin.createTable(test_api);
42
43//关闭连接
44 coon.close();
45 }
46 }
1package com.shujia; 23import org.apache.hadoop.conf.Configuration;
4import org.apache.hadoop.hbase.HBaseConfiguration; 5import org.apache.hadoop.hbase.HColumnDescriptor; 6import org.apache.hadoop.hbase.HTableDescriptor; 7import org.apache.hadoop.hbase.TableName; 8import org.apache.hadoop.hbase.client.*; 9import org.apache.hadoop.hbase.util.Addressing; 10import org.apache.hadoop.hbase.util.Bytes; 11import org.junit.After; 12import org.junit.Before; 13import org.junit.Test; 1415import javax.swing.tree.VariableHeightLayoutCache;
16import java.io.BufferedReader;
17import java.io.FileReader;
18import java.io.IOException;
19import java.util.ArrayList;
20
21publicclass Demo03API {
22 Connection conn;
23 TableName table=TableName.valueOf("test_api");
24
25 @Before
26publicvoid init() throws IOException {
27 Configuration conf = HBaseConfiguration.create();
28 conf.set("hbase.zookeeper.quorum","master,node1,node2");
29
30 conn = ConnectionFactory.createConnection(conf);
31 }
32//put
33 @Test
34publicvoid Put() throws IOException {
35 Table test_api = conn.getTable(TableName.valueOf("test_api"));
36 Put put = new Put("001".getBytes());
37 put.addColumn("cf1".getBytes(),"name".getBytes(),"张三".getBytes());
38 test_api.put(put);
39 }
40
41// putAll 读取students.txt 并将数据写入HBase
42 @Test
43publicvoid PutAll() throws IOException {
44// 创建students表 info
45 Admin admin = conn.getAdmin();
46 TableName studentsT = TableName.valueOf("students");
47// 判断表是否存在
48if (!admin.tableExists(studentsT)) {
49 HTableDescriptor students = new HTableDescriptor(studentsT);
50 HColumnDescriptor info = new HColumnDescriptor("info");
51 students.addFamily(info);
52 admin.createTable(students);
53 }
54
55 Table stu = conn.getTable(studentsT);
56
57
58 BufferedReader br = new BufferedReader(new FileReader("data/students.txt"));
59 String line = null;
60 ArrayList<Put> puts = new ArrayList<Put>();
61int batchSize = 11;
62while ((line = br.readLine()) != null) {
63
64// 读取每一行数据
65 String[] split = line.split(",");
66 String id = split[0];
67 String name = split[1];
68 String age = split[2];
69 String gender = split[3];
70 String clazz = split[4];
71 Put put = new Put(id.getBytes());
72 put.addColumn("info".getBytes(), "name".getBytes(), name.getBytes());
73 put.addColumn("info".getBytes(), "age".getBytes(), age.getBytes());
74 put.addColumn("info".getBytes(), "gender".getBytes(), gender.getBytes());
75 put.addColumn("info".getBytes(), "clazz".getBytes(), clazz.getBytes());
76 puts.add(put); // 将每条数据构建好的put对象加入puts列表
77if (puts.size() == batchSize) {
78 stu.put(puts); // 批量写入
79 puts = new ArrayList<Put>();
80 }
81 }
82if (puts.size() != 0) {
83 stu.put(puts); // 批量写入
84 }
85
86 }
87//get
88 @Test
89publicvoid Get() throws IOException {
90 Table test_api = conn.getTable(table);
91 Get get = new Get("001".getBytes());
92 Result rs = test_api.get(get);
93byte[] value = rs.getValue("cf1".getBytes(), "name".getBytes());
94 System.out.println( Bytes.toString(value));
95 }
96
97
98 @Test//alter table 修改表
99publicvoid alterTable() throws IOException {
100 Admin admin = conn.getAdmin();
101//获取表原有的结果
102 HTableDescriptor tableDescriptor = admin.getTableDescriptor(table);
103//获取所有列簇构成的数组
104 HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();
105//遍历列簇
106for (HColumnDescriptor columnFamily : columnFamilies) {
107//获取列簇名称
108 String cfName = columnFamily.getNameAsString();
109//对列簇名为cf1的进行修改
110if("cf1".equals(cfName)){
111//修改TTL
112 columnFamily.setTimeToLive(100000);
113 }
114 }
115//修改表结构
116 admin.modifyTable(table,tableDescriptor);
117
118
119 }
120
121 @After
122publicvoid closed() throws IOException {
123 conn.close();
124 }
125 }
以上是 JaveHbaseAPI 的全部内容, 来源链接: utcz.com/z/536013.html