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

 

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

时间: 2024-10-09 01:08:45

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

HBase应用开发回顾与总结系列之一:概述HBase设计规范

  概述 笔者本人接触研究HBase也有半年之久了,虽说不上深入和系统,但至少算是比较沉迷.作为部门里大数据技术的探路者,笔者还要承担起技术传播的职责,所以在摸索研究的过程中总是不断地进行总结和测试,一路走来,慢慢地积累了一些东西,整理了一下,做成一个技术系列文档,暂时就叫做"HBase应用开发回顾与总结".虽然称不上什么高深莫测的技术,但本着开源和分享的精神,笔者本人还是很乐意将它逐篇贴出来.另外,笔者认为<HBase权威指南>算是比较好的HBase方面的技术书籍了,推荐

HBase应用开发回顾与总结系列之二:RowKey行键设计规范

2. RowKey行键设计规范 2.1. RowKey四大特性 2.1.1 字符串类型 虽然行键在HBase中是以byte[]字节数组的形式存储的,但是建议在系统开发过程中将其数据类型设置为String类型,保证通用性:如果在开发过程中将RowKey规定为其他类型,譬如Long型,那么数据的长度将可能受限于编译环境等所规定的数据长度. 常用的行键字符串有以下几种: 纯数字字符串,譬如9559820140512: 数字+特殊分隔符,譬如95598-20140512; 数字+英文字母,譬如city2

iOS开发UI篇—自定义瀑布流控件(接口设计)

iOS开发UI篇—自定义瀑布流控件(接口设计) 一.简单说明 1.关于瀑布流 电商应用要展示商品信息通常是通过瀑布流的方式,因为每个商品的展示图片,长度和商都都不太一样. 如果不用瀑布流的话,展示这样的格子数据,还有一种办法是使用九宫格. 但利用九宫格有一个缺点,那就是每个格子的宽高是一样的,如果一定要使用九宫格来展示,那么展示的商品图片可能会变形. 为了保证商品图片能够按照原来的宽高比进行展示,一般采用的是瀑布流的方式. 2.瀑布流的特点: 由很多的格子组成,但是每个格子的宽度和高速都是不确定

iOS开发系列之四 - UITextView 用法小结

// 初始化输入框并设置位置和大小 UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 300, 180)]; // 设置预设文本 textView.text = @""; // 设置文本字体 textView.font = [UIFont fontWithName:@"Arial" size:16.5f]; // 设置文本颜色 textView.textColor

「视频直播技术详解」系列之四:推流和传输

关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 在上一期中,我们介绍了讲解编码和封装. 本篇是<解密视频直播技术>系列之四:推流和传输.推流是直播的第一公里,直播的推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕.所以也是我们排查问题的第一步,如何系统地解决这类问题需要我们对相关理论有基础的认识. 本系列文章大纲如下: (一

XSS解决方案系列之四:关于编码

本文准备说明以下几个问题: 1. 关于重复编码的问题 2. 关于编码的多种形式的问题 3. 关于编码的几个常见问题 [说明] 本文所述编码是指encode,可以理解为转义,而不是编程序写代码. 编码或者转义机制替我们解决两个问题: a. 避免保留字冲突问题,对于web应用来说,XSS问题也是其中一类 b. 表达不可输入字符问题,比如我想在程序当中表达一个键盘上没有不可输入的字符,可以通过编码来解决. [进入正题] 1. 关于重复编码的问题: 我看了一些第三方的decoder/encoder库函数

赵青-《剑侠情缘网络版》开发回顾

<剑侠情缘网络版>开发回顾 2003 年的1月,我刚刚开发完<天王>项目,正在休息.总结和规划下一个项目.<天王>是我开发的众多项目中最满意的一个,虽然这篇文字主要是对<剑侠情缘网络版>(以下简称<剑网>)这个项目的回顾,但作为<天王>的项目经理和主程序,我还是想简单谈谈它.<天王>有几个第一:它是西山居第一个采用外购引擎来开发的游戏,第一个3D游戏,第一个动作类游戏,第一个被我们自己的开发人员所认同.并且愿意自发测试的游

开发,从需求出发 &#183; 之四 春天在这里

首先,我要大字标语表达立场: 你所使用的framework & non-core features,就跟女人穿在身上的衣服一样,越少越好! 扯淡完毕,说正经的. 让我们继续盯着花姐--啊,不--是 BeanFactory看. public static SearchService getSearchService() { if(MOCK) { return new SearchServiceMock(); } else { LuceneDAO luceneDAO = getLuceneDAO()

oracle学习入门系列之四 oracle数据库简介

oracle学习入门系列之四 oracle数据库简介 终于平滑过渡到oracle了,我们在第一篇中黑了拉里一次,这里就需要给拉里洗白了.话说当年钱钟书先生写完<围城>之后,无意中说,一个鸡蛋就算好吃,也没必要知道下蛋的母鸡是哪只.蛤蟆觉得有点不妥,钱钟书先生那是文人,自然要清高,而且他本是"下蛋"的母鸡当然不愿意被吃蛋的俗人打扰的,况且当时也没有统计粉丝一说.可是我们是吃蛋的啊,而且是大老粗,现在还统计粉丝数量,我们就需要知道谁下的蛋,是不是毒蛋,对不对?也得看看下了这么好