梦入琼楼寒有月,行过石树冻无烟

HBase API 使用

通常 HBase API 的使用是通过 Apache HBase Client 他主要提供了操作 HBase API 的一系列接口和类,新建 Maven 项目后引入依赖即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>3.0.0-alpha-2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>3.0.0-alpha-2</version>
<type>pom</type>
</dependency>
Name Info
Admin HBase 的管理 API。
Attributes
BufferedMutator 用于与类似于 Table 的单个 HBase 表进行通信,但用于批量异步放置。
BufferedMutator.ExceptionListener 侦听 BufferedMutator 上的异步异常。
Connection 一个集群连接,封装了与实际服务器的较低级别的单个连接以及与 zookeeper 的连接。
HConnection
HTableInterfaceFactory
RegionLocator 用于查看单个 HBase 表的区域位置信息。
ResultScanner 客户端扫描接口。
Row 一行
Table 一个表

如果需要通过 API 操作 HBase 中的 CURD,那么就需要通过 HBase client 依赖中的 Admin 借口,创建后通过 Table 实例进行访问,以此向表中添加一行内容,Put 对象用于插入指定值、目标列以及时间戳等。

使用 put 提交更新后如果需要获取,那么可以通过 Get 实列进行查询,在特定的行中获取内容,亦或者使用 scan 设置一个扫描仪来返回结果,通常你也可以使用 Delete 来删除单元格或整个 row。

但在此之前你需要通过告诉配置对象你的客户端在那个地方连接,同工厂你可以将 hbase-site.xml 以及 core-site.xml 放在 Maven 项目文件中的 src/main/resources 文件夹内,此时 HbaseConfiguration 会自动帮你寻找。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;


public class helloHbase {
public static void main (String[] args) throws IOException {

// 自动检测 hbase-site.xml 和 core-site.xml 配置
Configuration config = HBaseConfiguration.create();
config.addResource("core-site.xml");
config.addResource("hbase-site.xml");
config.addResource("hdfs-site.xml");
config.set("zookeeper.znode.parent","/resources");
config.set("hbase.zookeeper.property.clientPort","2181");
config.set("hbase.zookeeper.quorum","192.168.115.10,192.168.115.11,192.168.115.12,192.168.115.13,192.168.115.14");

// 创建一个链接,用于连接集群,之后关闭
Connection connection = ConnectionFactory.createConnection(config);
try {

// 实列化 Table 对象
Table table = connection.getTable(TableName.valueOf("test"));
try {
// 通过 Put 构造函数添加一行
Put p = new Put(Bytes.toBytes("row2"));

// 向该行插入一条信息
p.addColumn(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"),
Bytes.toBytes("Some Value"));
table.put(p);

// 检索数据
Get g = new Get(Bytes.toBytes("row2"));
Result r = table.get(g);
byte [] value = r.getValue(Bytes.toBytes("myLittleFamily"),
Bytes.toBytes("someQualifier"));

// 返回 "Some Value"
String valueStr = Bytes.toString(value);
System.out.println("Get:" + valueStr);

// 使用 Scan 扫描
Scan s = new Scan();
s.addColumn(Bytes.toBytes("myLittleFamily"),Bytes.toBytes("someQualifier"));
ResultScanner scanner = table.getScanner(s);

try {
// Scan 返回 Result 实列
// 对于迭代使用 while 循环打印
for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
System.out.println("Found row: " + rr);
}
} finally {
// 完成后关闭 Scan 进程
scanner.close();
}
} finally {
// 关闭表和集群的连接
if (table != null) table.close();
}
} finally {
connection.close();
}
}
}
ERROR
https://stackoverflow.com/questions/71028364/java-api-operate-hbase-api-error-connecting-to-cluster-exception-making-rpc-to
⬅️ Go back