HBase基本数据操作详解Word格式.docx
- 文档编号:17151330
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:26
- 大小:27.92KB
HBase基本数据操作详解Word格式.docx
《HBase基本数据操作详解Word格式.docx》由会员分享,可在线阅读,更多相关《HBase基本数据操作详解Word格式.docx(26页珍藏版)》请在冰豆网上搜索。
∙Region服务器组(Regionservergroups(HBASE-6721)):
一个命名空间或一张表,可以被固定到一组regionservers上,从而保证了数据隔离性。
1.1.命名空间管理
命名空间可以被创建、移除、修改。
表和命名空间的隶属关系在在创建表时决定,通过以下格式指定:
<
namespace>
:
table>
Example:
hbaseshell中创建命名空间、创建命名空间中的表、移除命名空间、修改命名空间
#Createanamespacecreate_namespace'
my_ns'
#createmy_tableinmy_nsnamespace
create'
my_ns:
my_table'
'
fam'
#dropnamespacedrop_namespace'
#alternamespacealter_namespace'
{METHOD=>
'
set'
PROPERTY_NAME'
=>
PROPERTY_VALUE'
}
1.2.预定义的命名空间
有两个系统内置的预定义命名空间:
∙hbase:
系统命名空间,用于包含hbase的内部表
∙default:
所有未指定命名空间的表都自动进入该命名空间
指定命名空间和默认命名空间
#namespace=fooandtablequalifier=bar
foo:
bar'
#namespace=defaultandtablequalifier=bar
废话不多说,直接上样板代码,代码后再说明注意事项和知识点:
Configuration
conf
=
HBaseConfiguration.create();
HBaseAdmin
admin
new
HBaseAdmin(conf);
//create
namespace
named
"
my_ns"
admin.createNamespace(NamespaceDescriptor.create("
).build());
tableDesc,
with
name
and
table
mytable"
HTableDescriptor
tableDesc
HTableDescriptor(TableName.valueOf("
));
tableDesc.setDurability(Durability.
SYNC_WAL
);
//add
a
column
family
mycf"
HColumnDescriptor
hcd
HColumnDescriptor("
tableDesc.addFamily(hcd);
admin.createTable(tableDesc);
admin.close();
关键知识点:
1.必须将HBase集群的hbase-site.xml文件添加进工程的classpath中,或者通过Configuration对象设置相关属性,否则程序获取不到集群相关信息,也就无法找到集群,运行程序时会报错;
2.HTableDescriptor
))代码是描述表mytable,并将mytable放到了my_ns命名空间中,前提是该命名空间已存在,如果指定的是不存在命名空间,则会报错org.apache.hadoop.hbase.NamespaceNotFoundException;
3.命名空间一般在建模阶段通过命令行创建,在java代码中通过admin.createNamespace(NamespaceDescriptor.create("
).build())创建的机会不多;
4.创建HBaseAdmin对象时就已经建立了客户端程序与HBase集群的connection,所以在程序执行完成后,务必通过admin.close()关闭connection;
5.可以通过HTableDescriptor对象设置表的特性,比如:
通过tableDesc.setMaxFileSize(512)设置一个region中的store文件的最大size,当一个region中的最大store文件达到这个size时,region就开始分裂;
通过tableDesc.setMemStoreFlushSize(512)设置region内存中的memstore的最大值,当memstore达到这个值时,开始往磁盘中刷数据。
更多特性请自行查阅官网API;
6.可以通过HColumnDescriptor对象设置列族的特性,比如:
通过hcd.setTimeToLive(5184000)设置数据保存的最长时间;
通过hcd.setInMemory(true)设置数据保存在内存中以提高响应速度;
通过
hcd.setMaxVersions(10)设置数据保存的最大版本数;
通过hcd.setMinVersions(5)设置数据保存的最小版本数(配合TimeToLive使用)。
7.数据的版本数只能通过HColumnDescriptor对象设置,不能通过HTableDescriptor对象设置;
8.由于HBase的数据是先写入内存,数据累计达到内存阀值时才往磁盘中flush数据,所以,如果在数据还没有flush进硬盘时,regionserverdown掉了,内存中的数据将丢失。
要想解决这个场景的问题就需要用到WAL(Write-Ahead-Log),tableDesc.setDurability(Durability.SYNC_WAL)就是设置写WAL日志的级别,示例中设置的是同步写WAL,该方式安全性较高,但无疑会一定程度影响性能,请根据具体场景选择使用;
9.setDurability(Durabilityd)方法可以在相关的三个对象中使用,分别是:
HTableDescriptor,Delete,Put(其中Delete和Put的该方法都是继承自父类org.apache.hadoop.hbase.client.Mutation)。
分别针对表、插入操作、删除操作设定WAL日志写入级别。
需要注意的是,Delete和Put并不会继承Table的Durability级别(已实测验证)。
Durability是一个枚举变量,可选值参见4.2节。
如果不通过该方法指定WAL日志级别,则为默认USE_DEFAULT级别。
删除表没创建表那么多学问,直接上代码:
String
tablename
;
if(admin.tableExists(tablename))
{
try
admin.disableTable(tablename);
admin.deleteTable(tablename);
}
catch
(Exception
e)
//
TODO:
handle
exception
e.printStackTrace();
}
说明:
删除表前必须先disable表。
4.1.实例代码
(1)删除列族、新增列族
修改之前,四个列族:
hbase(main):
014:
0>
describe'
rd_ns:
itable'
DESCRIPTION
ENABLED
'
{NAME=>
info'
DATA_BLOCK_ENCODING=>
NONE'
BLOOMFILTER=>
ROW'
REPLICATION_SCOPE=>
0'
Vtrue
ERSIONS=>
10'
COMPRESSION=>
MIN_VERSIONS=>
TTL=>
2147483647'
KEEP_DELETED_CELLS=>
false'
BLOCKSIZE=>
65536'
IN_MEMORY=>
BLOCKCACHE=>
true'
},{NAME=>
newcf'
NONE
VERSIONS=>
MIN_VERSIONS=>
BLOCKSIZE=>
tr
ue'
note'
BLOCKSIZE
=>
sysinfo'
BLOOM
FILTER=>
MIN_VERS
IONS=>
1row(s)in0.0450seconds
修改表,删除三个列族,新增一个列族,代码如下:
itable"
//get
the
TableDescriptor
of
target
table
newtd
admin.getTableDescriptor(Bytes.toBytes("
//remove
3
useless
families
newtd.removeFamily(Bytes.toBytes("
note"
newcf"
sysinfo"
for
family
newhcd
action_log"
newhcd.setMaxVersions(10);
newhcd.setKeepDeletedCells(true);
family(HColumnDescriptor)
to
HTableDescriptor
newtd.addFamily(newhcd);
//modify
struture
admin.
modifyTable
(Bytes.toBytes("
),newtd);
admin.enableTable(tablename);
修改之后:
015:
action_log'
true
1row(s)in0.0400seconds
逻辑很简单:
1.通过admin.getTableDescriptor(Bytes.toBytes("
))取得目标表的描述对象,应该就是取得指向该对象的指针了;
2.修改目标表描述对象;
3.通过admin.modifyTable(Bytes.toBytes("
),newtd)将修改后的描述对象应用到目标表。
(2)修改现有列族的属性(setMaxVersions)
htd
infocf
htd.getFamily(Bytes.toBytes("
info"
infocf.setMaxVersions(100);
admin.modifyTable(Bytes.toBytes("
),htd);
5.1.常用构造函数:
(1)指定行键
publicPut(byte[]row)
参数:
row行键
(2)指定行键和时间戳
publicPut(byte[]row,
longts)
row行键,
ts时间戳
(3)从目标字符串中提取子串,作为行键
Put(byte[]rowArray,introwOffset,introwLength)
(4)从目标字符串中提取子串,作为行键,并加上时间戳
Put(byte[]rowArray,introwOffset,introwLength,longts)
5.2.常用方法:
(1)指定列族、限定符,添加值
add(byte[]family,byte[]qualifier,byte[]value)
(2)指定列族、限定符、时间戳,添加值
add(byte[]family,byte[]qualifier,longts,byte[]value)
(3)设置写WAL
(Write-Ahead-Log)的级别
publicvoidsetDurability(Durabilityd)
参数是一个枚举值,可以有以下几种选择:
∙ASYNC_WAL:
当数据变动时,异步写WAL日志
∙SYNC_WAL:
当数据变动时,同步写WAL日志
∙FSYNC_WAL:
当数据变动时,同步写WAL日志,并且,强制将数据写入磁盘
∙SKIP_WAL:
不写WAL日志
∙USE_DEFAULT:
使用HBase全局默认的WAL写入级别,即SYNC_WAL
5.3.实例代码
(1)插入行
HTable
HTable(conf,
leetable"
P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HBase 基本 数据 操作 详解