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过程 的相关文章

  • 自定义行为的配置错误

    我创建了一个与 WCF 服务一起使用的自定义行为 以将所有错误记录到应用程序日志中 我做了一个BehaviorExtensionElement对于行为 public ErrorLoggingBehaviorExtensionElement
  • 在 Laravel 中动态设置数据库连接和语言

    我有 3 个域指向同一个Laravel应用 我想要的是每个人都连接到自己的数据库并根据 TLD 加载自己的语言文件 我可以在哪个文件中设置这些设置 我可以直接在配置文件中执行此操作 或者可以在加载配置之前执行某些事件 我拥有的是一个简短的函
  • 如何使用 Fluent NHibernate 自动映射来映射字典?

    我有一个像这样的实体 public class Land public virtual IDictionary
  • ASP.Net 5 RC2 配置节绑定

    我刚刚将示例应用程序从 RC1 升级到 RC2 但我找不到如何将 appSettings json 文件的特定部分绑定到我自己的 POCO 样本位于https github com aspnet live asp net blob rc2
  • MEF零件配置,存放在哪里?

    In ASP NET NET 4 0 MEF 我将所有部件放在一个文件夹中并使用导入它们DirectoryCatalog 一切安好 部分部件有相关配置 我不想把它们放进去web config 也许一个好的方法是config文件就在带有 co
  • 如何在 vim 中覆盖 ~/.vim 和 ~/.vimrc 路径(但不能覆盖其他路径)?

    假设我有一个所有 vim 配置的 tarball 通常在 vim 中的所有内容 插件 自动加载 颜色 所有这些东西 和一个 vimrc 文件 我将其提取到某个目录中 所以在我所在的目录 PWD 中 有一个 vim 文件夹和一个 vimrc
  • HBase、Hadoop:如何估计 HBase 表或 Hadoop 文件系统路径的大小?

    我有多个 HBase 表 如何估计在 java 中使用的表的大致大小 一种方法是你必须使用java客户端访问hdfs 通常在 hbase文件夹 所有表格信息 将在场 Hadoop 外壳 你可以检查使用hadoop fs du h path
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • Docker、maven 和 settings.xml

    给出以下简单的 Dockerfile FROM maven 3 6 3 ibmjava 8 alpine Copy maven settings COPY settings xml usr share maven ref COPY pom
  • “config”脚本存在于系统或 Homebrew 目录之外

    运行 brew doctor 并出现一些错误 我按照此链接中的建议设法解决了路径问题 如何修改 Homebrew 的 PATH https stackoverflow com questions 10343834 homebrew want
  • 具有自定义配置部分的配置文件中无法识别的元素“Item”

    我有一个基于某些类的自定义配置 我的问题是我收到一条错误消息 指出配置元素无法识别 班级如下 ConfigurationCollection typeof SectionItem AddItemName Item CollectionTyp
  • 在 Erlang 中实现图灵机

    我有一个小项目 与实现图灵机非常相似 我遇到的基本问题是保存当前配置 例如头部的位置和更多信息 对我来说特别重要的是保留头部位置以使其向前或向后移动 Erlang 解决这个问题的方法是什么 我是 Erlang 新手 但据我探索 OTP ge
  • 如何根据服务器/环境动态加载服务器配置?

    目前 我设置了 Maven 配置文件 以便能够为不同的环境 开发 演示 暂存 生产等 部署我的项目 并且它工作得很好 但问题是 对于我拥有的每个模块 Web 应用程序 我需要复制 粘贴此配置文件 它们都是属性文件 当我需要更改环境 服务器配
  • MySQL max_allowed_pa​​cket 参数有什么问题?

    我需要增加 max allowed pa cket 参数 以适应一些理论上非常大的项目 如果我将此参数设置为 10M 那么与设置为 1M 或 4M 相比 我要支付什么价格 如果有的话 感谢您的任何意见 托马斯 我找到了这个解释 http w
  • Visual Studio 2015:SQL 数据源:无法检索架构。确保 ConnectionString 和 SelectCommand 属性有效

    我有以下ASP Net网页的开发环境 VS 2015专业版 使用 Net Framework 4 0 MySQL服务器5 6 MySQL Net 连接器 6 9 5 MySQL for Visual Studio 2 0 2 我能够从 Vi
  • 项目中包含 jar 的文件夹

    当我从事小型桌面项目时 我曾经创建过lib我的项目根目录中的文件夹保存了所有项目的 jar 依赖项 然后我用配置构建路径 gt 图书馆 gt 添加 JAR 手动将此文件夹中的所有 jar 添加到 buildpath classpath 并且
  • 如何查看MongoDB当前配置

    我找到了不同的文档配置选项 http docs mongodb org manual administration configuration 但是如何检查实时系统上正在使用哪些选项 有没有办法查看设置了哪些选项 或者至少正在使用哪个配置文
  • 连接到在 Docker 中运行的 HBase

    我无法连接到 Windows 上 Docker 中运行的 HBase banno hbase 独立 https registry hub docker com u banno hbase standalone 图像 但是 我可以连接到本地安
  • 如何使用hbase协处理器实现groupby?

    最近学习了hbase协处理器 我使用endpoint来累加hbase表的一列 例如 名为 pendings 的hbase表 它的家族是 asset 我累加了 asset amount 的所有值 该表还有其他列 例如 asset custom
  • 如何在 Struts 2 应用程序中读取文本文件 [重复]

    这个问题在这里已经有答案了 开发 Struts 2 应用程序时遇到以下问题 我需要读取使用我的应用程序部署在 Web 服务器中的文本文件 我怎样才能知道它的相对路径来访问它 换句话说 如果我知道部署目录内的相对路径 如何找到绝对路径 当我在

随机推荐

  • 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