千家信息网

HBase中SHELL操作和API的用法示例

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要为大家展示了"HBase中SHELL操作和API的用法示例",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"HBase中SHELL操作和API的用
千家信息网最后更新 2024年11月11日HBase中SHELL操作和API的用法示例

这篇文章主要为大家展示了"HBase中SHELL操作和API的用法示例",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"HBase中SHELL操作和API的用法示例"这篇文章吧。

1、表结构:

2、SHELL操作

命令:hbase shell

  • 显示表:list

  • 创建表:create 'tb_name','column_family_1','column_family_2',...;

    或者 create 'user', {NAME => 'column_family_1', VERSIONS => '3'}

  • 插入数据:put 'tb_name','rk_on','column_family : key','value'

  • 获取数据:

获取所有数据:get 'tb_name','rk_on'

获取列族数据:get 'tb_name','rk_on','column_family'

或者 get 'tb_name', 'rk_on', {column=> ['cf_name1', 'cf_name2']}

获取列族中列数据:get 'tb_name','rk_on','column_family:key','column_family:column2',..

或者 get 'tb_name', 'rk_on', {COLUMN => ['cf_name:key', 'cf_name:key']}

获取各个版本的数据

列族版本:get 'tb_name', 'rk_on', {COLUMN => 'cf_name1', VERSIONS => Number}

列版本:get 'tb_name', 'rk_on', {COLUMN => 'cf_name1:c_name', VERSIONS => Number}

时间范围内的列版本:get 'user', 'rk0001', {COLUMN => 'cfn:key', VERSIONS => Number, TIMERANGE => [1392368783980, 1392380169184]}

VERSION:查询版本数量

TIMERANGE:时间戳范围

  • 完全匹配:get 'tb_name', 'rk_on', {FILTER => "ValueFilter(=, 'binary:value')"}

rk_on中含有value的信息

  • 匹配:get 'tb_name', 'rk_on', {FILTER => "(ValueFilter(=,'substring:a'))"}

示符中含有a的信息

  • scan查询:

scan 'tb_name'

查询user表中列族为cfn的信息
scan 'tb_name', {COLUMNS => 'cfn'}
scan 'tb_name', {COLUMNS => 'cfn', RAW => true, VERSIONS => 5}
scan 'tb_name', {COLUMNS => 'cfn', RAW => true, VERSIONS => 3}
查询user表中列族为cfn1和cfn2的信息
scan 'user', {COLUMNS => ['cfn1', 'cfn2']}
scan 'user', {COLUMNS => ['cfn1:key1', 'cfn2:key2']}

查询user表中列族为info、列标示符为name的信息
scan 'user', {COLUMNS => 'info:name'}

查询user表中列族为info、列标示符为name的信息,并且版本最新的5个
scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

查询user表中列族为info和data且列标示符中含有a字符的信息
scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}

查询user表中列族为info,rk范围是[rk0001, rk0003)的数据
scan 'people', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

查询user表中row key以rk字符开头的
scan 'user',{FILTER=>"PrefixFilter('rk')"}

查询user表中指定范围的数据
scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}

  • 删除数据

删除user表row key为rk0001,列标示符为info:name的数据
delete 'people', 'rk0001', 'info:name'
删除user表row key为rk0001,列标示符为info:name,timestamp为1392383705316的数据
delete 'user', 'rk0001', 'info:name', 1392383705316

  • 清空user表中的数据
    truncate 'people'

  • 修改表结构
    首先停用user表(新版本不用)
    disable 'user'

  • 添加两个列族f1和f2
    alter 'people', NAME => 'f1'
    alter 'user', NAME => 'f2'

  • 启用表
    enable 'user'

  • ###disable 'user'(新版本不用)
    删除一个列族:
    alter 'user', NAME => 'f1', METHOD => 'delete' 或 alter 'user', 'delete' => 'f1'

  • 添加列族f1同时删除列族f2
    alter 'user', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

  • 将user表的f1列族版本号改为5
    alter 'people', NAME => 'info', VERSIONS => 5

  • 启用表
    enable 'user'

  • 删除表
    disable 'user'
    drop 'user'


2、API:

几个相关类与HBase数据模型之间的对应关系

java类HBase数据模型
HBaseAdmin数据库(DataBase)
HBaseConfiguration
HTable表(Table)
HTableDescriptor列族(Column Family)
Put列修饰符(Column Qualifier)
Get
Scanner

一、HBaseConfiguration

关系:org.apache.hadoop.hbase.HBaseConfiguration

作用:对HBase进行配置

返回值函数描述
voidaddResource(Path file)通过给定的路径所指的文件来添加资源
voidclear()清空所有已设置的属性
stringget(String name)获取属性名对应的值
StringgetBoolean(String name, boolean defaultValue)获取为boolean类型的属性值,如果其属性值类型部位boolean,则返回默认属性值
voidset(String name, String value)通过属性名来设置值
voidsetBoolean(String name, boolean value)设置boolean类型的属性值

用法示例:

HBaseConfiguration hconfig = new HBaseConfiguration();hconfig.set("hbase.zookeeper.property.clientPort","2181");

  该方法设置了"hbase.zookeeper.property.clientPort"的端口号为2181。一般情况下,HBaseConfiguration会使用构造函数进行初始化,然后在使用其他方法。

二、HBaseAdmin

关系:org.apache.hadoop.hbase.client.HBaseAdmin

作用:提供了一个接口来管理HBase数据库的表信息。它提供的方法包括:创建表,删除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。

返回值函数描述
voidaddColumn(String tableName, HColumnDescriptor column)向一个已经存在的表添加咧
checkHBaseAvailable(HBaseConfiguration conf)静态函数,查看HBase是否处于运行状态
createTable(HTableDescriptor desc)创建一个表,同步操作
deleteTable(byte[] tableName)删除一个已经存在的表
enableTable(byte[] tableName)使表处于有效状态
disableTable(byte[] tableName)使表处于无效状态
HTableDescriptor[]listTables()列出所有用户控件表项
voidmodifyTable(byte[] tableName, HTableDescriptor htd)修改表的模式,是异步的操作,可能需要花费一定的时间
booleantableExists(String tableName)检查表是否存在

用法示例:

HBaseAdmin admin = new HBaseAdmin(config);admin.disableTable("tablename")

三、HTableDescriptor

关系:org.apache.hadoop.hbase.HTableDescriptor

作用:包含了表的名字极其对应表的列族

返回值函数描述
voidaddFamily(HColumnDescriptor)添加一个列族
HColumnDescriptorremoveFamily(byte[] column)移除一个列族
byte[]getName()获取表的名字
byte[]getValue(byte[] key)获取属性的值
voidsetValue(String key, String value)设置属性的值

用法示例:

HTableDescriptor htd = new HTableDescriptor(table);htd.addFamily(new HcolumnDescriptor("family"));

在上述例子中,通过一个HColumnDescriptor实例,为HTableDescriptor添加了一个列族:family

四、HColumnDescriptor

关系:org.apache.hadoop.hbase.HColumnDescriptor

作用:维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。列族被删除的时候,列族里面的数据也会同时被删除。

返回值函数描述
byte[]getName()获取列族的名字
byte[]getValue(byte[] key)获取对应的属性的值
voidsetValue(String key, String value)设置对应属性的值

用法示例:

HTableDescriptor htd = new HTableDescriptor(tablename);HColumnDescriptor col = new HColumnDescriptor("content:");htd.addFamily(col);

此例添加了一个content的列族

五、HTable

关系:org.apache.hadoop.hbase.client.HTable

作用:可以用来和HBase表直接通信。此方法对于更新操作来说是非线程安全的。

返回值函数描述
voidcheckAdnPut(byte[] row, byte[] family, byte[] qualifier, byte[] value, Put put自动的检查row/family/qualifier是否与给定的值匹配
voidclose()释放所有的资源或挂起内部缓冲区中的更新
Booleanexists(Get get)检查Get实例所指定的值是否存在于HTable的列中
Resultget(Get get)获取指定行的某些单元格所对应的值
byte[][]getEndKeys()获取当前一打开的表每个区域的结束键值
ResultScannergetScanner(byte[] family)获取当前给定列族的scanner实例
HTableDescriptorgetTableDescriptor()获取当前表的HTableDescriptor实例
byte[]getTableName()获取表名
static booleanisTableEnabled(HBaseConfiguration conf, String tableName)检查表是否有效
voidput(Put put)向表中添加值

用法示例:

HTable table = new HTable(conf, Bytes.toBytes(tablename));ResultScanner scanner =  table.getScanner(family);

六、Put

关系:org.apache.hadoop.hbase.client.Put

作用:用来对单个行执行添加操作

返回值函数描述
Putadd(byte[] family, byte[] qualifier, byte[] value)将指定的列和对应的值添加到Put实例中
Putadd(byte[] family, byte[] qualifier, long ts, byte[] value)将指定的列和对应的值及时间戳添加到Put实例中
byte[]getRow()获取Put实例的行
RowLockgetRowLock()获取Put实例的行锁
longgetTimeStamp()获取Put实例的时间戳
booleanisEmpty()检查familyMap是否为空
PutsetTimeStamp(long timeStamp)设置Put实例的时间戳

用法示例:

HTable table = new HTable(conf,Bytes.toBytes(tablename));Put p = new Put(brow);//为指定行创建一个Put操作p.add(family,qualifier,value);table.put(p);

七、Get

关系:org.apache.hadoop.hbase.client.Get

作用:用来获取单个行的相关信息

返回值函数描述
GetaddColumn(byte[] family, byte[] qualifier)获取指定列族和列修饰符对应的列
GetaddFamily(byte[] family)通过指定的列族获取其对应列的所有列
GetsetTimeRange(long minStamp,long maxStamp)获取指定取件的列的版本号
GetsetFilter(Filter filter)当执行Get操作时设置服务器端的过滤器

用法示例:

HTable table = new HTable(conf, Bytes.toBytes(tablename));Get g = new Get(Bytes.toBytes(row));

八、Result

关系:org.apache.hadoop.hbase.client.Result

作用:存储Get或者Scan操作后获取表的单行值。使用此类提供的方法可以直接获取值或者各种Map结构(key-value对)

返回值函数描述
booleancontainsColumn(byte[] family, byte[] qualifier)检查指定的列是否存在
NavigableMapgetFamilyMap(byte[] family)获取对应列族所包含的修饰符与值的键值对
byte[]getValue(byte[] family, byte[] qualifier)获取对应列的最新值

九、ResultScanner

关系:Interface

作用:客户端获取值的接口

返回值函数描述
voidclose()关闭scanner并释放分配给它的资源
Resultnext()获取下一行的值

相关代码:

package cn.itcast.hbase;import java.io.IOException;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.Delete;import org.apache.hadoop.hbase.client.Get;import org.apache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.HTable;import org.apache.hadoop.hbase.client.HTableInterface;import org.apache.hadoop.hbase.client.HTablePool;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.client.Result;import org.apache.hadoop.hbase.client.ResultScanner;import org.apache.hadoop.hbase.client.Scan;import org.apache.hadoop.hbase.util.Bytes;import org.junit.Before;import org.junit.Test;public class HbaseDemo {    private Configuration conf = null;        @Before    public void init(){        conf = HBaseConfiguration.create();        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");    }        @Test    public void testDrop() throws Exception{        HBaseAdmin admin = new HBaseAdmin(conf);        admin.disableTable("account");        admin.deleteTable("account");        admin.close();    }        @Test    public void testPut() throws Exception{        HTable table = new HTable(conf, "user");        Put put = new Put(Bytes.toBytes("rk0003"));        put.add(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("liuyan"));        table.put(put);        table.close();    }        @Test    public void testGet() throws Exception{        //HTablePool pool = new HTablePool(conf, 10);        //HTable table = (HTable) pool.getTable("user");        HTable table = new HTable(conf, "user");        Get get = new Get(Bytes.toBytes("rk0001"));        //get.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));        get.setMaxVersions(5);        Result result = table.get(get);        //result.getValue(family, qualifier)        for(KeyValue kv : result.list()){            String family = new String(kv.getFamily());            System.out.println(family);            String qualifier = new String(kv.getQualifier());            System.out.println(qualifier);            System.out.println(new String(kv.getValue()));        }        table.close();    }        @Test    public void testScan() throws Exception{        HTablePool pool = new HTablePool(conf, 10);        HTableInterface table = pool.getTable("user");        Scan scan = new Scan(Bytes.toBytes("rk0001"), Bytes.toBytes("rk0002"));        scan.addFamily(Bytes.toBytes("info"));        ResultScanner scanner = table.getScanner(scan);        for(Result r : scanner){            /**            for(KeyValue kv : r.list()){                String family = new String(kv.getFamily());                System.out.println(family);                String qualifier = new String(kv.getQualifier());                System.out.println(qualifier);                System.out.println(new String(kv.getValue()));            }            */            byte[] value = r.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));            System.out.println(new String(value));        }        pool.close();    }            @Test    public void testDel() throws Exception{        HTable table = new HTable(conf, "user");        Delete del = new Delete(Bytes.toBytes("rk0001"));        del.deleteColumn(Bytes.toBytes("data"), Bytes.toBytes("pic"));        table.delete(del);        table.close();    }    public static void main(String[] args) throws Exception {        Configuration conf = HBaseConfiguration.create();        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");        HBaseAdmin admin = new HBaseAdmin(conf);        HTableDescriptor td = new HTableDescriptor("account");        HColumnDescriptor cd = new HColumnDescriptor("info");        cd.setMaxVersions(10);        td.addFamily(cd);        admin.createTable(td);        admin.close();    }        public void createTable(String tableName, int maxVersion, String... cf){            }}

以上是"HBase中SHELL操作和API的用法示例"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0