HBase基本数据操作详解

上传人:夏** 文档编号:552839134 上传时间:2023-07-15 格式:DOC 页数:45 大小:387.50KB
返回 下载 相关 举报
HBase基本数据操作详解_第1页
第1页 / 共45页
HBase基本数据操作详解_第2页
第2页 / 共45页
HBase基本数据操作详解_第3页
第3页 / 共45页
HBase基本数据操作详解_第4页
第4页 / 共45页
HBase基本数据操作详解_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《HBase基本数据操作详解》由会员分享,可在线阅读,更多相关《HBase基本数据操作详解(45页珍藏版)》请在金锄头文库上搜索。

1、概述对于建表,和 RDBMS类似,HBase也有namespace 的概念,可以指定表空间创建表,也可以直接创建表,进入default表空间。对于数据操作,HBase支持四类主要的数据操作,分别是:Put :增加一行,修改一行;* Delete :删除一行,删除指定列族,删除指定column的多个版本,删除指定 column的制定版本等;* Get :获取指定行的所有信息, 获取指定行和指定列族的所有colunm,获取指定column获取指定column的几个版本,获取指定column的指定版本等;* Scan :获取所有行,获取指定行键范围的行,获取从某行开始的几行,获取满足过滤条 件的行等

2、。这四个类都是org.apache.hadoop.hbase.client的子类,可以到官网 API去查看详细信息,本文仅总结常用方法,力争让读者用20%的时间掌握80%的常用功能。目录1. 命名空间 Namespace2. 创建表3. 删除表4. 修改表5. 新增、更新数据 Put6. 删除数据Delete7. 获取单行Get8. 获取多行Scan1. 命名空间Namespace在关系数据库系统中,命名空间namespace 指的是一个表的逻辑分组,同一组中的表有类似的用途。命名空间的概念为即将到来的多租户特性打下基础:* 配额管理(Quota Management (HBASE-8410)

3、:限制一个 namespace 可以使用的资源,资源包括region和table等; 命名空间安全管理(Namespace Security Admi nistratio n (HBASE-9206):提供了另一个层面的多租户安全管理;* Region 服务器组(Region server groups (HBASE-6721):一个命名空间或一张表,可以被固定到一组 regio nservers 上,从而保证了数据隔离性。1.1. 命名空间管理命名空间可以被创建、移除、修改。表和命名空间的隶属关系在在创建表时决定,通过以下格式指定::Example : hbase shell中创建命名空间、

4、创建命名空间中的表、移除命名空间、修改命名空间#Create a namespacecreate_namespace my_ns#create my_table in my_ns namespacecreate my_ns: my_table, fam#drop namespace drop_namespace my_ns#alter namespace alter_namespace my_ns, METHOD = set, P ROPERTY_NAME= PROPERTY_VALUE12预定义的命名空间有两个系统内置的预定义命名空间: hbase :系统命名空间,用于包含hbase的内部表

5、* default :所有未指定命名空间的表都自动进入该命名空间Example :指定命名空间和默认命名空间#namespace=foo and table qualifier=barcreate foo:bar, fam#namespace=default and table qualifier=barcreate bar, fam2. 创建表废话不多说,直接上样板代码,代码后再说明注意事项和知识点:Con figurati on conf = HBaseC on figurati on.create ();HBaseAdmin admin =new HBaseAdmi n(conf);/c

6、reate n amespace n amed my_ns).buiadmin.createNamespace(NamespaceDescriptor.create ( my_nsld();/create tableDesc, with namespace name my_ns and table name mytableHTableDescriptor tableDesc =new HTableDescriptor(TableName.alueOf (my_ns:mytable);tableDesc.setDurability(Durability.SYNC_WAL);/add a colu

7、mn family mycfnew HColum nDescriptor(mycf);HColum nDescriptor hcd =tableDesc.addFamily(hcd);adm in. createTable(tableDesc);admi n.close();关键知识点:1. 必须将HBase集群的hbase-site.xml文件添加进工程的classpath中,或者通过Con figuratio n对象设置相关属性,否则程序获取不到集群相关信息,也就无法找到集群,运行程序时会报错;2. HTableDescriptor tableDesc =new HTableDescrip

8、tor(TableName.valueOf (my_ns:mytable )代码是描述表 mytable ,并将 mytable 放到了 my_ns 命 名空间中,前提是该命名空间已存在,如果指定的是不存在命名空间,则会报错 org.apache.hadoop.hbase.NamespaceNotFou ndExcepti on;3. 命名空间一般在建模阶段通过命令行创建,在java代码中通过admin.createNamespace(NamespaceDescriptor.create (my_ns ).build()创建的机会不多;4. 创建HBaseAdmi n 对象时就已经建立了客户端

9、程序与HBase集群的conn ection ,所以在程序执行完成后,务必通过admi n.close() 关闭conn ection ;5. 可以通过 HTableDescriptor对象设置表的特性,比如: 通过tableDesc.setMaxFileSize(512)设置一个 region 中的 store 文件的最大 size,当一个region中的最大store文件达到这个size时,region就开始分裂;通过 tableDesc.setMemStoreFlushSize(512)设置 region 内存中的 memstore 的最大值,当memstore达到这个值时,开始往磁盘中

10、刷数据。更多特性请自行查阅官网API ;6.可以通过HColum“Descriptor对象设置列族的特性,比如:通过hcd.setTimeToLive(5184000)设置数据保存的最长时间;通过hcd.setInMemory(true )设置数据保存在内存中以提高响应速度;通过hcd.setMaxVersions(10)设置数据保存的最大版本数;通过hcd.setMi nVersio ns(5)设置数据保存的最小版本数(配合 TimeToLive 使用)。更API ;HColum “Descriptor对象设置;对象设置,不能通过多特性请自行查阅官网7. 数据的版本数只能通过HTableDe

11、scriptor8. 由于HBase的数据是先写入内存,数据累计达到内存阀值时才往磁盘中flush数据,所以,如果在数据还没有 flush进硬盘时,regionserver down掉了,内存中的数据将丢失。要想解决这个场景的问题就需要用到WAL ( Write-Ahead-Log ),tableDesc.setDurability(Durability.SYNC_WAL)就是设置写 WAL 日志的级另叽示例中设置的是同步写WAL,该方式安全性较高,但无疑会一定程度影响性能,请根据具体场景选择使用;9. setDurability (Durability d)方法可以在相关的三个对象中使用,分

12、别是:HTableDescriptor , Delete , Put (其中Delete 和Put的该方法都是继承自父类 org.apache.hadoop.hbase.client.Mutation)。分别针对表、插入操作、删除操作设定WAL日志写入级别。需要注意的是,Delete和Put并不会继承Table的Durability 级别(已实测验证)。Durability 是一个枚举变量,可选值参见4.2节。如果不通过该方法指定WAL日志级别,则为默认USE_DEFAULT级别。3. 删除表删除表没创建表那么多学问,直接上代码:create ();Configuration conf = H

13、BaseConfiguration.HBaseAdmin admin =new HBaseAdmi n(conf);Stri ng table name =my_n s:mytable ;if (admin.tableExists(tablename) try adm in .disableTable(table name);adm in .deleteTable(table name);catch (Excepti on e) / TODO han dle exceptione.pri ntStackTrace();admi n.close();说明:删除表前必须先 disable表。4.

14、修改表4.1. 实例代码(1)删除列族、新增列族修改之前,四个列族:hbase(main):014:0 describe rd_ns:itableDESCRIPTIONENABLEDrd_ns:itable, NAME = info, DATA_BLOCK_ENCODING = NONE, BLOOMFILTER =ROW, REPLICATION_SCOPE = O, V trueERSIONS = 10, COMPRESSION = NONE, MIN_VERSIONS = O, TTL =2147483647, KEEP_DELETED_CELLS = false,BLOCKSIZE = 65536, IN_MEMORY = false, BLOCKCACHE = true, NAME =n ewcf, DATA_BLOCK_ENCODING = NONE:BLOOMFILTER = ROW, REPLICATION_SCOPE = O, COMPRESSION = NONE,VERSIONS = 10, TTL = 2147483647,MIN_VERSIONS = 0, KEEP_DELETED_CELLS = false, BLOCKSIZE = 65536,IN_MEMORY = false, BLOCKCACHE = true, NAM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号