個人大數據總結之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中是可以創建二級索引的,其實說白了就是爲除主鍵以外的字段添加索引。這個在我以後的文章中會做介紹,此處就不進行說明了~

 

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