HBase Configuration过程

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HBase Configuration过程 的相关文章

  • OSX 上 MongoDB 的 Sane 默认设置?

    我安装了 MongoDB 并进行了如下设置 数据库路径 data db 系统范围的配置文件 usr local mongodb mongod conf launchctl plist Library LaunchDaemons org mo
  • HBase Java 客户端 - 未知主机:localhost.localdomain

    版本 Hadoop 2 0 0 cdh4 3 1 HBase 0 94 6 cdh4 3 1 我正在运行cloudera快速启动vm 一切都在172 16 144 150上运行 这是我的小HBase Java客户端 HbaseClient
  • NHibernate连接字符串:如何指定端口号和服务器\实例?

    我正在用 NHibernate 2 1 替换旧的 DAL 我的 NHibernate 配置适用于我的本地开发机器 但不适用于 UAT UAT 数据库是在非默认端口上设置的集群 我正在使用类似于下面的标准 NHibernate confie
  • 每个配置文件中的部分只能出现一次!为什么?

    我收到以下异常 每个配置文件中的部分只能出现一次 有关例外情况 请参阅帮助主题 我的配置文件看起来像这样
  • Android:程序化“允许重新定向”首选项仅有效一次

    我有一个带有 allow reorientation 键的 CheckBoxPreference 如果启用 那么我的主要活动应该在设备旋转时重新定向 如果禁用 它应该保持在当前方向 我在我的manifest xml中设置了 android
  • 如何导出 WAS 6.1 服务器配置

    有没有一种方法可以从 WAS 在 RAD 6 下运行 导出我的服务器设置 以便其他开发人员能够使用相同的脚本来设置他们的环境 要手动执行此操作 请在RAD 6 x 只需右键单击 服务器 视图中的服务器名称并选择以下选项之一 Export s
  • 将多个前缀行过滤器设置为扫描仪 hbase java

    我想创建一台扫描仪 它可以为我提供带有 2 个前缀过滤器的结果例如 我想要其键以字符串 x 开头或以字符串 y 开头的所有行 目前我知道只能使用一个前缀 方法如下 scan setRowPrefixFilter prefixFiltet 在
  • Spring MVC 配置启用

    我正在从头开始建立一个项目 目前我正在配置Spring MVC 4 1 5使用java配置 整个应用程序正在 tomcat gradle 插件上运行 有人可以解释一下为什么我需要对班级进行以下调用DefaultServletHandlerC
  • App.config 连接字符串相对路径

    我需要在 app config 中设置 sqlite 连接字符串 我想设置相对于调试 发布文件夹的路径 数据库文件将复制到这些文件夹
  • 在 Rails 应用程序中存储全局应用程序设置的最佳方法是什么?

    我想处理两种全局配置设置 用户可以更改的设置 例如是否发送某些事件的通知邮件 与特定产品版本相关的设置 例如禁用免费版本中的功能 该功能仅在商业版本中可用 存储这些设置的最佳方式是什么 数据库 配置文件 硬编码在源代码中 对于这两种情况的数
  • 从主目录隐藏八度工作区文件

    我想更改文件octave workspace从我的主目录中 只需将其重命名为 octave workspace 如何设法使 Octave 识别具有此新名称的工作区文件 或创建一个新文件 Thanks 这就是该组织的目的octave core
  • Spring Boot如何读取jar外部的属性文件

    在我的目标文件夹中 有 2 个文件夹 lib 和 conf 所有的属性文件都放在conf文件夹中 jar放在lib Folder中 在 Spring Boot 之前 我们在 spring xml 中使用以下配置来使用 value
  • 企业库 CacheFactory.GetCacheManager 抛出空引用

    我正在尝试将使用 1 1 版本的企业库缓存块的应用程序转换为 2 0 版本 我认为我真正遇到的问题是不同 EntLib 部分的配置被分成几个文件 显然 这曾经是由ConfigurationManager 部分处理程序 但现在已经过时 取而代
  • 在 CakePHP 中访问 Configuration::read 控制器

    我的 CakePHP 应用程序有一个单独的配置文件 该文件加载在 bootstrap php 中 我的问题是 如何访问控制器中的配置变量 IE 如何在控制器中执行Configure read variable 函数 谢谢 在我的自定义配置文
  • 在 Java 构建过程中更改常量的最佳方法

    我继承了一个在 Tomcat 下运行的 Java 应用程序 servlet 由于历史原因 根据应用程序的部署位置 本质上是品牌问题 代码具有不同的 外观和感觉 选项 有几个常量控制这个品牌过程 它们具有不同的功能 不应压缩为单个常量 即 B
  • JAAS keytab 配置的相对路径

    我有一个系统 其中 NET 客户端使用 Kerberos 针对 Java 服务器进行身份验证 一切正常 但我正在尝试改进服务器配置 目前一个keytab根目录中需要文件C 因为我的jaas配置文件看起来像这样 Server com sun
  • 使用 Cassandra 进行单元版本控制

    我的应用程序使用 AbstractFactory 作为 DAO 层 因此一旦实现了 HBase DAO 系列 创建 Cassandra DAO 系列并从多个角度查看差异对我来说将是非常好的 不管怎样 试图做到这一点 我看到 Cassandr
  • Akka :: 调度程序 [%name%] 未配置,使用默认调度程序

    我创建了以下 application conf akka actor prio dispatcher type Dispatcher mailbox type my package PrioritizedMailbox 当转储配置时 act
  • Spring Boot - YML 配置 - 合并时擦除条目

    我的应用程序有一个基本 YML 配置 在类路径中如下所示 hello world values bar name bar name description bar description foo name foo name descript
  • 如何在没有 web.xml 的情况下将 Struts2 添加到 Web 应用程序?

    有人可以帮助我使用 Spring Boot 和 Struts2 进行最小项目设置吗 我已经使用 H2 数据库创建了一个 Spring Boot 应用程序 我还添加了一个h2Configuration类 以便我能够访问数据库localhost

随机推荐

  • matlab cody学习笔记 day23 判断输入的是否是向量

    好久没更新了 xff0c 今天刷一道 1 Problem 605 Whether the input is vector Given the input x return 1 if x is vector or else 0 我本来想的是获
  • 串口通信校验方式(even,odd,space,mark)

    无校验 xff08 no parity xff09 奇校验 xff08 odd parity xff09 xff1a 如果字符数据位中 34 1 34 的数目是偶数 xff0c 校验位为 34 1 34 xff0c 如果 34 1 34 的
  • Eigen介绍及简单使用

    Eigen是可以用来进行线性代数 矩阵 向量操作等运算的C 43 43 库 xff0c 它里面包含了很多算法 它的License是MPL2 它支持多平台 Eigen采用源码的方式提供给用户使用 xff0c 在使用时只需要包含Eigen的头文
  • APM最新固件(20181220)

    ardupilot Makefile MAKEFILE LISTWAF BINARY 61 modules waf waf lightWAF 61 python WAF BINARY WAF FLAGSEXPLICIT COMMANDS 6
  • Java考试复习

    java考试复习 1 判断题 单选题 填空题看网上测试 xff1b 注意 xff01 xff01 xff01 xff08 单选题答案里面的粗黑的有分号是代表同时满足 xff1b 填空题答案里面的粗黑的有分号是代表其中一个就满足 xff09
  • 计算机网络之第4章 网络层

    计算机网络 第4章 网络层 网络层概述 以下属于网络层范畴的是 IP地址在因特网使用的TCP IP协议栈中 xff0c 核心协议是 IP 网络层提供的两种服务 TCP IP参考模型的网络层提供的是 无连接不可靠的数据报服务 IPv4地址概述
  • 中标麒麟Linux服务器5.0(mips64el)安装QT开发环境

    中标麒麟服务器5 0 xff08 mips64el xff09 上QT开发需要用到can口 xff0c 原版自带的QT不包含相关模块 xff0c 故重新下载一个带有can模块的qt版本进行安装 该系统架构是mips64el的 xff0c 所
  • mavros永远连接失败

    之前在做无人机使用px4源码避障的实物实验 xff0c 已经有了无人机 xff0c 想按照惯例先在nvidia NX上位机上跑一下仿真实验测试一下 xff0c 结果mavros用了一万种方法 xff0c 就是连不上 xff0c 仿真跑不了
  • 成功解决mingw下载太慢的问题

    MinGW w64 for 32 and 64 bit Windows Browse Files at SourceForge net 1 在此页面下滑找到你要下载的文件 2 点击Problems Downloadings 3 选择一个合适
  • PyQt5学习笔记9_使用setStyle和setStyleSheet进行换肤

    通过QStyleFactory keys 可获取用于setStyle的有效值 xff0c 本例程中包含 Windows xff0c WindowsXP xff0c WindowsVista xff0c Fusion 四种风格 xff0c 此
  • mkdir 创建目录

    参数选项 参数说明 p 连续创建目录 mkdir data 创建目录data 或 cd mkdir data 或 cd mkdir data 注 xff1a 是将两条命令分隔开 mkdir p data b c 连续创建目录 data b
  • CC, TBD, EOD都是什么鬼?拯救一写英文邮件就发慌

    职场新人在工作中经常听到这样的对话 xff1a 给客户的邮件记得CC我 xff0c BCC给财务 xff0c 告诉客户合同签订时间还TBD But CC BCC TBD到底是什么鬼 xff1f 马上来恶补一下职场英文缩写 xff0c 拯救一
  • Apache Openmeetings安装介绍

    翻译自Apache OpenMeetings 更新时间 xff1a 2017 01 11 目录 目录Openmeetings安装端口NAT设置自定义硬件需求Debian链接更新日志VoIP提示和技巧 Openmeetings安装 从过往版本
  • Could not transfer artifact xxx from/to xxx解决方案

    在做Openmeetings二次开发的时候install时出现了如下错误 INFO Parent project loaded span class hljs keyword from span repository org apache
  • MavenInvocationException解决方案

    在编译Openmeetings的时候出现了这样的错误信息 xff1a MavenInvocationException Error configuring command line Reason Maven executable not f
  • 生成生命周期介绍

    翻译自http maven apache org guides introduction introduction to the lifecycle html 目录 目录生成生命周期基础 生成生命周期由阶段组成通用命令行调用一个生成阶段是由
  • Crypto++库在VS 2013中的使用 + 基于操作模式AES加密

    一 下载Crypto 43 43 Library Crypto 43 43 Library的官方网 xff1a http www cryptopp com 二 建立自己使用的Crypto 43 43 Library 由于从官方网下载的Cry
  • MATLAB工具箱路径缓存

    关于MATLAB工具箱路径缓存 出于性能考虑 xff0c MATLAB将跨会话缓存工具箱文件夹信息 缓存特性对您来说是透明的 但是 xff0c 如果MATLAB没有找到您的最新版本的MATLAB代码文件 xff0c 或者如果您收到有关工具箱
  • MySQL语法

    初识MySQL 为什么学习数据库 1 岗位技能需求 2 现在的世界 得数据者得天下 3 存储数据的方法 4 程序 网站中 大量数据如何长久保存 5 数据库是几乎软件体系中最核心的一个存在 什么是数据库 数据库 DataBase 简称DB 概
  • HBase Configuration过程

    HBase客户端API中 xff0c 我们看到对HBase的任何操作都需要首先创建HBaseConfiguration类的实例 为HBaseConfiguration类继承自Configuration类 xff0c 而Configurati