java操作hbase的配置文件
4.0.0
org.example
doit15-hbase
1.0-SNAPSHOT
UTF-8
1.8
1.8
org.apache.zookeeper
zookeeper
3.4.6
junit
junit
4.12
compile
org.apache.hbase
hbase-client
2.0.4
org.apache.hadoop
hadoop-client
2.7.7
org.apache.hadoop
hadoop-common
2.7.7
org.apache.hbase
hbase-server
2.0.4
org.apache.hbase
hbase-mapreduce
2.0.4
com.google.code.gson
gson
2.8.5
org.apache.phoenix
phoenix-core
5.0.0-HBase-2.0
org.apache.maven.plugins
maven-compiler-plugin
3.5.1
1.8
org.apache.maven.plugins
maven-assembly-plugin
2.6
jar-with-dependencies
make-assembly
package
single
获取客户端数据
package doit01;
import Utils.HbaseUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
public class GatDt {
public static void main(String[] args) throws IOException {
//配置对象
Configuration conf = HBaseConfiguration.create();
//设置zk集群信息,第一个是加载zookeeper信息
conf.set("hbase.zookpeer.quorum","linux01:2181,linux02:2181,linux03:2181");
//基于配置信息,获取hbase的连接对象
//ConnectionFactory 是hbase的一个客户端
//createConnection() 表示创建一个连接一个对象
Connection conn = ConnectionFactory.createConnection(conf);
// TableName tableName = new TableName(); TableName里面是一个private方法不能在外面new
// 但是,可以在外面使用
//这样就拿到了表名
TableName tb_user = TableName.valueOf("tb_user");
Table user = conn.getTable(tb_user);//通过连接对象获取表名
//获取表对象,代表user表
//创建get对象,代表一行的数据,
//取第一行数据,每一行的数据以字节的形式存储
Get get = new Get("rk001".getBytes());//表示hbase的客户端
//表中获取一行数据,一行数据里面包括
// 行键 列族s 属性s
Result result = user.get(get);
HbaseUtils.showData(result);
//getTable() 里面要传一个tableName,getTable里面没有table,必须要new一个tableName
//Table tb_user = conn.getTable("tb_user".getBytes());
//result.advance() 表示是否有下一个单元格
//result.current当前单元格书否存在
while (result.advance()){
//单元格 行键 :列族 属性 v:值
Cell cell = result.current();
/*byte[] rowArray = cell.getRowArray();//行键
byte[] familyArray = cell.getFamilyArray();//列族
byte[] qualifierArray = cell.getQualifierArray();//属性
byte[] valueArray = cell.getValueArray();//值*/
//如果这样直接打印的话,会出现乱码现象为了解决这一问题,CellUtil 可以解析这些类
byte[] family = CellUtil.cloneFamily(cell);//列族
byte[] qualifier = CellUtil.cloneQualifier(cell);//属性
byte[] value = CellUtil.cloneValue(cell);//值
byte[] row = CellUtil.cloneRow(cell);//行键
System.out.println(new String(qualifier)+"----"+new String(value)+new String(family)+new String(row));
}
user.close();
conn.close();
}
}
java客户端在hbase里面取值,
1.获取配置文件
2.连接zookpeer
3.基于配置文件和zk,创建连接对象
4.调用一个表名,应该是把表名调到每一个存储空间
5.然后再创建连接对象后,通过连接对象,获取该表
6.通过该表调用里面一行数据,一行用rowkey表示,
7.把这一行数据取出来,返回一个result
8.这个result就表示这一行数据,
9.如果下一行存在,就调用该行数据返回一个单元格
10.解析单元格里面的内容,调用里面的内容
11.打印
package doit16;
import Utils.HbaseUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
public class GetTableData {
public static void main(String[] args) throws IOException {
//第一步获取配置文件信息
Configuration conf = HBaseConfiguration.create();
//连接zookpeer
conf.set("hbase.zookeeper.quorum", "linux01:2181,linux02:2181,linux03:2181");
//基于配置信息,创建hbase连接对象
Connection conn = ConnectionFactory.createConnection(conf);
//api里面有一个tableName,被私有化不能创建,但是可以直接调用,把对应的 表调用出来,
TableName tb_user = TableName.valueOf("tb_user");
//hbase创建了连接对象,连接到hbase 然后再调用getTable调用hbase里面对应的表,
Table user = conn.getTable(tb_user);
//表在调用里面的一行
Get get = new Get("rk002".getBytes());
//通过get吧这一行内容取出来
Result result = user.get(get);
//HbaseUtils.showData(result);
//通过p判断是否存在下一行,如果有 则调用本行 返回单元格cell
//通过CellUtil解析单元格里面的内容,在返回字节数组
//打印出来
while(result.advance()){
// 单元格 K 行键:列族:属性 V:值
Cell cell = result.current();
byte[] row = CellUtil.cloneRow(cell); // 行键
byte[] family = CellUtil.cloneFamily(cell); // 列族
byte[] qua = CellUtil.cloneQualifier(cell); // 属性
byte[] v = CellUtil.cloneValue(cell); // 值
System.out.println(new String(qua)+"--"+new String(v));
}
user.close();
conn.close();
}
}
创建表
import Utils.HbaseUtils;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
/**
*如果创建一个表,
* 1.先获取表的管理对象
* 2.创建表的构建器,在构建器里面把表的名字放进去,在通过标的构建器创建表
* 3.表的构建器和表都构造完成后,再创建列族构造器,然后再创建列族,把创建好的,族放进表中,
* 4.开始构建表,管理构建的表
*/
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//admin:管理表的对象,表 名称空间 快照
//table 表的数据有关 get scan put
public class TableDemo {
public static void main(String[] args) throws Exception {
//获取表的管理对象
Admin admin = HbaseUtils.getHbaseAdmin();
//表的构建器 stu就是一个表的构建器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_stu"));
//列族构建器
ColumnFamilyDescriptorBuilder familyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf1"));
//在列族对象里面设置一些属性
familyDescriptorBuilder.setMaxVersions(5);
familyDescriptorBuilder.setTimeToLive(240);
//列族对象
ColumnFamilyDescriptor columnFamilyDescriptor = familyDescriptorBuilder.build();
//把列族对象放进表的构建器里面
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor);
//开始构建表
TableDescriptor tableDescriptor = tableDescriptorBuilder.build(); //tableDescriptor就是一个表
//列族的构建器
//建表语句
admin.createTable(tableDescriptor); //管理所创建的一个表
admin.close();
}
}
预分表对象
public static void main(String[] args) throws Exception {
//创建表的管理对象
Admin admin = HbaseUtils.getHbaseAdmin();
// CreateTable(admin);
// admin.close();
//预分region表对象
//1.创建表的构造器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_stu3"));
//创建一个列族构造器
ColumnFamilyDescriptorBuilder familyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf3"));
//设置一些属性
familyDescriptorBuilder.setMaxVersions(5);
//创建一个列族
ColumnFamilyDescriptor familyDescriptor = familyDescriptorBuilder.build();
//把列族放进表构造器里面
tableDescriptorBuilder.setColumnFamily(familyDescriptor);
//建表
TableDescriptor build = tableDescriptorBuilder.build();
//预分region表对象
//用一个二维数组,放置切割后的region
byte[][] keys = new byte[][] {"rk025".getBytes(),"rk051".getBytes()};
admin.createTable(build,keys);
admin.close();
}
预分region,也就是当一个数据表非常大的时候,如果同时插入到一个region里面就会出现热点问题,解决办法就是,把数据表切分成多分,通过rowkey来划分,,如果 rk025 rk051 rk075 这样就可以划分为四数据块分别存到不同的四个region里面,
create "tb_user" , "cf", SPLITS=>[' rk026 ' , ' rk051 ' , ' rk076 '] 进行分块的语法 查看分块的 list_region "tb_user"
删除表操作
public static void main(String[] args) throws Exception {
//创建表的管理对象
Admin admin = HbaseUtils.getHbaseAdmin();
// CreateTable(admin);
// admin.close();
//执行删除表的操作
//在执行删除操作时,先禁用该表,
TableName tb_stu = TableName.valueOf("tb_stu2");
if(admin.tableExists(tb_stu)){
admin.disableTable(tb_stu);
if(admin.isTableDisabled(tb_stu)){
//删除表
admin.deleteTable(tb_stu);
}else {
System.out.println("请先禁用表");
}
}else {
System.out.println("表不存在");
}
admin.close();
}
表的简建立,修改,查询,删除操作的封装操作
package doit16;
import Utils.HbaseUtils;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
/**
*如果创建一个表,
* 1.先获取表的管理对象
* 2.创建表的构建器,在构建器里面把表的名字放进去,在通过标的构建器创建表
* 3.表的构建器和表都构造完成后,再创建列族构造器,然后再创建列族,把创建好的,族放进表中,
* 4.开始构建表,管理构建的表
*/
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//admin:管理表的对象,表 名称空间 快照
//table 表的数据有关 get scan put
public class TableDemo {
public static void main(String[] args) throws Exception {
//创建表的管理对象
Admin admin = HbaseUtils.getHbaseAdmin();
ChangeTableContain(admin);
}
private static void ChangeTableContain(Admin admin) throws IOException {
// CreateTable(admin);
// admin.close();
// DeleteTable(admin);
/*
//方法一:直接通过创建表的构造器,和表,然后创建列族构造器和列族,然后把列族放进表的构造器里面,最后创建完成表,然后用admin修改标的列族
//获取表的连接对象
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_user"));
//创建列族构造器
ColumnFamilyDescriptorBuilder familyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder("cf4".getBytes());
//创建列族
ColumnFamilyDescriptor familyDescriptor = familyDescriptorBuilder.build();
//把列族放进表的构造器里面
tableDescriptorBuilder.setColumnFamily(familyDescriptor);
//创建表
TableDescriptor build = tableDescriptorBuilder.build();
//修改表
admin.modifyTable(build);
admin.close();
//成功修改了列族的属性*/
/**
* 对于在Linux01上已经存在的表,就不需要创建表如果修改里面的属性或值,可以直接创建一个列族构造器,用列族构造器,创建一个列族,通过admin调用表以及列族
* 这样就可以,调用表和列族,从而实现修改的目的
*/
//获取表的名称
TableName tb_user = TableName.valueOf("tb_user");
//创建一个列族构造器
ColumnFamilyDescriptorBuilder cfb = ColumnFamilyDescriptorBuilder.newBuilder("cf4".getBytes());//这个只能修改已经存在的列族
//修改列族里面的属性
cfb.setMaxVersions(5);
cfb.setTimeToLive(240);
//构造列族
ColumnFamilyDescriptor cfd = cfb.build();
admin.modifyColumnFamily(tb_user,cfd);
}
private static void DeleteTable(Admin admin) throws IOException {
//执行删除表的操作
//在执行删除操作时,先禁用该表,
TableName tb_stu = TableName.valueOf("tb_stu2");
if(admin.tableExists(tb_stu)){
admin.disableTable(tb_stu);
if(admin.isTableDisabled(tb_stu)){
//删除表
admin.deleteTable(tb_stu);
}else {
System.out.println("请先禁用表");
}
}else {
System.out.println("表不存在");
}
}
private static void CreateRegionTable(Admin admin) throws IOException {
//预分region表对象
//1.创建表的构造器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_stu3"));
//创建一个列族构造器
ColumnFamilyDescriptorBuilder familyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf3"));
//设置一些属性
familyDescriptorBuilder.setMaxVersions(5);
//创建一个列族
ColumnFamilyDescriptor familyDescriptor = familyDescriptorBuilder.build();
//把列族放进表构造器里面
tableDescriptorBuilder.setColumnFamily(familyDescriptor);
//建表
TableDescriptor build = tableDescriptorBuilder.build();
//预分region表对象
//用一个二维数组,放置切割后的region
byte[][] keys = new byte[][] {"rk025".getBytes(),"rk051".getBytes()};
admin.createTable(build,keys);
}
private static void CreateTable(Admin admin) throws IOException {
//表的构建器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_stu2"));
//列族的构建器
ColumnFamilyDescriptorBuilder familyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("fc2"));
//在列族里面放一些属性值
familyDescriptorBuilder.setMaxVersions(5);
familyDescriptorBuilder.setTimeToLive(240);
//构建列族
ColumnFamilyDescriptor columnFamilyDescriptor = familyDescriptorBuilder.build();
//把列族放进表中
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor);
//构建表
TableDescriptor tableDescriptor = tableDescriptorBuilder.build();
admin.createTable(tableDescriptor);
}
}