利用Eclipse进行HBase应用开发时,至少需要确定三个配置信息,如下表所示:
#hbase config
#HMaster服务部署主机及端口号
hbase.master=hdp-wuyong:60010
#Zookeeper端口号
hbase.zookeeper.property.clientPort=2181
#Zookeeper服务部署主机信息
hbase.zookeeper.quorum=hdp-songjiang,hdp-lujunyi,hdp-wuyong
我们将以上信息配置进Hadoop.config.properties文件中,系统调用HBase接口方法之前,初始化加载此配置信息即可。
对HBase配置信息的管理,我们专门设计了一个工具类,叫做HBaseConfigUtil,主要功能包括初始化加载HBase配置信息、构建HBase Configuration实例、检查与HBase集群的通信以及关闭相关链接等。主要代码如下所示:
import java.io.File;
import java.util.HashMap;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HConnectionManager;
import com.hnepri.common.util.PropertiesUtil;
/**
* Description: HBase配置管理工具类<br>
* Copyright: Copyright (c) 2015<br>
* Company: 河南电力科学研究院智能电网所<br>
*@author shangbingbing 2015-01-01编写
*@version 1.0
*/
public class HBaseConfigUtil {
/**
* 加载解析HBase自定义配置信息。<br>
* 需在系统启动时调用此方法加载自定义配置信息,否则将采用默认配置或者无法连接HBase。
*/
public static void loadHBaseConfigProperties() {
HashMap<String,String> pps = PropertiesUtil.readProperties("hbase.config.properties");
HBaseConfigUtil.setHbaseConfigItemList(pps);
}
private static Configuration configuration = null;
/**
* hbase配置信息列表,其中key中存储参数名称,譬如master.hadoop;value中存储参数值,譬如master.hadoop:60010等
*/
private static HashMap<String,String> hbaseConfigItemList = new HashMap<String,String>();
/**
* 获取hbase配置信息列表
*@return
*/
public static HashMap<String, String> getHBaseConfigItemList() {
return hbaseConfigItemList;
}
/**
* 设置hbase配置信息列表
*@param hbaseConfigItemList
*/
public static void setHbaseConfigItemList(HashMap<String, String> hbaseConfigItemList) {
HBaseConfigUtil.hbaseConfigItemList= hbaseConfigItemList;
}
/**
* 添加hbase配置信息
*@param key
*@param value
*/
public static void addHBaseConfigItem(String key,String value) {
if(hbaseConfigItemList.containsKey(key)) {
hbaseConfigItemList.remove(key);
}
hbaseConfigItemList.put(key, value);
}
/**
* 删除hbase配置信息
*@param key
*/
public static void removeHBaseConfigItem(String key) {
if(hbaseConfigItemList.containsKey(key)) {
hbaseConfigItemList.remove(key);
}
}
/**
* 获取HBase Configuration对象
*@return
*/
public static Configuration getHBaseConfig() {
if(configuration == null) {
configuration= HBaseConfiguration.create();
try {
//解决winutils.exe不存在的问题
File workaround = new File(".");
System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath());
new File("./bin").mkdirs();
new File("./bin/winutils.exe").createNewFile();
// conf.addResource("hbase-site.xml");
//初始化设置zookeeper相关配置信息
if(hbaseConfigItemList != null && hbaseConfigItemList.size() > 0) {
for(String key : hbaseConfigItemList.keySet()) {
String value= hbaseConfigItemList.get(key); configuration.set(key, value); } } }catch (Exception ex) {
System.out.println(ex.toString());
}
}
return configuration;
}
/**
* 刷新重置HBase配置对象
*/
public static void initHBaseConfig() {
configuration= null;
}
/**
* 关闭所有连接
*/
public static void closeAllConnections() {
HConnectionManager.deleteAllConnections();
}
/**
* 关闭当前连接
*/
public static void closeConnection() {
HConnectionManager.deleteConnection(configuration);
}
/**
* 检查客户端与HBase集群的通信状况。
*@return 返回true则表示正常,false表示异常。
*/
public static boolean checkHBaseAvailable() {
try {
HBaseAdmin.checkHBaseAvailable(configuration);
return true;
}catch (Exception e) {
return false;
}
}
}