HBase Split 过程

2023-11-18


 
看了下hbase split的代码 记录一下学习心得 
Java代码   收藏代码
  1. private void split(final HRegion parent, final byte [] midKey)  
  2. throws IOException {  
  3.     final long startTime = System.currentTimeMillis();  
  4.     SplitTransaction st = new SplitTransaction(parent, midKey);  
  5.     // If prepare does not return true, for some reason -- logged inside in  
  6.     // the prepare call -- we are not ready to split just now.  Just return.  
  7.     if (!st.prepare()) return;  
  8.     try {  
  9.       st.execute(this.server, this.server);  


SplitTransation表示处理split是一个类似事务性质的行为,接下来我们会经常和它打交道 
初始化了一个path:tablename/parent/split/ 

st.prepare():构造了两个HRegionInfo:hri_a和hri_b,a是top,其startkey为parent的startkey,endkey是midkey;hri_b是bottom,startkey为midkey,endkey是parent的endkey。 

然后st.execute(this.server, this.server); 

1.创建splitdir:tablename/parent/split/,在状态机中加入CREATE_SPLIT_DIR 
Java代码   收藏代码
  1. createSplitDir(this.parent.getFilesystem(), this.splitdir);  
  2.     this.journal.add(JournalEntry.CREATE_SPLIT_DIR);  

2.close parentregion,并返回所有的storefile,状态机加入CLOSED_PARENT_REGION 
  close的过程会刷一次磁盘memstore的数据写入磁盘; 
Java代码   收藏代码
  1. List<StoreFile> hstoreFilesToSplit;  
  2. hstoreFilesToSplit = this.parent.close(false);  


3.从rs的onlineregion列表中移除parent region,状态机添OFFLINED_PARENT 
Java代码   收藏代码
  1. services.removeFromOnlineRegions(this.parent.getRegionInfo().getEncodedName());  
  2. this.journal.add(JournalEntry.OFFLINED_PARENT);  


4.splitStoreFiles(this.splitdir, hstoreFilesToSplit); 
   多线程处理所有的storefiles.创建文件/table/parent/split/hri_a 
  (hri_b)/family/storefilename. parent,在该文件中写入boolean top和midkey
Java代码   收藏代码
  1. splitStoreFiles(this.splitdir, hstoreFilesToSplit);  
  2. this.journal.add(JournalEntry.STARTED_REGION_A_CREATION);  

    5.状态机添STARTED_REGION_A_CREATION,创建子Region A。将上面的hri_a下的文件move到table/hri_a下即变为/hbase/hri_a/family/storefilename.parent 

6.同理状态机添STARTED_REGION_B_CREATION而后创建子Region B 
Java代码   收藏代码
  1. this.journal.add(JournalEntry.STARTED_REGION_A_CREATION);  
  2. HRegion a = createDaughterRegion(this.hri_a,this.parent.flushRequester, this.parent.rsServices);  
  3. this.journal.add(JournalEntry.STARTED_REGION_B_CREATION);  
  4. HRegion b = createDaughterRegion(this.hri_b, this.parent.flushRequester, this.parent.rsServices);  


7.meta表中下线parent;将parent在meta表中offline和split标志置为true,parent 
  Region添加两列SPLITA和SPLITB,值为HRegioninfo 
8.状态机添PONR 
Java代码   收藏代码
  1. try{  
  2.      if (!testing) {  
  3.        MetaEditor.offlineParentInMeta(server.getCatalogTracker(),  
  4.            this.parent.getRegionInfo(), a.getRegionInfo(), b.getRegionInfo());  
  5.      }  
  6.    } catch(IOException e){  
  7.      throw e;  
  8.    } finally{  
  9.      this.journal.add(JournalEntry.PONR);  
  10.    }  


9.开两个线程open REGION A和B。 
  
  1>调用openRegion函数进行initilize,主要步骤如下 

   a)向hdfs上写入.regionInfo文件以便meta挂掉以便恢复 
   b)初始化其下的HStore,主要是LoadStoreFiles函数: 
       对于该store函数会构造storefile对象,从hdfs上获取路径和文件,每个文件一个 
      storefile对象,对每个storefile对象会读取文件上的内容创建一个 
       HalfStoreFileReader读对象来操作该region的父region上的相应的文件,及该 
       region上目前存储的是引用文件,其指向的是其父region上的相应的文件,对该 
       region的所有读或写都将关联到父region上 
  2>将子Region添加到rs的online region列表上,并添加到meta表上 
Java代码   收藏代码
  1. DaughterOpener aOpener = new DaughterOpener(server, services, a);  
  2.    DaughterOpener bOpener = new DaughterOpener(server, services, b);  
  3.    aOpener.start();  
  4.    bOpener.start();  
  5.    try {  
  6.      aOpener.join();  
  7.      bOpener.join();  
  8.    } catch (InterruptedException e) {  
  9.      Thread.currentThread().interrupt();  
  10.      throw new IOException("Interrupted " + e.getMessage());  
  11.    }  


整个过程如上所述,如果碰到异常的话,会进行rollback检查状态机上的状态并依次进行rollback
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HBase Split 过程 的相关文章

  • Java中通过忽略开始行和结束行的一部分来扫描HBase行

    我的 HBase 行如下 ABC A1 20160101 ABC A2 20160102 ABC A3 20160103 XYZ A9 20160201 从我的Java代码中我知道第一部分ABC和最后一部分20160101 我没办法得到中间
  • HBase 基于列或基于行

    我想知道 HBase 使用的是基于列的存储还是基于行的存储 我阅读了一些技术文档并提到 HBase 的优点是使用基于列的存储将相似的数据存储在一起以促进压缩 所以这意味着不同行的相同列存储在一起 但我也了解到 HBase 是一个排序的键值映
  • 如何像 Hive 表分区一样在 Hbase 表中创建分区

    我们计划从 CDH3 迁移到 CDH4 作为迁移的一部分 我们还计划将 HBASE 引入我们的系统 因为它也会更新数据 在 CDH3 中我们使用 Hive 作为仓库 这里我们遇到了迁移的主要问题 Hive 支持表分区 我们的系统有许多不同模
  • Spark 使用数据局部性吗?

    我正在尝试了解 Apache Spark 的内部结构 我想知道 Spark 是否使用某些机制来确保从 InputFormat 读取或写入 OutputFormat 或 Spark 本机支持的其他格式而不是从 MapReduce 派生的格式
  • 将 Jar 文件添加到 WEB-INF/lib [重复]

    这个问题在这里已经有答案了 我是 Eclipse Java 和 Linux 的新手 我搜索这个问题 但没有找到答案 我想编写一个操作 HBase 表的程序 所以我有一些与 HBase 相关的 Jar 文件 在普通的 Java 应用程序中 我
  • 将 Spark 数据帧插入 hbase

    我有一个数据框 我想将其插入到 hbase 中 我遵循这个文档 https hbase apache org book html sparksql dataframes 这就是我的数据框的样子 id name address 23 marr
  • 如何在 Hbase 中连接两个表

    Problem 我是 Hbase 新手 遇到了需要连接两个表的情况 假设我有 Employee 表和 Department 表都是在 Hbase 中创建的 通过阅读 Hbase 的实际操作 我了解到我们无法连接 Hbase 中的表 解决方案
  • 高效查询Hbase

    我使用 Java 作为查询 Hbase 的客户端 我的 Hbase 表设置如下 ROWKEY HOST EVENT 21 1465435 host hst com clicked 22 1463456 hlo wrld com dragge
  • 重新部署后 HBase 协处理器未更新

    我正在使用 HBase 1 1 2 并尝试重新部署自定义端点协处理器来修复 Java 代码中的错误 我对协处理器代码进行了一些更改 并通过以下步骤重新部署它 重建协处理器 jar 将其复制到 HDFS 上的某个位置 删除现有的协处理器 al
  • Spark:如何通过 python-api 使用 HBase 过滤器,例如 QualiferFilter

    我想通过使用像 python api 中的 QualiferFilter 这样的过滤器从 HBase 获取行 我知道如何从 HBase 获取行 就像在代码下一样 host localhost keyConv org apache spark
  • 使用 Spark 和 Phoenix 将 CSV 文件保存到 hbase 表

    有人可以向我指出使用 Spark 将 csv 文件保存到 Hbase 表的工作示例吗2 2我尝试过但失败的选项 注意 它们都适用于我的 Spark 1 6 凤凰火花 hbase spark it nerdammer bigdata spar
  • HBase如何实现对HDFS的随机访问?

    鉴于HBase是一个数据库 其文件存储在HDFS中 那么它如何实现对HDFS中单个数据的随机访问呢 这是通过什么方法实现的呢 From Apache HBase 参考指南 http hbase apache org book archite
  • hbase api - 通过行ID列表获取数据行信息

    是否可以通过hbase java API通过行id列表获取hbase数据记录 例如 我有一个已知的 hbase 行 ID 列表 mykey1 myhash1 mykey1 myhash2 mykey1 myhash3 mykey2 myha
  • 从 Storm Bolt 将行插入 HBase

    我希望能够从分布式 非本地 Storm 拓扑将新条目写入 HBase 有一些 GitHub 项目提供以下任一功能 HBase 映射器 https github com ptgoetz storm hbase or 预制风暴螺栓 https
  • 计算 HBase 表中列族的记录数

    我正在寻找一个 HBase shell 命令来计算指定列族中的记录数 我知道我可以运行 echo scan table name hbase shell grep column family name wc l 然而 这将比标准计数命令运行
  • 2n + 1 法定人数是什么意思?

    我在描述 HBase 的 Zookeeper 配置时遇到过这个问题 但我对这个术语并不熟悉 N 与我的 HBase 集群中的节点数量有关系吗 或者我应该在 Zookeeper 集群中使用的节点数量 2f 1是指你所需要的可靠性 可用性水平
  • 将 Hbase 与 PHP 集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经安装了 Hbase 现在我正在寻找一些 PHP 库来将 hbase 与 PHP 集成 我尝试了 2 个库 第一个是我尝试与 th
  • HBase:返回不存在字段的记录

    我在 HBase 中有一个人员表 如下所示 ROW KEY COLUMN CELL dinesh column details code value dr 01 dinesh column status is error value fal
  • 连接到在 Docker 中运行的 HBase

    我无法连接到 Windows 上 Docker 中运行的 HBase banno hbase 独立 https registry hub docker com u banno hbase standalone 图像 但是 我可以连接到本地安
  • Hadoop - 直接从 Mapper 写入 HBase

    我有一个 hadoop 作业 其输出应写入 HBase 我并不真正需要减速器 我想要插入的行类型是在映射器中确定的 如何使用 TableOutputFormat 来实现此目的 从所有示例中 我看到的假设是 reducer 是创建 Put 的

随机推荐

  • maven 打包带版本号_maven实现打包带源代码的jar包

    实现方法一 pom文件添加以下及节点 src main java 说明 默认的资源文件夹是src main resource 此方法修改了资源文件夹 让你默认的资源文件夹变成了src main java文件夹 而这个文件夹在maven中是默
  • 【热门框架】Maven怎样进行配置文件管理?有什么好处?

    Maven可以通过使用resources元素和filters来进行配置文件管理 这样可以方便地管理项目中的配置文件 避免重复和冗余 提高可维护性和可扩展性 在Maven的pom xml文件中 可以使用resources元素来指定项目中的资源
  • TP5返回参数,封装方法jsonReturn

    调用jsonReturn 生成调账单 状态获取 public function getStatusCreateDebugBill endStatus Paas request sim finance statement getStatusB
  • wordpress搭建网站

    域名 主机申请 宝塔面板使用流程 看以下这两个就够了 https blog csdn net weixin 45106434 article details 108894407 https blog csdn net qq 44721831
  • SimpleFOC无刷电机平衡小车

    前言 本科毕业于自动化 期间学习了各种电机运动控制原理 自动控制原理 但是只会考试而未究其理 最近接触到simplefoc这个基于arduino的开源无刷电机驱动库 想正好借此机会将本科学到的内容用于实际 于是就有了这个小项目 基于无刷电机
  • Ubuntu——统计目录下文件数量的方法

    统计当前目录下文件的个数 不包括目录 ls l grep wc l 参考文章 Linux 统计目录下文件数量的方法
  • scrapy保存、中断、继续执行爬虫程序

    在scrapy文件中的custom settings写入JOBDIR即可 比如 JOBDIR jobs baidu news baidu news这个位置就是当程序停止爬虫的时候当前的运行状态就会记录在这个文件中 当再次爬取时会接着保存的状
  • 已知a.txt文件中的内容为"AAbcdea22dferwplkCC321ou1", 请编写程序读取该文件内容,要求去掉重复字母(区分大小写), 并按照自然排序顺序后输出到b.txt文件中。

    package copy1 import java io BufferedReader import java io BufferedWriter import java io FileInputStream import java io
  • 2020美赛F奖论文(四):模拟退火算法驱动的结构策略设计

    上接 2020美赛F奖论文 三 足球团队指标和基于机器学习的球队表现预测 全文 2020美赛F奖论文 一 摘要 绪论和模型准备 2020美赛F奖论文 二 传球网络模型 PNM 的建立和影响因子分析 2020美赛F奖论文 三 足球团队指标和基
  • 计算机网络(1)——概念、组成、功能和分类

    文章目录 0 总揽全局 1 计算机网络的概念 2 计算机网络的功能 3 计算机网络的组成 4 计算机网络的分类 视频来源 https www bilibili com video BV19E411D78Q p 1 0 总揽全局 1 计算机网
  • 强烈推荐Linux深入学习必读的几本书

    2012 10 01 21 00 40 成为一名精通 Linux程序设计的高级程序员一直是不少朋友孜孜以求的目标 根据中华英才网统计数据 北京地区 Linux 程序员月薪平均为 Windows程序员的 1 8 倍 Java 程序员的 2 6
  • sql语句中关于1 and 1=2详解

    在通关sqli labs的时候 我经常会遇到这么一个问题 那就是 id 1 和 id 1 and 1 2 的查询结果是一致的 我一直以来都很疑惑 然后寻求了很多文章 终于解决了我的问题 我们将其放在sqlyog里面去讲解 我先给你们展示一下
  • Shell监控jvm发短信

    Shell脚本 jstat crontab curl 监控JVM发送短信 bin bash 定时监控本机器下所有java应用的 JVM信息 定时任务配置 crontab e 写入如下 5分钟执行一次检测 5 home admin monit
  • 【H5】 svg动画 旋转属性与虚线属性

    svg 动画 旋转 transform rotate angle x y 不要写在style里面 angle 旋转角度 x y旋转中心 绘制虚线 stroke dasharray a b a b c d 旋转属性 transform rot
  • 立陶宛央行抢跑数字货币背后:前瞻的区块链战略 中国已有企业布局

    7月2日 据路透社报道 立陶宛将在下周开始预售2 4万枚由央行发行的数字货币 该名为LBCoin的数字货币基于区块链技术生产 立陶宛成为是欧盟国家中第一家正式发行央行数字货币的地区 不是2015年就开始研究央行数字货币的英国 不是今年2月试
  • 人工智能芯片未来发展前景如何?

    随着深度学习技术的快速发展 以及互联网和云计算时代海量数据和高效计算能力的支撑 计算机视觉技术 语音技术 自然语言理解技术等人工智能技术取得了突破性进展 并解锁多个行业的人工智能场景 产生了巨大的商业价值 驱动了人工智能行业的发展 同时 伴
  • TEA系列加解密算法详解

    文章目录 TEA系列概述 TEA算法介绍 TEA加密过程 C语言实现 XTEA算法介绍 XTEA加密过程 C语言实现 XTEA算法介绍 XXTEA加密过程 C语言实现 参考 TEA系列概述 TEA算法是由剑桥大学计算机实验室的David W
  • python 序列化_python怎么序列化

    pickle模块 json模块 1 把变量从内存中变成可存储或传输的过程 称之为序列化 Python中叫pickling 其他语言中也被称为serialization marshalling flattening等 都是相同的意思 2 序列
  • XSS安全漏洞的防范

    XSS安全漏洞 通过URL带入的 这种带入主要是前端解析url中的参数 并对数参数执行了innerHTML 或者 html 或者 append 操作 在将参数html 或者append 到html文件中时 会执行其中的js代码 被错误用户获
  • HBase Split 过程

    看了下hbase split的代码 记录一下学习心得 Java代码 private void split final HRegion parent final byte midKey throws IOException final lon