HBase Configuration过程

HBase客户端API中,我们看到对HBase的任何操作都需要首先创建HBaseConfiguration类的实例。为HBaseConfiguration类继承自Configuration类,而Configuration类属于Hadoop核心包中实现的类,该类的主要作用是提供对配置参数的访问途径。

       Configuration类中的配置参数都是来自于Hadoop的配置文件中,而这些配置文件在Configuration类中被当做一个个资源(Resource),每个资源都包含了一组以XML格式存在的name/value对,事实上,这些资源每一个都是单独的XML文件,例如HBase安装配置中提到过的core-site.xml等。对于Configuration类而言,最重要的就是提供访问配置信息的接口,该类提供了一系列的Set/Get方法用于读写特定名称(name)的值(value)。此外,Configuration类除了提供加载默认配置文件的方法外,还提供了addResource方法加载指定的xml配置文件,这样就允许一些基于Hadoop的子项目甚至是用户自己定义的配置参数被加载使用。

       addResource类共有4种方式加载指定的配置信息:

      Ø  String:加载指定文件名的配置文件,该文件须在Hadoop的classpath中。

      Ø  Path:直接加载本地文件系统上以该参数为完整路径的配置文件。

      Ø  URL: 指定配置文件的Url路径并加载。

      Ø  InputStream:从输入流中反序列化所得到的配置对象。

      Configuration类在默认情况下,会按照顺序加载下列配置文件:

      Ø  core-default.xml:该文件包含了Hadoop的只读配置参数。

      Ø  core-site.xml:该文件即用户设置的Hadoop配置参数。

       由于Configuration类同时提供了对参数的Set方法,而处于集群的安全性等原因,管理员可能并不像某些参数在后期被改动,这时可以将配置文件中不希望被改动的参数设置为final,Configuration类在加载配置参数后,就会禁止对声明为final的参数的改动。如下图所示,可以设置core-site.xml中的fs.default.name参数为final,以禁止该值被修改。



       值得注意的是,早期版本的Hadoop配置是通过hadoop-site.xml文件实现的,在近期的版本中,该配置文件已被弃用,而改用core-site.xml、mapred-site.xml和hdfs-site.xml结合来完成配置。因此,在载入配置文件时,Hadoop会检查在classpath中是否存在hadoop-site.xml,如果存在则会在日志中输出一条DEPRECATED的Warnning信息。

       在了解了Configuration类之后,我们再分析其子类HBaseConfiguration类。下图为HBaseConfiguration类的类图,除了继承自Configuration类之外,该类还实现了一下私有或共有的方法。从功能上讲,该类也是提供对HBase配置参数的访问。

       从图中可以看到,该类有两个构造函数:

<code>

      public HBaseConfiguration();

      public HBaseConfiguration(finalConfiguration c);

</code>

       这两个构造函数是用来实例化HBaseConfiguration类的,然而只在早期版本中使用,目前我们分析的0.90.4以及后期版本中,这两个构造函数都已被启用。由于新的HBaseConfiguration类中所有的成员变量和成员方法都被声明为static,因此该类已经被禁止实例化,而当我们需要使用HBaseConfiguration对HBase的配置信息进行访问时,事实上获得的是一个Configuration类的实例。

<code>

      privatestatic Configuration conf = null;

      static{

             conf = HBaseConfiguration.create();

      }

</code>

       显然,HBaseConfiguration.create()方法返回的是一个能够访问HBase配置信息的Configuration的实例。

<code>

      publicstatic Configuration create() {

          Configuration conf = new Configuration();

          return addHbaseResources(conf);

      }

</code>

       create()方法中主要做两个操作:首先创建一个Configuration类的实例conf,然后调用addHbaseResources方法对conf实例进行处理并将处理后的conf实例返回给该方法的调用者。

       进一步,我们再分析addHbaseResources方法会执行那些操作:

<code>

      public static ConfigurationaddHbaseResources(Configuration conf) {

         conf.addResource("hbase-default.xml");

         conf.addResource("hbase-site.xml");

         checkDefaultsVersion(conf);

         checkForClusterFreeMemoryLimit(conf);

          return conf;

      }

</code>

       首先,调用conf对象的addResource(Stringname)方法,依照次序加载如下配置文件:

      Ø  hbase-default.xml:该文件是hbase的默认配置参数。

      Ø  hbase-site.xml:该文件为用户对hbase的配置参数。

       然后,调用checkDefaultsVersion(Configurationconf)方法,该方法通过conf实例获取hbase.defaults.for.version的值,即配置文件hbase-default.xml中的版本信息,同时获取当前运行的HBase的版本信息,如果默认配置文件中的版本号不同于当前运行的HBase的版本号,则会抛出一个RuntimeException,报告配置文件与当前HBase环境的版本不一致。

       最后,调用checkForClusterFreeMemoryLimit(Configuration conf)方法,该方法通过conf实例获取两个参数:

      Ø  hbase.regionserver.global.memstore.upperLimit:RegionServer中每个MemStore的内存上限比例,超过这个值,一个新的update操作将被挂起,并强制执行flush操作。默认值为0.4,表示最大比例为堆大小的40%。

      Ø  hfile.block.cache.size:HFile文件的块缓存大小占堆内存大小的比例。默认值为0.2,表示最大比例为20%。

       获取这两个参数的值后,该方法将判断这两个参数的总大小是否超过堆内存大小的80%,如果这两个参数之和超过0.8,就会抛出一个RuntimeException,报告当前MemStore和BlockCache所占堆内存比例超过要成功执行集群操作的阈值上限。这里参数之和不能超过0.8的原因,是由于在HConstants类中,定义了一个HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD常量,该常量的值为0.2,该值为集群成功启动所需要的最小空闲堆内存百分比,即集群成功启动所需要的空余堆空间至少为堆大小的20%。因此,当MemStore和BlockCache所占堆空间比例超过80%时,将导致集群无法成功启动。

本帖为原创内容,转载请声明出处:http://hi.baidu.com/ritchie_wang/item/d24c2dfe3911c1753d198bda

### HBase 安装教程 #### 准备工作 在安装 HBase 前,需确认已正确安装 Java 和 Hadoop,并确保其运行正常。HBase 对 Hadoop 版本有严格的要求,因此需要选择兼容的版本组合[^1]。 #### 下载与解压 下载适合当前系统的 HBase 版本(如 HBase 1.1.5),并将压缩包上传至服务器指定目录后进行解压: ```bash tar -zxvf hbase-1.1.5-bin.tar.gz -C /usr/local/ ``` 完成解压后,建议重命名文件夹以便于后续操作: ```bash mv /usr/local/hbase-1.1.5 /usr/local/hbase ``` #### 配置环境变量 编辑 `~/.bashrc` 文件,添加以下内容以设置 HBase 的环境变量: ```bash export HBASE_HOME=/usr/local/hbase export PATH=$PATH:$HBASE_HOME/bin ``` 执行以下命令使更改生效: ```bash source ~/.bashrc ``` #### 修改配置文件 进入 HBase 配置目录 `/usr/local/hbase/conf/` 并修改必要的配置文件: 1. **hbase-env.sh** 编辑该文件并定义 Java 路径及是否启用内置 ZooKeeper 实例: ```bash export JAVA_HOME=/opt/module/java export HBASE_MANAGES_ZK=true ``` 上述配置表示让 HBase 自动管理 ZooKeeper 实例[^4]。 2. **hbase-site.xml** 创建或编辑此 XML 文件来设定基本参数。例如: ```xml <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration> ``` 3. **regionservers** 在 `conf/regionservers` 中列出所有 RegionServer 主机名,默认情况下只需写入本地主机名即可测试单节点模式: ``` localhost ``` #### 启动服务 启动前先验证 Hadoop 是否正在运行。如果一切就绪,则可以依次启动 HBase 及其组件: ```bash start-hbase.sh ``` 通过以下命令检查 HBase 是否成功启动: ```bash jps ``` 应该能看到类似于 `HMaster` 或 `HRegionServer` 进程的存在。 另外,可以通过命令行工具进一步检验安装情况: ```bash /usr/local/hbase/bin/hbase version ``` 这会返回当前 HBase 的具体版本号信息[^2]。 #### 测试连接 打开浏览器访问 Web UI 地址 http://<your-host>:16010 来监控集群状态;或者直接利用 shell 登录尝试简单查询操作: ```bash hbase shell list create 'test', 'cf' put 'test', 'row1', 'cf:a', 'value1' scan 'test' disable 'test' drop 'test' exit ``` 以上即完成了基础版 HBase 的部署流程[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值