Java连接HBase:
1.C:\Windows\System32\drivers\etc路径下hosts文件添加ip地址加主机名
2.新建maven-quickstart工程
3.添加依赖,可以选择更高版本
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.0</version>
</dependency>
4.连接数据库
hbase-site.xml文件
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.64.188</value>
<description>The direction shared by RegionServers</description>
</property>
</configuration>
java多线程使用连接:
//多线程使用连接,推荐使用!
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
public class HbaseMultiConnection {
//Connection是重量级的连接,是线程安全的,一个客户端应该只创建一个连接,类似单例模式
//因此推荐使用多线程连接
//声明一个静态属性
public static Connection connection = null;
static {
//创建连接配置,实际开发中一般新建hbase-site.xml作为配置文件,
// 内容复制hbase下conf的hbase-site.xml的property:hbase.zookeeper.quorum内容
// Configuration conf = new Configuration();
// //添加配置参数
// conf.set("hbase.zookeeper.quorum", "192.168.64.188");
//创建连接,空参为使用读取本地文件的形式添加参数,默认使用同步连接
try {
connection = ConnectionFactory.createConnection();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void close() throws IOException {
//判断连接是否为null
if (connection != null) {
connection.close();
}
}
public static void main(String[] args) throws IOException {
//直接使用创建好的连接
//找到对应的表
Table table = connection.getTable(TableName.valueOf("mydemo:userinfos"));
//1.查询所有的数据
Scan scan = new Scan();
ResultScanner results = table.getScanner(scan);
//循环获取数据
for (Result rs : results) {
System.out.println(new String(rs.getValue("base".getBytes(), "username".getBytes())));
}
HbaseMultiConnection.close();
}
}
连接的使用测试:
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import java.io.IOException;
public class HBaseDDL {
//声明一个静态属性,在任何一个类里调用连接,都会引用同一个连接
public static Connection connection = HbaseMultiConnection.connection;
/*
创建命名空间
@param namespace 命名空间名称
*/
public static void createNameSpace(String namespace) throws IOException {
//获取admin
Admin admin = connection.getAdmin();
//2.调用方法,创建命名空间
//2.1创建命名空间描述的builder
NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);
//2.2给命名空间添加需求
builder.addConfiguration("user","atguigu");
//2.3使用builder构造出对应的添加完参数的对象,完成创建
//此处的异常属于本方法的异常,应手动处理而非抛出
try {
admin.createNamespace(builder.build());
} catch (IOException e) {
System.out.println("命名空间已存在");
e.printStackTrace();
}
//3.关闭admin
admin.close();
}
/*
判断表格是否存在
@param namespace 命名空间名
@param tableName 表名
@return true表示存在
*/
public static boolean isTableExists(String namespace,String tableName) throws IOException {
//1.获取admin
Admin admin = connection.getAdmin();
//使用admin的tableExists方法判断表格是否存在;命名空间或表名不存在,就为false
boolean b = false;
try {
b = admin.tableExists(TableName.valueOf(namespace, tableName));
} catch (IOException e) {
e.printStackTrace();
}
//3.关闭连接
admin.close();
return b;
}
public static void main(String[] args) throws IOException {
//测试创建命名空间
createNameSpace("atguigu");
//测试表格是否存在
System.out.println(isTableExists("mydemo", "userinfos"));
//
System.out.println("******");
//关闭connection
HbaseMultiConnection.close();
}
}