發表文章

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

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
        String tablename = "myHBaseTable";
        String[] families = {"myFamily"};
        HTableDescriptor htd = new…

hbase 0.94 + thrift 0.7.0 安裝 (2)

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

hbase 0.94 + thrift 0.7.0 安裝 (1)

上一篇文章中, 我們介紹了如何用java來存取hbase叢集,
在這一文章中, 我們介紹如何建立thrift的環境,
要注意的是: 這一篇文章是以hbase 0.94作為範例,
在其他版本(0.96)上是否需要其他設定, 則需要再試看看,

考慮到hbase原生只支援java與shell方式存取,
對於其他程式語言, 尤其是網頁界面而言, 就成了很大的障礙,
thrift就提供了解決方案, 讓像是PHP的網頁語言也可以使用,


hbase-client java 程式的編譯與執行

完成hbase從即架設之後,
接下來, 就要利用hbase來存取資料,
在hbase的架構中, 原生的存取方式有三種:
thrift, java program 以及 hbase shell,

在這篇文章中, 我們假設hbase中已經有一個myHBaseTable,
在myHBaseTable中, 只有一個column: myFamily,
接著, 我們想執行以下的程式:

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;

public class hbasetest {
    public static Configuration conf;
    static {
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.property.clientPort", "2222");
        conf.set("hbase.zookeeper.quorum", "master.hbase.mbwcl.nctu.edu.tw");
    }
    public static void main(String[] args) throws IOException {

        HTable table = new HTable(conf, "m…

hbase 0.96 on hadoop 1.1.2 安裝

在完成了hadoop安裝後, 我們可以繼續安裝hbase,
hadoop的安裝可以參考: hadoop 1.1.2安裝(1), hadoop1.1.2安裝(2),
在安裝hbase前, 要先確認hadoop的版本是否相容(chapter 4.1):

HBase-0.92.xHBase-0.94.xHBase-0.96Hadoop-0.20.205SXXHadoop-0.22.xSXXHadoop-1.0.xSSSHadoop-1.1.xNTSSHadoop-0.23.xXSNTHadoop-2.xXSS
在hbase 0.96版本中, 就已經開始支援hadoop 2.0 (YARN),
不過, 考量到我們對於haddop 1.x版本較為熟悉,
我們還是以hadoop 1.1.2作為使用的hadoop版本範例,

hadoop1.1.2安裝 (2)

上一篇文章中, 介紹完hadoop 1.1.2的環境建立後,
在這一篇文章中, 將介紹hadoop 1.1.2的參數設定,

hadoop1.1.2安裝 (1)

在這一篇文章中, 我們將開始介紹如何安裝hadoop,
我們以1.1.2版本為基礎, 介紹hadoop的安裝流程,

hadoop是一個叢集運算與儲存的計算框架,
在hadoop 1.x版本中, 可以分成兩個部分:
HDFS (hadoop distributed file system) 以及 MapReduce,
HDFS是hadoop中的儲存架構, 提供分散式的資料儲存,
而MapReduce是計算的框架, 提供分散式的運算框架,
有關hadoop更詳細的介紹, 可以參考之前的文章.

[TRACE] org.apache.hadoop.hbase.regionserver.HRegion (merge, 0.94)

上一篇trace HRegion的文章是0.96以後的版本,
因此, 在進行merge時, 有較為完整的程序,
在0.94版的hbase中, 關於merge的函示共有兩個:
mergeAdjacent()和merge(),
事實上, mergeAdjacent()也是經過判斷後呼叫merge()函式,
因此, 我們在這篇文章中專注研讀merge()函式,
以下是merge()的全部程式碼:

4630/**4631 * Merge two regions whether they are adjacent or not.4632 *4633 * @param a region a4634 * @param b region b4635 * @return new merged region4636 * @throws IOException4637 */4638publicstaticHRegion merge(HRegion a, HRegion b) 4639throws IOException { 4640if (!a.getRegionInfo().getTableNameAsString().equals( 4641 b.getRegionInfo().getTableNameAsString())) { 4642thrownew IOException("Regions do not belong to the same table"); 4643 } 46444645 FileSystem fs = a.getFilesystem(); 46464647// Make sure each region's cache is empty46484649a.flushcache();4650b.flushcache();46514652// Compact each region so we only have one store file per family46534654 a.compactStores(true); 4655if (LOG.isDebugEnabled()) { 4656 LOG.debug("Files for re…

[TRACE] org.apache.hadoop.hbase.regionserver.RegionMergeTransaction

在之前的文章中, 我們介紹了org.apache.hadoop.hbase.regionserver,
在org.apache.hadoop.hbase.regionserver這個函式中,
使用RegionMergeTransaction物件執行Region的合併:

RegionMergeTransaction rmt = new RegionMergeTransaction(a, b, true);

其中, a, b 是要被合併的Region.
rmt則是合併之後, 新展生的Region.
為了詳細了解Region在進行合併時的操作,
我們將繼續研讀RegionMergeTransaction的原始碼,