这是用api操作的时候,需要考虑Hbase的版本,这里使用Hbase 0.98.17,所以我们的api
从maven中引入配置
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>0.98.17-hadoop2</version>
</dependency>
1、 首先需要连接zookeeper获取数据。
需要引用键值对。
//@since 0.98.17-hadoop2
private final static String zkServers ="hadoop01.fandong.com:2182,hadoop01.fandong.com:2183,hadoop01.fandong.com:2184";
private final static String HBASE_ZOOKEEPER_QUORUM="hbase.zookeeper.quorum";
private static Configuration getConfig(){
Configuration conf = HBaseConfiguration.create();
conf.set(HBASE_ZOOKEEPER_QUORUM,zkServers);
return conf;
}
2、首先我们先创建一个命名空间,比如:dream
首先我们需要获取 HBaseAdmin 类,这个是Hbase的管理类。
其次需要 NamespaceDescriptor 这个命名空间的描述类。
/**
* 创建namespace
* @param nameSpace
* @return
* @since 0.98.17-hadoop02
*/
public static boolean createNamespace(String nameSpace){
try{
HBaseAdmin admin = new HBaseAdmin(getConfig());
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor
.create(nameSpace)
.build();
admin.createNamespace(namespaceDescriptor);
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
发现已经创建成功了,我们从shell看下是否真的OK了。
hbase(main):009:0> list_namespace
NAMESPACE
default
dream
hbase
weibo
4 row(s) in 0.0330 seconds
hbase(main):010:0>
发现我们的dream 已经在里面了。
我们还可以从hdfs 文件上看出是否创建OK了
--- 创建表
创建表比较复杂些,需要使用
HBaseAdmin
HTableDescriptor
HColumnDescriptor
创建表,我们设置缓存块的大小HFile,
保存的版本,columnDescriptor.setMinVersions(minVersion);
columnDescriptor.setMaxVersions(maxVersion); ,设定这个会按照时间戳保留多个版本。
/**
* create hbase table
* @param tableName
* @param cloumnFamily
* @param minVersion
* @param maxVersion
* @since 0.98.17-hadoop2
* @return
*/
public static boolean createTable(String tableName,String[] cloumnFamily,int minVersion,int maxVersion){
Configuration conf = HbaseHelper.getConfig();
try {
HBaseAdmin admin = new HBaseAdmin(conf);
HTableDescriptor descriptor = new HTableDescriptor(Bytes.toBytes(tableName));
HColumnDescriptor columnDescriptor =null;
for(String family : cloumnFamily){
columnDescriptor =new HColumnDescriptor(Bytes.toBytes(family));
columnDescriptor.setBlockCacheEnabled(true);
columnDescriptor.setBlocksize(1024);
columnDescriptor.setCompressionType(Compression.Algorithm.SNAPPY);
columnDescriptor.setMinVersions(minVersion);
columnDescriptor.setMaxVersions(maxVersion);
descriptor.addFamily(columnDescriptor);
}
admin.createTable(descriptor);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
--创建表 dream: content ,"info"
hbase(main):011:0> describe 'dream:content'
Table dream:content is ENABLED
dream:content
COLUMN FAMILIES DESCRIPTION
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '1',
BLOCKCACHE => 'true', BLOCKSIZE => '1024', REPLICATION_SCOPE => '0'}
1 row(s) in 0.0930 seconds
hbase(main):012:0>
----往表中写入数据
/**
* 向表中插入数据
* @param tableName
* @param put
*/
public static void put(String tableName,Put put){
try{
HTable table =new HTable(getConfig(),tableName);
table.put(put);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 向表中插入数据列
* @param tableName
* @param putlist
*/
public static void put(String tableName, List<Put> putlist){
try{
HTable table =new HTable(getConfig(),tableName);
table.put(putlist);
}catch (Exception e){
e.printStackTrace();
}
}
hbase(main):012:0> scan 'dream:content'
ROW COLUMN+CELL
myrow-1 column=info:address, timestamp=1574951897593, value=chian,shenzhen
myrow-1 column=info:content, timestamp=1574951897593, value=\xE5\xB0\xB1\xE8\xBF\x99\xE6\xA0\xB7\xE5\x90\xA7
myrow-1 column=info:title, timestamp=1574951897593, value=\xE6\x88\x91\xE7\x88\xB1Hbase
1 row(s) in 0.0720 seconds
hbase(main):013:0>
---读取api
/**
* 获取单行数据
* @param tableName
* @param get
* @return
*/
public static Result get(String tableName,Get get){
try{
HTable table =new HTable(getConfig(),tableName);
Result result = table.get(get);
return result;
}catch (Exception e){
e.printStackTrace();
return null;
}
}