个人大数据总结之Hbase(二)-----基本用法及优化介绍

在上一篇已经介绍过了hbase安装及结构,下面我在说一下hbase的基本使用及优化方面的问题。

一、基本使用(操作)

       1.首先hbase中有一个namespace(命名空间)的概念,namespace命名空间指的是对一组表的逻辑分组,类似于rdbms中的database,方便对表在业务上划分。Apache HBase从0.98.0,0.95.2两个版本开始支持namespace级别的授权操作,HBase全局管理员可以创建、修改和回收namespace的授权。

namespace介绍引用自:https://blog.csdn.net/maligebazi/article/details/79952459

在HBase系统中,默认定义了两个缺省的namespace

   (1)hbase:系统内建表,包括namespace和meta表

   (2)default:用户建表时未指定namespace的表都创建在此

关于namespace的一些基本用法:

①创建namespace

create_namespace 'mynamespace'  

②删除namespace

drop_namespace 'mynamespace'  

③查看namespace

describe_namespace 'mynamespace'  

④列出所有的namespace

list_namespace  

⑤在namespace下创建表

create 'mynamespace:mytable', 'info'  

⑥查看namespace下的表

list_namespace_tables 'mynamespace'

2.hbase使用

①list:

 list命令可以查看当前命名空间下所有的表,也可以查看特定命名空间下的表。

list 'ns:abc.*' --->查看命名空间ns下面的所有的以表名以abc开头的表的列表
list   ---> 查看hhase中所有的表

②创建表

   create 't1', 'cf1' --->在默认的命名空间下创建一张表名为t1,只有一个列族,列族名为cf1

③查看一张表的所有内容

scan 't1'  -->查看表中的所有数据

scan 'ns1:t1'  --> 查看表中某个列族的所有数据

④ 往表中增加一条记录

 put 't1'(表名), '1'(rowkey), 'cf1:name'(列族:字段名), 'zhangsan'(value)

⑤查看行键

 get 't1', '1', 'cf1:name'

⑥ 查看表的属性信息

 describe/desc 't1'

⑦根据行键删除某条记录

 delete 't1', '1', 'cf1:age' -->删除某一个rowkey对应的cf1:age对应的单元格

 deleteall 't1', '2'            -->删除rowkey=2对应的所有的单元格

⑧删除一张表

注意:删除表之前,需要先确认表状态是否为disable,如果不是,需要disable '表名'

 disable 't1'

 drop 't1'

二、行键和列族的设计

1.行键

在hbase中可能会出现行键的热点问题,那什么是热点问题呢?

热点问题指的是:由于行键相似,连续且数据量过大,造成了单个region的数据量过大,从而影响了对这个region 的读写效率。所以在我们设计行键的时候,如果数据量特别大,应该尽量的去随机,一定不要出现连续的


2.列族

(1)在我们设计hbase中表的时候,建议将我们的表做成高表,及减少列族数量,增加列族中的列。因为如果一个表拥有很多列族的话,那就代表操作表时,跨越的文件(HFile)就会很多,对我们的操作效率会有很大的影响。(当然如果数据量不大的话,那就随意喽)

(2)在设计表的时候,各个列/列族的名称不宜过长,因为hbase需要对这些数据在内存中做缓存,做索引,如果名称太长的话,可能会影响我们内存的容量。如下:

f1----->"cccccccccccccffffffff"

cf2----->"cf"

三、使用hive操作HBase

1.启动hive,进入hive的终端

hive --auxpath /opt/hive/lib/hive-hbase-handler-2.1.0.jar,/opt/hive/lib/zookeeper-3.4.6.jar 
--hiveconf hbase.master=master:16010 
--hiveconf hbase.zookeeper.quorum=master,slave01,slave02

2.在hive中创建hbase的表

①如果hbase重不存在该表,那么我们只能在hive中使用创建内部表的方式,来创建一张表,同时也会在hbase中创建相关的表。例如:

 create table hbase_of_hive(
                     id int,
                     name string,
                     age int
                    )row format delimited
                     fields terminated by ','
                     stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties (
                     "hbase.columns.mapping" = ":key,cf:name,cf:age",
                     "hbase.table.name" = "hbase_of_hive"
                    );

sql解释:在hive中创建了一张hbase_of_hive表,有三列内容id,name,age,同时映射到hbase中的表hbase_of_hive,其中id对应行键,并有一个列族cf,该列族下有两个字段name、age

②如果hbase中已经存在该表

  如果使用上述建表语句创建的时候,则会报错,因为在hbase中已经存在了一张表为hbase_of_hive,所以这时只能创建外部表,去映射hbase中的一张表。例如:

   create external table hbase_of_hive
                    (id int,
                     name string,
                     age int
                    )row format delimited
                     fields terminated by ','
                     stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties (
                     "hbase.columns.mapping" = ":key,cf:name,cf:age",
                     "hbase.table.name" = "t"
                    );

以上已经将hbase中基本的操作已经介绍完了,其实hbase中是可以创建二级索引的,其实说白了就是为除主键以外的字段添加索引。这个在我以后的文章中会做介绍,此处就不进行说明了~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章