码迷,mamicode.com
首页 > 其他好文 > 详细

HBase应用开发回顾与总结系列之四:HBase配置管理类接口设计

时间:2015-12-25 18:39:53      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

 

利用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;
        }
    }
}

 


 

作者:商兵兵

单位:河南省电力科学研究院智能电网所

QQ:52190634

主页:http://www.cnblogs.com/shangbingbing

空间:http://shangbingbing.qzone.qq.com

HBase应用开发回顾与总结系列之四:HBase配置管理类接口设计

标签:

原文地址:http://www.cnblogs.com/shangbingbing/p/5076310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!