發表文章

目前顯示的是 6月, 2015的文章

hbase shell (2)

在hbase中, 有些時候我們須查詢某一欄位的數值是否更新, 在這個情況下, 應該如何利用hbase shell的方式查詢呢? 如果我們確知row-key的名稱, 我們可以利用get的方式執行: hbase(main):005:0> get 'UserTable', 'B8:8D:12:1A:59:76' [...] 10 row(s) in 0.4240 seconds 甚至指定欄位, 例如: hbase(main):008:0> get 'UserTable', 'B8:8D:12:1A:59:76', {COLUMN=>['x', 'y']} COLUMN                CELL  x:                   timestamp=1434519293316, value=12.847539358614743  y:                   timestamp=1434519293316, value=28.36858703324554 2 row(s) in 0.0100 seconds 然而, 若是row-key為自動產生 (由寫入程式決定),  或是, 不知道row-key的資訊 (例如: 使用者的MAC位址), 應該如何查詢呢?

[shell script] 重新啟動 hbase 叢集

對於hbase而言, 若是發生無法挽救的錯誤, 導致需要重新啟動hbase叢集, 一直以來都是麻煩的事情... 尤其, 這還牽涉到HDFS的資料同步, 因此, 若是要重新格式化hbase叢集需要經過以下步驟: 1. 關閉hbase (注意HMaster, 可能會沒有回應...) 2. 關閉hadoop 3. 清除各節點上hbase和hadoop的資料 4. 格式化hadoop namenode 5. 啟動hadoop 6. 啟動hbase 由於目前所使用的雲端環境不是非常穩定, 有時會所有虛擬機同時重新啟動, 導致hbase叢集也必須重啟... 因此, 我在hbase master節點上寫了一支shell script, 把重啟hbase叢集自動化執行 以下是一些環境變數: hbase 叢集節點: hbasemaster, hbaseslave01, hbaseslave02 HDFS資料儲存位置: /opt/data hadoop log儲存位置: /opt/hadoop/logs hbase資料暫存位置: /opt/hbase/hbase-data hbase資料暫存位置: /opt/hbase/hbase-logs 安裝hadoop和hbase的權限: hduser (這些變數的設定請參考hadoop和hbase的安裝) 以下是shell script檔 (restart_hbase.sh): #!/bin/bash # Program: #       This program restarts hbase cluster. # History: # 2015/06/11     Chun-Hsien Ko     First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH pid=$(su - hduser -c "cat /opt/hbase/hbase-pids/hbase-hduser-master.pid") echo $pid kill -9 $pid su - hduser -c "/opt/hbase/b