hbase的Java基本操作
hbase的Java基本操作
建表,建列簇操作
private static Connection connection;
private static Admin admin; public static void createTable(String tableName, String[] fields) throws IOException {
if(admin.tableExists(TableName.valueOf(tableName)))
{
deleteTable(tableName);
}
//2.TableDescriptorBuilder.newBuilder构建表描述构建器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
for (int i=0;i<fields.length;i++)
{
//3.创建列簇构造描述器
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(fields[i]));
//4.构建列簇描述
ColumnFamilyDescriptor cfDes = columnFamilyDescriptorBuilder.build();
//建立表与列簇的关联关系
tableDescriptorBuilder.setColumnFamily(cfDes);
}
TableDescriptor tableDescriptor = tableDescriptorBuilder.build();
admin.createTable(tableDescriptor);
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();创建HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection创建HBase()连接
connection = ConnectionFactory.createConnection(configuration);
// 创建表,要给予HBase获取Admin对象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.创建表和列
String[] filed = {"H1", "H2", "H3"};
createTable(tablename, filed);
}
添加数据,指定表名,列簇列名,以及rowkey和对应的value
//添加数据
public static void addRecord(String tableName, String row, String[] fields, String[] values) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
String []column=new String[110];
String columnFamily="";
for(int i=0;i<fields.length;i++)
{
String []split=fields[i].split(":");
column[i]=split[1];
columnFamily=split[0];
}
Put put = new Put(Bytes.toBytes(row));
for(int i=0;i<values.length;i++)
{
put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column[i]),Bytes.toBytes(values[i]));
}
//5.使用htable表执行put操作
table.put(put);
//关闭htable表对象
table.close();
} public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();创建HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection创建HBase()连接
connection = ConnectionFactory.createConnection(configuration);
// 创建表,要给予HBase获取Admin对象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.创建表和列
// String[] filed = {"H1", "H2", "H3"};
// createTable(tablename, filed); //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
// 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
// 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
// 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
String[] values = {"2015001", "Zhangsan", "male", "23"};
String row = "Zhangsan";
addRecord(tablename, row, fields, values);
}
查看表中某rowkey的列簇下的所有值,或者单个列簇:列名的值
public static void scanColumn(String tableName,String rowKey, String column) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Get get = new Get(rowKey.getBytes());
if(column.contains(":"))
{
//查询指定rowkey和列簇下的指定列名
String[] split = column.split(":");
get.addColumn(Bytes.toBytes(split[0]),Bytes.toBytes(split[1]));
Result result = table.get(get);
byte[] value = result.getValue(Bytes.toBytes(split[0]), Bytes.toBytes(split[1]));
if(Bytes.toString(value)!=null)
System.out.println(Bytes.toString(value));
else
System.out.println("null");
}
else
{
//查询指定rowkey和列簇下的所有数据
get.addFamily(column.getBytes());
Result result = table.get(get);
Cell[] cells = result.rawCells();
for (Cell cell:cells)
{
//获取列簇名称
String cf = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
//获取列的名称
String colunmName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
//获取值
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
if(value!=null)
System.out.println(cf+":"+colunmName+"=>"+value);
else
System.out.println(cf+":"+colunmName+"=>"+"null");
}
}
table.close();
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();创建HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection创建HBase()连接
connection = ConnectionFactory.createConnection(configuration);
// 创建表,要给予HBase获取Admin对象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.创建表和列
// String[] filed = {"H1", "H2", "H3"};
// createTable(tablename, filed);
//2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
// 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
// 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
// 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
// String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
// String[] values = {"2015001", "Zhangsan", "male", "23"};
// String row = "Zhangsan";
// addRecord(tablename, row, fields, values);
//3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
// 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
// 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
String column = "H1:S_Name";
String rowkey = "Zhangsan";
scanColumn(tablename, rowkey, column);
}
修改rowkey下的对应的单独的列簇:列名的值
public static void modifyData(String tableName,String rowkey,String column,String value) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
//修改操作
Put put = new Put(Bytes.toBytes(rowkey));
String[] split = column.split(":");
String columnFamily=split[0];
String columnName=split[1];
put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));
table.put(put);
//查看修改后的数据
Get get = new Get(rowkey.getBytes());
get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
Result result = table.get(get);
byte[] value2 = result.getValue(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
if(Bytes.toString(value2)!=null)
System.out.println(columnFamily+":"+columnName+"=>"+Bytes.toString(value2));
else
System.out.println("null");
System.out.println("修改成功!!");
table.close();
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();创建HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection创建HBase()连接
connection = ConnectionFactory.createConnection(configuration);
// 创建表,要给予HBase获取Admin对象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.创建表和列
// String[] filed = {"H1", "H2", "H3"};
// createTable(tablename, filed);
//2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
// 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
// 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
// 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
// String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
// String[] values = {"2015001", "Zhangsan", "male", "23"};
// String row = "Zhangsan";
// addRecord(tablename, row, fields, values);
//3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
// 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
// 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
// String column = "H1:S_Name";
// String rowkey = "Zhangsan";
// scanColumn(tablename, rowkey, column);
//4.modifyData(S修改表tableName,行row(可以用学生姓名S_Name表示),
// 列column指定的单元格的数据tring tableName, String row, String column)
String colum = "H1:S_Name";
String rowkey = "Zhangsan";
String value = "XiaoFengZai";
modifyData(tablename, rowkey, colum, value);
}
删除指定的rowkey内容
public static void deleteRow(String tableName, String row) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
//删除一条rowkey记录
Delete delete = new Delete(Bytes.toBytes(row));
table.delete(delete);
table.close();
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();创建HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection创建HBase()连接
connection = ConnectionFactory.createConnection(configuration);
// 创建表,要给予HBase获取Admin对象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.创建表和列
// String[] filed = {"H1", "H2", "H3"};
// createTable(tablename, filed);
//2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
// 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
// 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
// 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
// String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
// String[] values = {"2015001", "Zhangsan", "male", "23"};
// String row = "Zhangsan";
// addRecord(tablename, row, fields, values);
//3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
// 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
// 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
// String column = "H1:S_Name";
// String rowkey = "Zhangsan";
// scanColumn(tablename, rowkey, column);
//4.modifyData(S修改表tableName,行row(可以用学生姓名S_Name表示),
// 列column指定的单元格的数据tring tableName, String row, String column)
// String colum = "H1:S_Name";
// String rowkey = "Zhangsan";
// String value = "XiaoFengZai";
// modifyData(tablename, rowkey, colum, value);
//5.删除指定的rowkey内容
String rowkey="Zhangsan";
deleteRow(tablename,rowkey);
admin.close();
connection.close();
}
删除指定的表
public void deleteTable(String tablename)throws IOException
{
TableName tableName=TableName.valueOf("WATER_BILL");
if(admin.tableExists(tableName))
{
admin.disableTable(tableName);
admin.deleteTable(tableName);
}
}
hbase的Java基本操作的更多相关文章
- hbase使用-java操作
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courie ...
- Hbase配置java客户端
1.修改windows配置文件 C:\WINDOWS\system32\drivers\etc\hosts 将远程hbase和zookeeper主机的IP地址加进去 54.0.88.53 H ...
- 大数据学习路线分享-Hbase shell的基本操作完整流程
HBase的命令行工具,最简单的接口,适合HBase管理使用,可以使用shell命令来查询HBase中数据的详细情况.安装完HBase之后,启动hadoop集群(利用hdfs存储),启动zookeep ...
- Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结
转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbas ...
- 5 hbase-shell + hbase的java api
本博文的主要内容有 .HBase的单机模式(1节点)安装 .HBase的单机模式(1节点)的启动 .HBase的伪分布模式(1节点)安装 .HBase的伪分布模式(1节点)的启动 .HBase ...
- HBase的Java Api连接失败的问题及解决方法
分布式方式部署的HBase,启动正常,Shell操作正常,使用HBase的Java Api操作时总是连接失败,信息如下: This server is in the failed servers li ...
- hbase-shell + hbase的java api
本博文的主要内容有 .HBase的单机模式(1节点)安装 .HBase的单机模式(1节点)的启动 .HBase的伪分布模式(1节点)安装 .HBase的伪分布模式(1节点)的启动 .HBas ...
- HBase的java操作,最新API。(查询指定行、列、插入数据等)
关于HBase环境搭建和HBase的原理架构,请见笔者相关博客. 1.HBase对java有着较优秀的支持,本文将介绍如何使用java操作Hbase. 首先是pom依赖: <dependency ...
- Hbase关于Java常用API举例
1. HBase相关对Admin操作的的API封装在HBaseAdmin中,封装了HBase常用操作的API 使用方法: pom.xml <!-- https://mvnrepository.c ...
随机推荐
- maven使用心得
1.一个项目下创建module,需要在project的pom下加入module,这个工程的pom <?xml version="1.0" encoding="UTF ...
- 【转】PostgreSQL Index性能调优
Index(索引)这个概念对于很多熟悉关系型数据库的人来说,不是一个陌生的概念.当表中数据越来越多时,在查询时,为了避免全表查询(sequence scan)可以在查询相关的条件字段上添加索引.举例来 ...
- 【转】postgreSQL之autovacuum性能问题分析(二)
如上篇文章提到,如果出现了autovacuum的问题,那么这可能是个悲伤的故事.怎么解决? 笔者觉得可以从如下几个方面着手去考虑解决问题,可以避免一些坑.1) 持续观察,是不是autovacuum问题 ...
- dubbo学习(一)认识dubbo
一.发展背景 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是关键. 垂直应用架构 当访问量逐渐增大, ...
- 搜索引擎学习(六)Query的子类查询
Query的子类查询 PS:这是通用代码,下面的子类查询调用到的时候就不再写这部分的具体的实现过程了 /** * 构造IndexSearcher对象 * * @return * @throws Exc ...
- java.lang.UnsupportedOperationException: A TupleBackedMap cannot be modified.解决以及探究
java.lang.UnsupportedOperationException: A TupleBackedMap cannot be modified. at org.springframework ...
- git如何上传文件夹
git是不支持上传空文件夹的,文件夹里面必须有文件才可以 1.本地仓库上传文件夹到远程 在本地仓库新建一个文件夹,如果里面没有文件,那么$ git push origin master 不能将文件夹p ...
- scala 传值调用,传名调用
Scala的解释器在解析函数参数(function arguments)时有两种方式: 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部: 传名调用(call-by-na ...
- springmvc与mybatis整合时 java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required 异常
今天在整合springmvc与mybatis时,启动服务器遇到这样一个问题, by: java.lang.IllegalArgumentException: Property 'sqlSessionF ...
- 【宝塔面板】centOS部署前后端分离所有遇到的坑,Django
1:刚刚买完服务器,在宝塔面板安装完一切工具,Django顺利运行后(不能运行一般是起了中文名) # 问题:想迁移数据库,结果发现-bash: python3: command not found# ...