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

  • Google Cloud Bigtable 客户端连接池

    我通过制作一个虚拟 Web 应用程序来处理向 Bigtable 写入数据和从 Bigtable 读取数据的请求 对 Google Cloud Bigtable 进行了负载测试 一开始 我只使用单个 Bigtable 连接作为单例 并在所有线
  • HBase 写入:批处理和 put(List) 哪个性能更好?

    我开始学习HBase来编写数据流 我使用 HTableInterface 并遇到性能问题 仅插入 500 行就花费了很多时间 我插入的每批 List 几乎需要 500 000 毫秒 使用 HTableInterface 批量写入 HTabl
  • 在 Hbase shell 上运行多个查询,无需再次调用 hbase shell

    再次调用 shell 需要时间 我想通过调用 hbase shell 一次来执行多个命令 下面的代码仅运行单个查询 cmd echo put test row1 cf a value1 hbase shell 我想在单个 hbase she
  • 加密云中的 HBase 静态数据

    我对 HBase 还很陌生 并被分配了一项将我们的基础设施迁移到云的任务 我们的 HBase 数据包含一些客户信息 因此需要在静态时进行加密 我已经在读这个了 静态数据的透明加密 http hbase apache org book ch0
  • Apache Phoenix - 如何在 Kerberos 集群上启动查询服务器和瘦客户端

    我最近花了几天时间尝试通过zookeeper运行phoenix Thin queryserver py和sqlline thin py 和thick以保护集群 但是 我无法在安全集群上启动或连接phoenix服务 在phoenix瘦客户端和
  • 将数据从一个 hbase 表复制到另一个 hbase 表

    我创建了一个表 hivetest 它还在 hbase 中创建了名为 hbasetest 的表 现在我想将 hbasetest 数据复制到具有相同架构的另一个 hbase 表 例如 logdata 中 那么 任何人都可以帮助我如何在不使用配置
  • 调整使用底层 HBase 表的 Hive 查询

    我在 Hbase 中有一个表 比如说 tbl 我想使用它来查询它 蜂巢 因此我将一个表映射到 hive 如下所示 CREATE EXTERNAL TABLE tbl id string data map
  • hbase 作为 Web 应用程序中的数据库

    关于在真实的 Web 应用程序中使用 hadoop 或相关技术的一个大问题 我只是想了解 Web 应用程序如何使用 hbase 作为其数据库 我的意思是 这是大数据应用程序所做的事情 还是他们使用普通数据库并仅使用这些技术进行分析 拥有一个
  • HBase 基于列或基于行

    我想知道 HBase 使用的是基于列的存储还是基于行的存储 我阅读了一些技术文档并提到 HBase 的优点是使用基于列的存储将相似的数据存储在一起以促进压缩 所以这意味着不同行的相同列存储在一起 但我也了解到 HBase 是一个排序的键值映
  • HBase更新操作

    我是HBase新手 我发现HBase客户端API不支持更新操作 那是对的吗 如果是这样 更新特定行键的值的建议最佳实践是什么 您可以使用 PUT 来创建或更新任何单元格的值 你don t需要使用删除 除非您希望新版本不包含某些旧单元格 说我
  • Hbase 和 BigTable 有什么区别?

    谁能告诉我 Apache HBase 数据库和 Bigtable 之间有什么区别 或者它们是相同的吗 如果有的话 哪一个支持关系 如果他们是大搜索者 有什么区别 它们很相似 但又不一样 Bigtable 最初于 2005 年发布 但并未发布
  • HBASE SPARK 带过滤器的查询,无需加载所有 hbase

    我必须查询 HBASE 然后使用 Spark 和 scala 处理数据 我的问题是 通过我的解决方案 我获取 HBASE 表的所有数据 然后进行过滤 这不是一种有效的方法 因为它占用了太多内存 所以我想直接做过滤器 我该怎么做 def Hb
  • 如何通过部分行键过滤HBase的Scan?

    我有带有行键的 HBase 表 其中包含文本 ID 和时间戳 如下所示 string id1 1470913344067 string id1 1470913345067 string id2 1470913344067 string id
  • HBase:复制是如何工作的?

    我目前正在将 HBase 作为数据存储进行评估 但有一个问题没有得到解答 HBase 在许多节点上存储同一对象的许多副本 也称为复制 由于HBase具有所谓的强一致性 相比之下最终一致 它保证每个副本在读取时返回相同的值 据我了解 HBas
  • HBase 扫描时出现 java.lang.NoClassDefFoundError

    我正在尝试运行 MapReduce 作业来扫描 HBase 表 目前我使用的是Cloudera 4 4附带的HBase 0 94 6版本 在我的程序中的某个时刻 我使用 Scan 并使用以下命令正确导入它 import org apache
  • Hbase 架构嵌套实体

    有谁有关于如何创建带有嵌套实体的 Hbase 表的示例吗 Example UserName string SSN string Books collection 例如 书籍收藏看起来像这样 Books isbn title etc 我找不到
  • HBase:使用Java API创建表时指定版本

    我知道我们可以通过以下方式从 hbase shell 执行此操作 create t1 NAME gt f1 VERSIONS gt 5 我在中找不到任何相应的选项HTableDesctiptor在 Java API 中 知道如何做到这一点吗
  • Spark Streaming数据放入HBase的问题

    我是这个领域的初学者 所以我无法理解它 HBase 版本 0 98 24 hadoop2 火花版本 2 1 0 以下代码尝试将从 Spark Streming Kafka 生产者接收的数据放入 HBase 中 Kafka输入数据格式是这样的
  • HBase单调递增键的行键设计

    我有一个 HBase 表 我在其中编写行键 例如
  • 如果 HBase 不是运行在分布式环境中,它还有意义吗?

    我正在构建数据索引 这将需要以形式存储大量三元组 document term weight 我将存储多达几百万个这样的行 目前我正在 MySQL 中将其作为一个简单的表来执行 我将文档和术语标识符存储为字符串值 而不是其他表的外键 我正在重

随机推荐

  • 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