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 安裝
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管理頁面,如:
關閉:
# ./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配置即可。