HBase的安裝配置和使用Java連線

yanhang0610發表於2017-09-10

Hadoop叢集搭建可參考:http://blog.csdn.net/yanhang0610/article/details/51896545

1        系統環境

系統:CentOS 7.0。

版本:JDK 1.8.0_91,Hadoop 2.7.3,Zookeeper 3.4.9,Hbase 1.2.5。

參考:https://wenku.baidu.com/view/b2bd94946bd97f192379e941.html

2        安裝

官網: http://hbase.apache.org

2.1 下載

    下載合適版本的Hbase:

    http://apache.mirror.gtcomm.net/hbase

    hbase版本需與hadoop版本、jdk版本匹配,參考:

http://hbase.apache.org/book.html#configuration

2.2 安裝

    解壓即完成安裝,並移動到合適位置。

2.3 設定環境變數

# vi /etc/profile.d/hbase.sh
export HBASE_HOME=/root/bigdata/hbase-1.2.5
 
# chmod 755 /etc/profile.d/hbase.sh
# . /etc/profile

2.4 配置檔案

參考:http://www.cnblogs.com/nexiyi/p/hbase_config_94.html

https://wenku.baidu.com/view/7110c790be23482fb5da4c97.html?pn=1

2.4.1   配置regionservers

snn

dn01

dn02

2.4.2   配置hbase-env.sh

# export HAVA_HOME=/usr/java/jdk1.8.0_91

export HBASE_MANAGES_ZK=false  #禁用hbase管理zk,使用自己安裝的zk

2.4.3   配置hbase-site.xml

<configuration>
 
  <property>
   <name>hbase.rootdir</name>
   <value>hdfs://nn:9000/hbase</value>
 </property>
 
  <property>
   <name>hbase.master</name>
   <value>hdfs:nn:60000</value>
 </property>
 
  <property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
 </property>
 
  <!--zookeeper節點,hbase-env.sh裡的HBASE_MANAGES_ZK=true時有效 -->
  <property>
   <name>hbase.zookeeper.quorum</name>
   <value>nn,dn01,dn02</value>
 </property>
 
  <property>
   <name>hbase.zookeeper.property.dataDir</name>
   <value>/root/bigdata/zookeeper-3.4.9/dataDir</value>
 </property>
 
  <property>
   <name>hbase.zookeeper.property.clientPort</name>
   <value>2181</value>
    </property>
 
  <property>
   <name>hbase.tmp.dir</name>
   <value>/root/bigdata/hbase-1.2.5/tmpDir</value>
 </property>
 
  <!-- web ui-->
  <property>
   <name>hbase.master.info.port</name>
   <value>60010</value>
  </property>
 
</configuration>

2.4.4   配置backup-masters

為了增加Hbase叢集的可用性,可以為hbase增加多個backup master。當master掛掉後,backup master可以自動接管整個hbase的叢集。

配置backup master的方式是在hbase的conf下增加檔案:backup-masters,在該檔案裡面增加backup master的機器列表,每臺機器一條記錄。

2.5 安全配置

3        執行

在$HBASE_HOME/bin下,執行:

# ./start-hbase.sh

啟動成功後可以訪問WEB管理頁面,如:

http://192.168.1.210:60010

關閉:

# ./stop-hbase.sh

4        連線

4.1 Hbase Shell

在$HBASE_HOME/bin下,執行:

# ./hbase shell

4.2 Hbase客戶端工具

4.3 Java連線

4.3.1   環境配置

在本地hosts檔案(如C:\Windows\System32\drivers\etc\hosts)里加上HBase叢集上的hosts配置。

匯入Hbase安裝包下的lib資料夾裡的所有jar包到classpath,可做成user library。

4.3.2   示例程式碼

package hbase.demo;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
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 Demo {
   
    public static void main(String[] args) {
       String tableName = "member";
      
       try {
           Configuration configuration = HBaseConfiguration.create();
           configuration.set("hbase.zookeeper.property.clientPort","2181"); // zookeeper客戶端訪問埠
           configuration.set("hbase.zookeeper.quorum","192.168.1.213"); // HBase叢集伺服器地址(任一臺)
          
           HBaseAdmin admin = newHBaseAdmin(configuration);
          
           System.out.println(admin.tableExists(tableName));
          
           // 讀取表資料
           HTable table = newHTable(configuration,tableName);
            Scan scan = new Scan();
            ResultScanner rs =table.getScanner(scan);
            for (Result result :rs) {
            for (Cell cell : result.listCells()) {
                 String key = Bytes.toString(CellUtil.cloneQualifier(cell));
                 String value = Bytes.toString(CellUtil.cloneValue(cell));
                  System.out.println(key +"=> " + value);
                }
            }
          
       } catch (Exception e) {
           e.printStackTrace();
       }
    }
 
}

執行結果:

true
city => hangzhou
contry => china
province => zhejiang
age => 24
birthday => 1987-06-17
company => alibaba
city => jieyang
contry => china
province => guangdong
town => xianqiao
birthday => 1987-4-17
company => alibaba
favorite => movie

5        常見問題

5.1 Java連線Hbase叢集報超時錯誤

報錯:java.io.IOException: Failed to get result within timeout,timeout=60000ms

原因:開發環境本地未配置hosts。

解決:在本地hosts檔案(如C:\Windows\System32\drivers\etc\hosts)里加上HBase叢集上的hosts配置即可。

 

相關文章