HBase Shell 常用操作

HBase Shell 常用操作

本文轉自http://debugo.com/hbase-shell-cmds/,感謝作者

HBase Shell是HBase的一個命令行工具,我們可以通過它對HBase進行維護操作。我們可以使用sudo -u hbase hbase shell來進入HBase shell。
在HBase shell中,可以使用status, version和whoami分別獲得當前服務的狀態、版本、登錄用戶和驗證方式。

HBase shell中的幫助命令非常強大,使用help獲得全部命令的列表,使用help ‘command_name’獲得某一個命令的詳細信息。 例如:

1. 命名空間

在HBase系統中,命名空間namespace指的是一個HBase表的邏輯分組,同一個命名空間中的表有類似的用途,也用於配額和權限等設置進行安全管控。
HBase默認定義了兩個系統內置的預定義命名空間:
• hbase:系統命名空間,用於包含hbase的內部表
• default:所有未指定命名空間的表都自動進入該命名空間
我們可以通過create_namespace命令來建立命名空間

通過drop_namespace來刪除命名空間

通過alter_namespac改變表的屬性,其格式如下:
alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
顯示命名空間以及設定的元信息:

顯示所有命名空間

在HBase下建表需要使用create table_name, column_family1, 這個命令:

這個時候這個表是創建在default下面。如果需要在debugo_ns這個命名空間下面建表,則需要使用create namespace:table_name這種方式:

List命令可以列出當前HBase實例中的所有表,支持使用正則表達式來匹配。

使用list_namespace_tables也可以直接輸出某個命名空間下的所有表

2. DDL語句

首先是建立HBase表,上面我們已經用過create命令了。它後面的第一個參數是表名,然後是一系列列簇的列表。每個列簇中可以獨立指定它使用的版本數,數據有效保存時間(TTL),是否開啓塊緩存等信息。

表也可以在創建時指定它預分割(pre-splitting)的region數和split方法。在表初始建立時,HBase只分配給這個表一個region。這就意味着當我們訪問這個表數據時,我們只會訪問一個region server,這樣就不能充分利用集羣資源。HBase提供了一個工具來管理表的region數,即org.apache.hadoop.hbase.util.RegionSplitter和HBase shell中create中的split的配置項。例如:

我們通過describe 來查看這個表中的元信息:

通過enable和disable來啓用/禁用這個表,相應的可以通過is_enabled和is_disabled來檢查表是否被禁用。

使用exists來檢查表是否存在

使用alter來改變表的屬性,比如改變列簇的屬性, 這涉及將信息更新到所有的region。在過去的版本中,alter操作需要先把table禁用,而在當前版本已經不需要。

另外一個非常常用的操作是添加和刪除列簇:

或者:

刪除表需要先將表disable。

3. put與get

在HBase shell中,我們可以通過put命令來插入數據。例如我們新創建一個表,它擁有id、address和info三個列簇,並插入一些數據。列簇下的列不需要提前創建,在需要時通過
:
來指定即可。

獲取一個id的所有數據

獲得一個id,一個列簇(一個列)中的所有數據:

通過describe ‘member’可以看到,默認情況下列簇只保存1個version。我們先將其修改到2,然後update一些信息。

4. 其他DML語句

通過delete命令,我們可以刪除id爲某個值的‘info:age’字段,接下來的get就無視了

通過deleteall來刪除整行

給’Sariel’的’info:age’字段添加,並使用incr實現遞增。但需要注意的是,這個value需要是一個數值,如果使用單引號標識的字符串就無法使用incr。在使用Java API開發時,我們可以使用toBytes函數講數值轉換成byte字節。在HBase shell中我們只能通過incr來初始化這個列,

十六進制1A是26,通過上面增1再減1後得到的結果。下面通過count統計行數。

通過truncate來截斷表。hbase是先將掉disable掉,然後drop掉後重建表來實現truncate的功能的。

5. scan和filter

通過scan來對全表進行掃描。我們將之前put的數據恢復。

指定掃描其中的某個列:

或者整個列簇:

除了列(COLUMNS)修飾詞外,HBase還支持Limit(限制查詢結果行數),STARTROW (ROWKEY起始行。會先根據這個key定位到region,再向後掃描)、STOPROW(結束行)、TIMERANGE(限定時間戳範圍)、VERSIONS(版本數)、和FILTER(按條件過濾行)等。比如我們從Sariel這個rowkey開始,找下一個行的最新版本:

Filter是一個非常強大的修飾詞,可以設定一系列條件來進行過濾。比如我們要限制某個列的值等於26:

值包含6這個值:

列名中的前綴爲birthday的:

FILTER中支持多個過濾條件通過括號、AND和OR的條件組合。

同一個rowkey的同一個column有多個version,根據timestamp來區分。而每一個列簇有多個column。而FIRSTKEYONLY僅取出每個列簇的第一個column的第一個版本。而KEYONLY則是對於每一個column只去取出key,把VALUE的信息丟棄,一般和其他filter結合使用。例如:

PrefixFilter是對Rowkey的前綴進行判斷,這是一個非常常用的功能。

^^

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