几个相关类与HBase数据模型之间的对应关系
java类
|
HBase数据模型
|
HBaseAdmin
| 数据库 |
HBaseConfiguration
|
数据库
|
HTable
| 表 |
HTableDescriptor
| 列族 |
Put
| 列修饰符 |
Get
|
列修饰符
|
Scanner
| 列修饰符 |
关系:org.apache.hadoop.hbase.HBaseConfiguration
作用:对HBase进行配置
返回值
|
函数
|
描述
|
void
|
addResource(Path file)
| 通过给定的路径所指的文件来添加资源 |
void
|
clear()
| 清除所有已设置的属性 |
string |
get(String name)
| 获取属性名对应的值 |
String |
getBoolean(String name,boolean defaultValue)
| 获取为boolean类型的属性值,如果其属性值类型不为boolean,则返回默认属性 |
void
|
set(String name,String value)
| 通过属性名来设置值 |
void
|
setBoolean(String name,booelean value)
| 设置booelan类型的属性值 |
关系:org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供一个接口来管理HBase的表信息。
方法 : 创建表、删除表、列出表项、使表有效或无效、添加或删除表列族成员
返回值
|
函数
|
描述
|
void
|
addColumn(String tableName,HColumnDescriptor column)
| 像一个已经存在的表添加列 |
void
|
checkHBaseAvaliable(HBaseConfiguration conf)
| 静态函数,查看HBase是否处于运行状态 |
void
|
createTable(HTableDescriptor desc)
| 创建一个表,同步操作 |
void
|
delateTable(byte []tableName)
| 删除一个已存在的表 |
void
|
enableTable(byte []tableName)
| 使表处于有效状态 |
void
|
disableTable(byte []tableName)
| 使表处于无效状态 |
HTableDescriptor[]
|
listTables()
| 列出所有表 |
void
| modifyTable(byte[] tableName,HTableDescriptor htd) | 修改表的模式,异步操作,可能需要花费一定时间 |
boolean |
tableExists(String tableName)
| 检查表是否存在 |
关系:org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字及其对应表的列族
返回值
| 函数 |
描述
|
void
|
addFamily(HColumnDescriptor)
| 添加一个列族 |
HColumnDescriptor
|
removeFamily(byte []column)
| 移除一个列族 |
byte[]
|
getName()
| 获取表的名字 |
byte[]
|
getValue(byte []key)
| 获取属性的名字 |
void
|
setValue(String key,String value)
| 设置属性的值 |
四。HColumnDescriptor
关系: org.apache.hadoop.hbase.HColumnDescriptor
作用:维护关于列族的信息,例如版本号,压缩设置等。
返回值
| 函数 |
描述
|
byte[] |
getName()
| 获取列族的名字 |
byte[]
|
getValue(byte[] key)
| 获取对应属性的值 |
void |
setValue(String key,String value)
| 设置对应属性的值 |
关系: org.apache.hadoop.hbase.client.HTable
作用: 可以用来和HBase表直接通信。此方法对更新操作非线程安全
返回值
|
函数
|
描述
|
void
|
checkAndPut(byte[]row,byte[]family,byte[]qualifier,byte[]value,Put put)
| 自动检查,row/family/qualifier是否与给定的值匹配 |
void
|
close()
| 释放所有资源或挂起内部缓冲区的更新 |
boolean |
exists(Get get)
| 检查Get实例所指的值是否在HTable的列中 |
Result
|
get(Get get)
| 获取制定行的某些单元格所对应的值 |
byte [][]
|
getEndKeys()
| 获取当前打开的表每个区域的结束键值 |
ResultScanner
|
getScanner(byte []family)
| 获取当前给定列族的Scanner实例 |
HTableDescriptor
|
getTableDescriptor()
| 获取当前表的HTableDescriptor实例 |
byte[]
|
getTableName()
| 获取表名 |
static boolean
| isTableEnabled(HBaesConfiguration conf,String tableName) | 检查表是否有效 |
void
|
put(Put put)
| 向表中添加值 |
关系: org.apache.hadoop.hbase.client.Put
作用: 用来对当个行执行添加操作
返回值
|
函数
|
描述
|
Put
|
add(byte[] family,byte[]qualifier,byte []value)
| 将指定的列和对应的值,添加到Put实例中 |
Put
|
add(byte[] family,byte[] qualifier,long ts,byte[]value)
| 将指定的列和对应的值及时间戳加到Put实例中 |
byte[] |
getRow()
| 获取Put实例的行 |
RowLock
|
getRowLock()
| 获取Put实例的行锁 |
long
|
getTimeStamp()
| 获取Put实例的时间戳 |
boolean
|
isEmpty()
| 检查familyMap是否为空 |
Put
|
setTimeStamp(long timeStamp)
| 设置Put实例的时间戳 |
关系: org.apache.hadoop.hbase.client.Get
作用: 用来获取单个行的相关信息
返回值
|
函数
|
描述
|
Get
|
addColumn(byte[]family,byte[] qualifier)
| 获取指定列族和列修饰符对应的列 |
Get
|
addFamily(byte[] family)
| 通过指定列族获取对应列的所有列 |
Get
|
setTimeRange(long minStamp,long maxStamp)
| 获取指定区间的列的版本号 |
Get |
setFilter(Filter filter)
| 当执行Get操作时设置服务器端的过滤器 |
关系: org.apache.hadoop.hbase.client.Result
作用: 存储Get或者Scan操作后获取表的单行值。使用此类提供的方法可以直接获取值或者各种Map结构
返回值
|
函数
|
描述
|
boolean
|
containsColumn(byte[]family,byte[]qualifier)
| 检查指定的列是否存在 |
NavigableMap<byte[],byte[]>
|
getFamilyMap(byte[]family)
| 获取列族包含的修饰符与值的键值对 |
byte[]
|
getValue(byte[]family,byte[]qualifier)
| 获取对应列的最新值 |
关系: Interface
作用: 客户端获取值的接口
返回值
|
函数
|
描述
|
void
|
close()
| 关闭scanner并释放分配给他的资源 |
Result
|
next()
| 获取下一行的值 |
1. RowFilter:筛选出匹配的所有行,对于这个过滤器的应用场景,是非常直观的:使用BinaryComparator可以筛选出具有某个行键的行,或者通过改变
比较运算符来筛选出符合某一条件的多条数据
Filter rf=new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Byte.toBytes("row1")));
2. PrefixFilter:筛选出具有特定前缀的行键数据。这个过滤器所实现的功能其实也可由RowFilter结合RegexComparator来实现,
Filter pf=new PrefixFilter(Bytes.toBytes("row"));
3. KeyOnlyFilter:这个过滤器唯一的功能就是只返回每行的行键,值全部为空。
Filter kof=new KeyOnlyFilter();
4. RandomRowFilter:本过滤器的作用就是按照一定的几率(<=0会过滤掉所有的行,>=1会包含所有的行)来返回随机的结果集,对于同样的数据集,多次使用
同一个RandomRowFilter会返回不同的结果集,对于需要随机抽取一部分数据的应用场景,可以使用此过滤器。
Filter rrf=new RandomRowFilter((float)0.8);
5. InclusiveStopFilter:扫描的时候,我们可以设置一个开始行键和一个终止行键,默认情况下,这个行键的返回是前闭后开区间,即包含起始行,但不包含
终止行,如果我们想要同时包含起始行和终止行,那么我们可以使用此过滤器
Filter isf=new InclusiveStopFilter(Bytes.toBytes("row1"));
6. FirstKeyOnlyFilter:如果你只想返回的结果集中只包含第一列的数据,那么这个过滤器能够满足你的要求。它在找到每行的第一列后会停止扫描,从而使
扫描的性能也得到一定的提升。
Filter fkof=new FirstKeyOnlyFilter();
7. ColumnPrefixFilter:按照列名的前缀来筛选单元格的
Filter cpf=new ColumnPrefixFilter(Bytes.toBytes("qual1"));
8. ValueFilter:按照具体的值来筛选单元格,这会把一行中值不能满足的单元个过滤掉。如下构造器,对于每一行的一个列,如果其对应的值不包含
ROW2_QUAL1,那么这个列就不会返回给客户端
Filter vf=new ValueFilter(CompareFilter.CompareOp.EQUAL,new SubStringComparator("ROW2_QUAL1"));
9. ColumnCountGetFilter:这个过滤器来返回每行最多返回多少列,并在遇到一行的列数超过我们所设置的限制时,结束扫描操作
Filter ccf=new ColumnCountGetFilter(2);
10. SingleColumnValueFilter:用一列的值决定这一行的数据是否被过滤。在具体对象上,可以调用setFilterIfMissing(true)或则setFilterIfMissing(false),默认的值是false,
其作用是,对于作为条件的列,如果这一列本身就不存在,那么如果为true,这样的行将会被过滤掉,如果为false,这样的行会包含在结果集中
SingleColumnValueFilter scvf=new SingleColumnValueFilter(Bytes.toBytes("colfam1"),Bytes.toBytes("qual2"),CompareFilter.CompareOp.NOT_EQUAL,new SubStringComparator("BOGUS"));
scvf.setFilterIfMissing(false);
scvf.setLastestVersionOnly(true);
11. SingleColumnValueExcludeFilter:这个与10种过滤器的唯一区别就是,作为筛选条件的列不会包含在返回的结果中
12. SkipFilter:这是一种附加过滤器,其与ValueFilter集合使用,如果发现一行中的某一列不符合条件,那么整行就会被过滤掉:
Filter skf=new SkipFilter(vf);
13. WhileMatchFilter:这个过滤器的应用场景也很简单,如果你想要在遇到某个条件数据之前的数据时,就可以使用这个过滤器;当遇到
不符合设定条件的数据时,整个扫描也就结束了。
Filter wmf=new WhileMatchFiler(rf);
14. FilterList:用于综合使用多个过滤器。其中有两种关系:FilterList.Operator.MUST_PASS_ONE和FilterList.Operator.MUST_PASSS_ALL
默认是FilterList.Operator.MUST_PASS_ALL,