hbase的基本操作
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,1. shell操作常见命令:[root@hadoop01 ~]# hbase shell #进入HBASE客户端hbase(main):001:0> help "dml" #获取一组
千家信息网最后更新 2025年02月05日hbase的基本操作
1. shell操作
常见命令:
[root@hadoop01 ~]# hbase shell #进入HBASE客户端hbase(main):001:0> help "dml" #获取一组命令的提示hbase(main):001:0> help "put" 获取一个单独命令的提示帮助hbase(main):001:0> exit #退出客户端
#查看hbase中的所有表hbase(main):001:0>list
创建表:
语法:create '表名','列簇1',' 列簇2',' 列簇3'....
# 例1:创建一张表,名称为user,该表有info和data两个列簇hbase(main):001:0>create 'user' ,'info','data'hbase(main):001:0>create 'user' ,{NAME=>'info'},{NAME=>'data'}
#例2:创建一张表叫做 user_info,包含两个列簇 base_info 和 extra_info,并且分别指定这两个列簇 的数据的版本数为 3 和 1hbase(main):001:0>create 'user_info',{NAME=>'base_info',VERSIONS=>3},{NAME=>'extra_info',VERSIONS=>1}
查看表的详细信息
#desc 或者 describehbase(main):001:0>desc 'user_info'hbase(main):001:0>describe 'user_info'
插入数据
#put table ,rowkey, 列簇:列 ,value
hbase(main):001:0>put 'user','rowkey01','info:age','18'
查询数据
#get
#获取 user 表中 row key 为 rk0001 的所有信息hbase(main):001:0>get 'user' ,'rk0001'
#获取 user 表中 row key 为 rk0001,info 列簇的所有信息hbase(main):001:0>get 'user','rk0001','info'
#获取 user 表中 row key 为 rk0001,info 列簇的 name、age 列标示符的信息
hbase(main):001:0>get 'user','rk0001','info:name','info:age'
#获取 user 表中 row key 为 rk0001,列簇为 info,版本号最新 5 个的信息hbase(main):001:0>create 'USER','rk0001',{COLUMN=>'info',VERSIONS=>5}
#获取 user 表中 row key 为 rk0001,cell 的值为 zhangsan 的信息hbase(main):001:0>get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}
#获取 user 表中 row key 为 rk0001,列标示符中含有 a 的信息hbase(main):001:0>get 'user','rk0001',{FILTER=>"(QualifierFilter(=,'substring:a'))"}
查询数据
#scan
查询 user_info 表中的所有信息hbase(main):001:0>scan 'user_info'
#查询 user_info 表中的指定列簇的所有信息hbase(main):001:0>scan 'user_info',{COLUMNS=>'base_info'}hbase(main):001:0>scan 'user_info',{COLUMNS=>'base_info:name'}hbase(main):001:0>scan 'user_info',{COLUMNS=>['base_info','extra_info']}
#查询 user_info 表中的指定列簇为 base_info 的所有版本信息hbase(main):001:0>scan 'user_info',{COLUMNS=>'base_info',VERSIONS=>5}
#查询 user 表中列簇为 info 和 data 且列标示符中含有 a 字符的信息hbase(main):001:0>scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}
#rowkey的范围查询hbase(main):001:0>scan 'user_info', {COLUMNS => 'base_info', STARTROW => 'baiyc_20150716_0003', ENDROW =>'baiyc_20150716_0006'}
#查询 user 表中 rowkey 以 rk 字符开头的hbase(main):001:0>scan 'user',{FILTER=>"PrefixFilter('rk')"}
#查询 user_info 表中指定时间戳范围的数据hbase(main):001:0>scan 'user_info',{TIMERANGE=>[1540882871681,1540882888540]}
删除数据
#delete
#删除记录hbase(main):001:0>delete 'user', 'rk0001' #删除字段hbase(main):001:0>delete 'user','rk0001','info:name'#删除 user 表 rowkey 为 rk0001,列标示符为 info:name,timestamp 为 1392383705316 的数据hbase(main):001:0>delete 'user','rk0001','info:name',1392383705316
修改表结构
#alter
#添加两个列簇 f2 和 f3hbase(main):001:0>alter 'user_info',NAME=>'f2'hbase(main):001:0>alter 'user_info',NAME=>'f2'
#删除一个列簇 f1hbase(main):001:0>alter 'user_info',NAME=>'f1',METHOD=>'delete'
#将 user_info 表的 base_info 列簇版本号改为 5hbase(main):001:0>alter 'user_info',NAME=>'base_info',VERSIONS=>5
清空表
#truncate
#清空 user 表中的数据hbase(main):001:0>truncate 'user_info'
停用表/启用表
#disable 和 enablehbase(main):001:0>disable 'user'hbase(main):001:0>enable 'user'
删除表
#drop
#删除一张表hbase(main):001:0>disable 'user #需要先停用这张表,在删除hbase(main):001:0>drop 'user'
2. API操作(javaAPI)
这里实现基本的增删改查:
pom依赖
org.apache.hbase hbase-client 1.2.6 org.apache.hbase hbase-server 1.2.6
代码实现:
package com.zy.hbase;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.KeyValue;import org.apache.hadoop.hbase.client.*;import org.apache.hadoop.hbase.util.Bytes;import org.junit.Test;import java.io.IOException;public class HbaseTest { // 声明静态配置 static Configuration conf = null; private static final String ZK_CONNECT_STR = "hadoop01:2181,hadoop02:2181,hadoop03:2181"; static { conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", ZK_CONNECT_STR); } /** * 1.创建表 */ @Test public void creatTable() { //表名 String tableName = "stu_info"; //列簇名 String[] cf = {"base_info", "extra_info"}; try { //创建HBaseAdmin对象 HBaseAdmin admin = new HBaseAdmin(conf); //创建表的描述信息对象 HTableDescriptor des = new HTableDescriptor(tableName); for (int i = 0; i < cf.length; i++) { des.addFamily(new HColumnDescriptor(cf[i])); } if (admin.tableExists(tableName)) { System.out.println("table Exists!"); System.exit(0); } else { admin.createTable(des); System.out.println("create table Success!"); } } catch (IOException e) { e.printStackTrace(); } } /** * 为表添加数据 */ @Test public void addData() { //表名 String tableName = "user_info"; //行键 String rowkey = "rk0011"; //列簇 String cf = "base_info"; Put put = new Put(rowkey.getBytes()); try { //创建操作hbase表的对象 HTable table = new HTable(conf, tableName.getBytes()); //列簇 列 值 put.addColumn(cf.getBytes(), "name".getBytes(), "zs".getBytes()); table.put(put); } catch (IOException e) { e.printStackTrace(); } } /** * 根据 rwokey 查询 */ @Test public void getResult() { //表名 String tableName = "user_info"; //行键 String rowKey = "rk0001"; Get get = new Get(Bytes.toBytes(rowKey)); try { //创建操作hbase表的对象 HTable table = new HTable(conf, tableName.getBytes()); Result result = table.get(get); for (KeyValue kv : result.list()) { System.out.println("rowkey:" + kv.getRow()); //行键 System.out.println("family" + kv.getFamily()); //列簇 System.out.println("qualifier" + kv.getQualifier()); //列 System.out.println("value:" + new String(kv.getValue())); //值 System.out.println("Timestamp" + kv.getTimestamp()); //时间戳 } } catch (IOException e) { e.printStackTrace(); } } /** * 遍历查询 hbase 表 */ @Test public void getResultScann() { String tableName = "user_info"; Scan scan = new Scan(); try { HTable table = new HTable(conf, tableName.getBytes()); ResultScanner scanner = table.getScanner(scan); for (Result rs : scanner) { for (KeyValue kv : rs.list()) { System.out.println("rowkey:" + kv.getRow()); //行键 System.out.println("family" + kv.getFamily()); //列簇 System.out.println("qualifier" + kv.getQualifier()); //列 System.out.println("value:" + new String(kv.getValue())); //值 System.out.println("Timestamp" + kv.getTimestamp()); //时间戳 } } } catch (IOException e) { e.printStackTrace(); } } /** * 遍历查询 hbase 表 指定rowkey的查询范围 */ @Test public void getResultScannRange() { String tableName = "user_info"; Scan scan = new Scan(); scan.setStartRow("rk001".getBytes()); scan.setStopRow("rk005".getBytes()); try { HTable table = new HTable(conf, tableName.getBytes()); ResultScanner scanner = table.getScanner(scan); for (Result rs : scanner) { for (KeyValue kv : rs.list()) { System.out.println("rowkey:" + kv.getRow()); //行键 System.out.println("family" + kv.getFamily()); //列簇 System.out.println("qualifier" + kv.getQualifier()); //列 System.out.println("value:" + new String(kv.getValue())); //值 System.out.println("Timestamp" + kv.getTimestamp()); //时间戳 } } } catch (IOException e) { e.printStackTrace(); } } /** * 查询表中的某一列 */ @Test public void getResultByColumn() { String tableName = "user_info"; //表 String rowkey = "rk0001"; //行键 String cf = "base_info"; //列簇 String column = "name"; //列 try { HTable table = new HTable(conf, tableName.getBytes()); Get get = new Get(rowkey.getBytes()); get.addColumn(cf.getBytes(), column.getBytes()); Result result = table.get(get); for (KeyValue kv : result.list()) { System.out.println("rowkey:" + kv.getRow()); //行键 System.out.println("family" + kv.getFamily()); //列簇 System.out.println("qualifier" + kv.getQualifier()); //列 System.out.println("value:" + new String(kv.getValue())); //值 System.out.println("Timestamp" + kv.getTimestamp()); //时间戳 } } catch (IOException e) { e.printStackTrace(); } } /** * 更新表中的某一列,因为在hbase中可以以时间戳定义多个版本的值 * 所有,更新操作就是put操作 */ @Test public void updateTable() { String tableName = "user_info"; //表 String rowkey = "rk0001"; //行键 String cf = "base_info"; //列簇 String column = "name"; //列 String value = "ll"; //值 try { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Put put = new Put(rowkey.getBytes()); put.addColumn(cf.getBytes(), column.getBytes(), value.getBytes()); table.put(put); } catch (IOException e) { e.printStackTrace(); } } /** * 查询某列数据的多个版本 */ @Test public void getResultByVersion() { String tableName = "user_info"; //表 String rowkey = "rk0001"; //行键 String cf = "base_info"; //列簇 String column = "name"; //列 int version = 5; //hbase的列的版本 try { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Get get = new Get(rowkey.getBytes()); get.addColumn(cf.getBytes(), column.getBytes()); get.setMaxVersions(version); Result result = table.get(get); if (result.list() != null) { for (KeyValue kv : result.list()) { System.out.println("rowkey:" + kv.getRow()); //行键 System.out.println("family" + kv.getFamily()); //列簇 System.out.println("qualifier" + kv.getQualifier()); //列 System.out.println("value:" + new String(kv.getValue())); //值 System.out.println("Timestamp" + kv.getTimestamp()); //时间戳 } } } catch (IOException e) { e.printStackTrace(); } } /** * 删除指定的列 */ @Test public void deleteColumn() { String tableName = "user_info"; //表 String rowkey = "rk0001"; //行键 String cf = "base_info"; //列簇 String column = "name"; //列 try { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Delete delete = new Delete(rowkey.getBytes()); delete.addColumn(cf.getBytes(), column.getBytes()); table.delete(delete); System.out.println(cf + ":" + column + "is deleted!"); } catch (IOException e) { e.printStackTrace(); } } /** * 删除指定rowKey的所有列 */ @Test public void deleteAllColumn() { String tableName = "user_info"; //表 String rowkey = "rk0001"; //行键 try { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Delete deleteAll = new Delete(rowkey.getBytes()); table.delete(deleteAll); System.out.println("all columns are deleted!"); } catch (IOException e) { e.printStackTrace(); } } /* * 删除表 */ @Test public void deleteTable(){ String tableName = "user_info"; //表 try { HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(tableName.getBytes()); admin.deleteTable(tableName.getBytes()); System.out.println(tableName + "is deleted!"); } catch (IOException e) { e.printStackTrace(); } }}
详细的源代码:http://down.51cto.com/data/2457979
查询
信息
数据
时间
版本
两个
对象
命令
范围
多个
字符
客户
客户端
建一
提示
更新
中指
代码
名称
字段
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么关掉网络安全设置
植物虫害数据库怎么做
软件开发教程网上一对一
不是网络安全薄弱点
北京软件开发外派
数据库的数字化转型的方向
数据库 time
软件开发存在的主要问题
力控Db数据库
星能服务器跳线
长丰网络技术开发优点
web服务器数据库设计
新乡市信易网络技术有限公司
网络技术职位概述
用友查询数据库方法
重庆专业软件开发价位
中国互联网科技上市公司排名
阿里云安装git服务器
我的世界宝可梦服务器1122
北京最有名的软件开发公司
软件开发询价做什么
服务器多网卡配置
如何制作网络安全报
欧米茄售后服务器
宝山区防水网络技术批发价格
能挣钱的小游戏软件开发
征信解析数据库
学习力测评软件开发
上海项目软件开发靠谱吗
采集助手争霸艾泽拉斯数据库