發表文章

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 - hdus...

hbase shell (1)

要存取hbase, 最簡單的方法就是透過hbase shell, hbase shell是hbase內建的存取介面, 透過即時的命令輸入, 可以操作hbase中資料表的操作, 我們以hbase 0.94版本為例, 介紹hbase shell的功能: 首先, 我們先確認hbase和hadoop的程式都仍在執行, 接著, 進入hbase的路徑(/opt/hbase), 進入hbase shell: $ /opt/hbase/bin/hbase shell 進入hbase shell後, 我們先輸入help查看說明: hbase(main):003:0> help HBase Shell, version 0.94.2, r1395367, Sun Oct  7 19:11:01 UTC 2012 Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command. Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group. COMMAND GROUPS:   Group name: general   Commands: status, version, whoami   Group name: ddl   Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, en  able, enable_all, exists, is_disabled, is_enabled, list, show_filters   Group name: dml   Commands: count, delete, deleteall, get, get_counter,...

thrift api 使用: HTML

在這一篇文章中, 我們將介紹如何使用HTML透過PHP讀取hbase, 我們安裝的目錄結構為: hadoop                     /opt/hadoop hbase                        /opt/hbase 網頁根目錄             /var/www/ hbase的php目錄      /var/www/hbase thrift php                  /var/www/hbase/thrift php存放目錄           /var/www/php 測試程式之前,請先確定hbase , hadoop 都有正常運作中 $ bin/hbase thrift start 尚在執行 以下是我們的範例程式(example.php):     <!DOCTYPE html>     <html>     <meta charset="utf-8">     <head>     <script>     function getUser()     {     if(window.XMLHttpRequest)     {         xmlhttp = new XMLHttpRequest();         if(xmlhttp != null)     ...

thrift api 使用: PHP

在 上一篇 文章中, 提及thrift server的建立與存取, 在這一篇文章中, 將介紹如何透過thrift存取hbase資料, 類似的內容,  waue0920 已經寫下詳細的紀錄, 因此, 我們將跟隨相同的架構, 並補充一些內容, 我們安裝的目錄結構為: hadoop                     /opt/hadoop hbase                        /opt/hbase 網頁根目錄             /var/www/ hbase的php目錄 /var/www/hbase thrift php                  /var/www/hbase/thrift 測試程式之前,請先確定hbase , hadoop 都有正常運作中 $ bin/hbase thrift start 尚在執行 以下是這次範例程式(example.php) <?php $GLOBALS['THRIFT_ROOT'] = '/var/www/hbase/thrift'; require_once( $GLOBALS['THRIFT_ROOT'].'/Thrift.php' ); require_once( $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php' ); require_once( $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php' ); require_once( $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php' ); require_once( $GLOBALS['THRIFT_ROOT'].'/pa...

hbase java api 介紹 (1)

在之前, 我們介紹 如何編譯hbase-client程式 時, 曾經放上一段程式碼作為範例, 然而, 該程式碼需要預先建立好一個hbase table (myHBaseTable), 並且在myHBaseTable中, 建立一個column: myFamily, 在今天的範例中, 我們將擴展這個例子, 從建立table開始, 都由hbase java api負責, 以下是程式: import java.io.*; import java.net.*; import java.util.*; import java.lang.*; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.*; import org.apache.hadoop.conf.Configuration; public class hbasetest {     public static Configuration conf;     static {         conf = HBaseConfiguration.create();         conf.set("hbase.zookeeper.property.clientPort", "2222");         conf.set("hbase.zookeeper.quorum", "hbasemaster");     }     public static void main(String[] args) throws IOException {         HBaseAdmin admin = new HBaseAdmin(conf);         // create a hbase table   ...

hbase 0.94 + thrift 0.7.0 安裝 (2)

之前介紹了thrift的 安裝 , 在這裡要特別提醒的是, thrift有版本相容問題, 以作者的測試經驗, 0.9.1和0.9.2版的thrift都和hbase 0.94不相容, 不相容的地方主要在於library的位置, 以及name space的支援, 若是使用較新版本的thrift, 可能要自行更改一些變數設定,