☀️HBASE的JAVA API操作☀️ HBASE的过滤器查询☀️用到Hbase的时候可以通过本文快速的查看API用途《❤️记得收藏❤️》

Posted 一马什么梅一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了☀️HBASE的JAVA API操作☀️ HBASE的过滤器查询☀️用到Hbase的时候可以通过本文快速的查看API用途《❤️记得收藏❤️》相关的知识,希望对你有一定的参考价值。

前言:

Hbase原理是面试的重点项([面试重点项]

今天,小姨子跟我摊牌:“姐夫,我喜欢你很久了,我知道你也喜欢我,你敢不敢跟我姐离婚,跟我浪迹天涯?”没等她说完,我把她拉进卧室,指了指床头上的婚纱照:“你看我跟你姐那么恩爱”,然后拉着她进书房,指了指墙上贴满的“市散打冠军”“市跆拳道冠军”的奖状:“你姐又那么优秀,我怎么舍得离开她。”

HBASE JAVA API

1、HBASE服务的连接

1.1 准备工作-下载maven并导入maven依赖

<dependency>
	<groupId>org.apache.hbase</groupId>
	<artifactId>hbase-client</artifactId>
	<version>1.2.1</version>
</dependency>

1.2 准备工作-修改hosts文件

在window中hosts(要把所有的关于master的映射也配置上,否则无法连接)
192.168.49.150 hbase1
192.168.49.151 hbase2
192.168.49.152 hbase3
192.168.49.153 hbase4

1.3 HBase服务连接代码

/**
* 连接到HBase的服务
*/
public class Demo1_Conn {
	public static void main(String[] args) throws IOException {
	//1. 获取连接配置对象
	Configuration configuration = new Configuration();
	//2. 设置连接hbase的参数
	configuration.set("hbase.zookeeper.quorum",
	"centos2:2181,centos3:2181,centos4:2181");
	//3. 获取Admin对象
	HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration);
	//4. 检验指定表是否存在,来判断是否连接到hbase
	boolean flag = hBaseAdmin.tableExists("ns1:user_info");
	//5. 打印
	System.out.println(flag);
	}
}

2 Namespace操作

2 Namespace操作

/**
* 操作namespace
*/
public class Demo2_Namespace {
	private HBaseAdmin hBaseAdmin;
	@Before
	public void before() throws IOException {
	//1. 获取连接配置对象
	Configuration configuration = new Configuration();
	//2. 设置连接hbase的参数
	configuration.set("hbase.zookeeper.quorum",
	"centos2:2181,centos3:2181,centos4:2181");
	//3. 获取Admin对象
	hBaseAdmin = new HBaseAdmin(configuration);
	}
	@After
	public void close() throws IOException {
	hBaseAdmin.close();
	}
}

2.2 创建namespace

	/**
	* 创建namespace
	*/
	@Test
public void createNamespace() throws IOException {
	//1. 创建namespace对象
	NamespaceDescriptor descriptor = NamespaceDescriptor.create("lixi").build();
	//2. 提交hbase中创建对象
	hBaseAdmin.createNamespace(descriptor);
}

2.3 解决连接对象过时问题

	@Before
public void before2() throws IOException {
	//1. 获取连接配置对象
	Configuration configuration = new Configuration();
	//2. 设置连接hbase的参数
	configuration.set("hbase.zookeeper.quorum",
	"centos2:2181,centos3:2181,centos4:2181");
	//3. 获取Admin对象
	Connection connection = ConnectionFactory.createConnection(configuration);
hBaseAdmin = (HBaseAdmin) connection.getAdmin();
}

2.4 提取工具类

/**
* HBase Client工具类
*/
public class HBaseUtils {
private static final Logger logger = Logger.getLogger(HBaseUtils.class);
private final static String CONNECT_KEY = "hbase.zookeeper.quorum";
private final static String CONNECT_VALUE =
"centos2:2181,centos3:2181,centos4:2181";
/**
* 获取Admin对象
*/
public static Admin getAdmin() {
	//1. 获取连接配置对象
	Configuration configuration = new Configuration();
	//2. 设置连接hbase的参数
	configuration.set(CONNECT_KEY, CONNECT_VALUE);
	//3. 获取Admin对象
	Connection connection = null;
	Admin admin = null;
try {
	connection = ConnectionFactory.createConnection(configuration);
	admin = connection.getAdmin();
	} catch (IOException e) {
	logger.warn("连接HBase的时候异常!", e);
}
	return admin;
}
	public static void close(Admin admin) {
	if(null != admin) {
	try {
	admin.close();
	admin.getConnection().close();
	} catch (IOException e) {
logger.warn("关闭admin的时候异常!", e);
	}
}
}
}

2.5 使用工具类操作Namespace对象——列举Namesapce

/**
* 列举namespace
*/
@Test
public void listNamesapce() throws IOException {
	//1. 获取admin对象
	Admin admin = HBaseUtils.getAdmin();
	//2. 获取namespace的所有描述器
	NamespaceDescriptor[] namespaceDescriptors =
	admin.listNamespaceDescriptors();
	//3. 遍历
	for (NamespaceDescriptor descriptor : namespaceDescriptors) {
	System.out.println(descriptor);
}
	//4. 关闭
	HBaseUtils.close(admin);
}

2.6 列举Namespace对应的表名

@Test
public void listNamespaceTables() throws IOException {
//1. 获取admin对象
Admin admin = HBaseUtils.getAdmin();
//2. 获取name所有的表名
TableName[] tableNames = admin.listTableNamesByNamespace("ns1");
//3. 遍历
for(TableName tableName : tableNames) {
System.out.println(tableName.getNameAsString());
}
//4. 关闭
HBaseUtils.close(admin);
}

2.7 列举所有Namespace对应所有的表

/**
* 列举所有namesacpe对应表名
*/
@Test
public void listAllNamespaceTables() throws IOException {
//1. 获取admin对象
Admin admin = HBaseUtils.getAdmin();
//2. 获取name所有的表名
TableName[] tableNames = admin.listTableNames();
//3. 遍历
for(TableName tableName : tableNames) {
System.out.println(tableName.getNameAsString());
}
//4. 关闭
HBaseUtils.close(admin);
}

2.8 列出指定Namespace指定的表描述器

/**
* 列举所有namesacpe对应表描述器
*/
@Test
public void listAllNamespaceTableDescriptor() throws IOException {
//1. 获取admin对象
Admin admin = HBaseUtils.getAdmin();
//2. 获取name所有的表名
HTableDescriptor[] tableDescriptors =
admin.listTableDescriptorsByNamespace("ns1");
//3. 遍历
for(HTableDescriptor descriptor : tableDescriptors) {
System.out.println(descriptor.getTableName());
}
//4. 关闭
HBaseUtils.close(admin);
}

2.9 删除Namespace

/**
* 删除namespace
* 只能删除空的namespace
*/
@Test
public void dropNamespace() throws IOException {
//1. 获取admin对象
Admin admin = HBaseUtils.getAdmin();
//2. 删除
admin.deleteNamespace("lee");
//3. 关闭
HBaseUtils.close(admin);
}

3 Table DDL

3.1 设计模板类

/**
* Table's CRUD DDL
*/
public class Demo4_Table {
Admin admin = HBaseUtils.getAdmin();
@After
public void after() {
HBaseUtils.close(admin);
}
}

3.2 建表

/**
* create 't2', {NAME => 'default', VERSIONS => 1}
*/
@Test
public void createTable() throws IOException {
//1. 创建表描述器
HTableDescriptor tableDescriptor = new
HTableDescriptor(TableName.valueOf("user_info"));
//2. 创建列簇表述qi
HColumnDescriptor columnDescriptor = new HColumnDescriptor("base_info");
//2.1 设置列簇版本从1到5
columnDescriptor.setVersions(1, 5);
columnDescriptor.setTimeToLive(24*60*60); // 秒为单位
// columnDescriptor.setMinVersions(1);
// columnDescriptor.setMaxVersions(5);
// columnDescriptor.setBloomFilterType(BloomType.ROW);
// columnDescriptor.setDFSReplication(3); // 设置HBase数据存放的副本数
HColumnDescriptor columnDescriptor2 = new HColumnDescriptor("extra_info");
columnDescriptor2.setVersions(1, 5);
columnDescriptor2.setTimeToLive(24*60*60); // 秒为单位
//2.2 将列簇添加到表中
tableDescriptor.addFamily(columnDescriptor);
tableDescriptor.addFamily(columnDescriptor2);
//3. 提交
admin.createTable(tableDescriptor);
}

3.3 修改表1:如果直接修改之前的保存数据没有了,类似于sql的修改,应该先查后改

/**
* 修改表1
*
*/
@Test
public void modifyTable() throws IOException {
//1. 创建表描述器
TableName tableName = TableName.valueOf("user_info");
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
//2. 创建列簇表述qi
HColumnDescriptor columnDescriptor = new HColumnDescriptor("lixi_info");
//2.1 设置列簇版本从1到5
columnDescriptor.setVersions(1, 5);
columnDescriptor.setTimeToLive(24*60*60); // 秒为单位
//2.2 将列簇添加到表中
tableDescriptor.addFamily(columnDescriptor);
//3. 提交
admin.modifyTable(tableName, tableDescriptor);
}

3.4 修改表2

/**
* 修改表2 : 在原来的基础之上进行修改
*
*/
@Test
public void modifyTable2() throws IOException {
//1. 创建表描述器
TableName tableName = TableName.valueOf("user_info");
HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
//2. 创建列簇表述qi
HColumnDescriptor columnDescriptor = new HColumnDescriptor("base_info");
//2.1 设置列簇版本从1到5
columnDescriptor.setVersions(1, 5);
columnDescriptor.setTimeToLive(24*60*60); // 秒为单位
//2.2 将列簇添加到表中
tableDescriptor.addFamily(columnDescriptor);
//3. 提交
admin.modifyTable(tableName, tableDescriptor);
}

3.5 删除列簇1

/**
* 修改表,删除列簇
*/
@Test
public void deleteColumnFamily() throws IOException {
//1. 创建表并删除列簇
TableName tableName = TableName.valueOf("user_info");
admin.deleteColumn(tableName, "lixi_info".getBytes());
}

3.6 删除列簇2

/**
* 删除列簇2
*/
@Test
public void deleteColumnFamily2() throws IOException {
//1. 创建表描述器
TableName tableName = TableName.valueOf("user_info");
HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
//2. 获取要删除的列簇描述器
HColumnDescriptor columnDescriptor =
tableDescriptor.removeFamily("base_info".getBytes());
//3. 删除
admin.modifyTable(tableName, tableDescriptor);
}

3.7 例举出某表的所有列簇

/**
* 例举出某表的所有列簇
*/
@Test
public void listColumnFamily() throws IOException {
//1. 获取表描述器
HTableDescriptor tableDescriptor =
admin.getTableDescriptor(TableName.valueOf("user_info"));
//2. 获取所有的列簇
HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();
//3. 遍历
for(HColumnDescriptor columnDescriptor : columnFamilies) {
System.out.println(columnDescriptor.getNameAsString());
System.out.println(columnDescriptor.getBlocksize());
System.out.println(columnDescriptor.getBloomFilterType());
}
}

3.8 删除表

/**
* 删除表
*/
@Test
public void dropTable() throws IOException {
TableName tableName = TableName.valueOf("t1");
if(admin.tableExists(tableName)) {
if (!admin.isTableDisabled(tableName)) {
admin.disableTable(tableName);
}
admin.deleteTable(TableName.valueOf("t1"));
}
}

4 Table DML

4.1 获取表对象

public static Table getTable() {
return getTable("ns1:user_info");
}
public static Table getTable(String tablename) {
Table table = null;
if(StringUtils.isNotEmpty(tablename)) {
try {
table = connection.getTable(TableName.valueOf(tablename));
} catch (IOException e) {
logger.warn("获取表产生异常!", e);
}
}
return table;
}
public static void close(Table table) {
if(table != null) {
try {
table.close();
} catch (IOException e) {
logger.warn("关闭table的时候产生异常!", e);
}
}
}

4.2 修改HBaseUtils

/**
* HBase Client工具类
*/
public class HBaseUtils {
private static final Logger logger = Logger.getLogger(HBaseUtils.class);
private final static String CONNECT_KEY = "hbase.zookeeper.quorum";
private final static String CONNECT_VALUE =
"centos2:2181,centos3:2181,centos4:2181";
private static Connection connection;
static {
//1. 获取连接配置对象
Configuration configuration = HBaseConfiguration.create();
//2. 设置连接hbase的参数
configurationⅤ:zookeeper的相关Java Api

❤️让人心跳加速的陌陌案例,大数据必需学会的基础案例!❤️ 推荐收藏

❤️让人心跳加速的陌陌案例,大数据必需学会的基础案例!❤️ 推荐收藏

2021年大数据Kafka:❤️Kafka的java API编写❤️

2021年大数据Kafka:❤️Kafka的java API编写❤️

❤️高级JAVA开发必备技能❤️java8 新日期时间API(JSR-310:实战+源码分析),5万字详解(JAVA 小虚竹,建议收藏)