發表文章

目前顯示的是 3月, 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"};  

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 ta

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.x HBase-0.94.x HBase-0.96 Hadoop-0.20.205 S X X Hadoop-0.22.x S X X Hadoop-1.0.x S S S Hadoop-1.1.x NT S S Hadoop-0.23.x X S NT Hadoop-2.x X S S 在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的參數設定, 在hadoop資料夾中, 所有設定檔都在hadoop/conf/, 首先, 我們先設定hbase-env.sh: # The java implementation to use.  Required. export JAVA_HOME=/usr/lib/jvm/java-6-oracle/ # The maximum amount of heap to use, in MB. Default is 1000. export HADOOP_HEAPSIZE=1000 # Where log files are stored.  $HADOOP_HOME/logs by default. export HADOOP_LOG_DIR=/opt/logs/hadoop # The directory where pid files are stored. /tmp by default. export HADOOP_PID_DIR=/opt/pids/hadoop 在上述設定中, 一開始, 先設定 java 的路徑(安裝的路徑, 上面是預設路徑), 第二項則是 java 程式使用的 heap (記憶體大小), 第三項則是 LOG 的位置, 第四項則是 PID (Process ID) 的存放位置, 盡量設在 hadoop 資料夾以外的地方 (放在/opt/data/hadoop), 接著, 設定 core-site.xml: <configuration>     <property>         <name>fs.default.name</name>   <value>hdfs://master.hbase.mbwcl.nctu.edu.tw:9000</value>     </property> </configuration> 在 hadoop 中, 所有的設定都是以 xml 的格式, 儲存至檔案中, 在 core-site.xml 設定中, 設定 hd

hadoop1.1.2 安裝 (1)

在這一篇文章中, 我們將開始介紹如何安裝 hadoop, 我們以1.1.2版本為基礎, 介紹 hadoop 的安裝流程, hadoop 是一個叢集運算與儲存的計算框架, 在 hadoop 1.x 版本中, 可以分成兩個部分: HDFS (hadoop distributed file system) 以及 MapReduce, HDFS 是 hadoop 中的儲存架構, 提供分散式的資料儲存, 而 MapReduce 是計算的框架, 提供分散式的運算框架, 有關 hadoop 更詳細的介紹, 可以參考之前的文章. 在安裝hadoop之前, 必須先確定環境已經設定正確, 包括了: java JDK安裝(1.6版以上) , 共通的使用者權限( 帳戶 以及SSH), 以及網路的對應( /etc/hostname , /etc/hosts, 關閉IPV6 ), 這一部分的設定與說明, 我們可以參考網路上的資源, 或是之前的文章, 在完成上述設定後, 我們已經建立了一個叢集: master.hbase.mbwcl.nctu.edu.tw 192.168.2.59 slave01.hbase.mbwcl.nctu.edu.tw 192.168.2.60 slave02.hbase.mbwcl.nctu.edu.tw 192.168.2.61 接著, 我們就進行hadoop 1.1.2的安裝, 在hadoop的架構中, 所有的程式都以java程式執行, 因此, 我們只需要下載hadoop的執行程式, 分布在每個節點上, 透過SSH的方式在節點上執行, 並透過網路資料交換(socket), 確認節點的任務進行. 在linux的環境下, 我們先將/opt資料夾更改存取權限, 以及擁有者(user:hadoop), 使/opt成為hadoop的根目錄: $ sudo chown -R user:hadoop /opt $ sudo chmod -R 777 /opt 接著, 在/opt目錄下, 用wget的方式, 獲取hadoop的壓縮檔, $ wget https://archive.apache.org/dist/hadoop/core/hadoop-1.1.2/hadoop-1.1.2.tar.gz 在

[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 a 4634 * @param b region b 4635 * @return new merged region 4636 * @throws IOException 4637 */ 4638 public static HRegion merge( HRegion a, HRegion b) 4639 throws IOException { 4640 if (!a.getRegionInfo().getTableNameAsString().equals( 4641 b.getRegionInfo().getTableNameAsString())) { 4642 throw new IOException( "Regions do not belong to the same table" ); 4643 } 4644 4645 FileSystem fs = a.getFilesystem(); 4646 4647 // Make sure each region's cache is empty 4648 4649 a.flushcache(); 4650 b.flushcache(); 4651 4652 // Compact each region so we only have one sto

[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的原始碼,