为行键放置不同值但在 hbase 中放置相同时间戳的解决方案?

2023-11-29

我是 Hbase 的新人。将文本文件中的数据批量加载到 Hbase 时遇到问题。假设我有下表:

Key_id | f1:c1 | f2:c2
row1     'a'     'b'
row1     'x'     'y'
  1. 当我解析2条记录并将其同时放入Hbase(相同的时间戳)时,则只有版本{row1 'x' 'y'}更新。解释如下:

当你将数据放入HBase时,需要一个时间戳。时间戳可以由 RegionServer 自动生成,也可以由您提供。给定单元的每个版本的时间戳必须是唯一的,因为时间戳标识版本。例如,要修改单元格的先前版本,您可以发出具有不同数据本身值但具有相同时间戳的 Put。

我正在考虑指定时间戳的想法,但我不知道如何自动设置批量加载的时间戳,它会影响加载性能吗?我需要最快且安全的大数据导入流程。

  1. 我尝试解析每条记录并将其放入表中,但是速度非常非常慢...所以另一个问题是:在放入hbase之前应该批量处理多少条记录/数据大小。 (我写了一个简单的java程序来放置。它比我使用Importrtsv工具通过命令导入要慢得多。我不知道这个工具的批量有多少大小..)

非常感谢您的建议!


Q1:Hbase 使用时间戳来维护版本。如果您不提供,则采用 hbase 系统默认提供的值。

如果您有这样的要求,您也可以在放置请求中更新自定义时间。它不会影响性能。

Q2:您可以通过两种方式做到这一点。

  • 具有批处理技术的简单 Java 客户端如下所示。

  • Mapreduce importtsv(批量客户端)

例如:#1 使用批处理技术的简单 Java 客户端。

我使用 hbase 批量列出 100000 条记录的对象来解析 json(类似于您的独立 csv 客户端)

下面是我实现这一目标的代码片段。解析其他格式时也可以做同样的事情)

可能你需要在两个地方调用这个方法

1)批量为100000条记录。

2) 对于您的批次记录少于100000条的处理提醒

  public void addRecord(final ArrayList<Put> puts, final String tableName) throws Exception {
        try {
            final HTable table = new HTable(HBaseConnection.getHBaseConfiguration(), getTable(tableName));
            table.put(puts);
            LOG.info("INSERT record[s] " + puts.size() + " to table " + tableName + " OK.");
        } catch (final Throwable e) {
            e.printStackTrace();
        } finally {
            LOG.info("Processed ---> " + puts.size());
            if (puts != null) {
                puts.clear();
            }
        }
    }

注意:批量大小在内部由以下因素控制hbase.client.write.buffer就像下面在您的配置 xml 之一中一样

<property>
         <name>hbase.client.write.buffer</name>
         <value>20971520</value> // around 2 mb i guess
 </property>

其默认值为 2mb 大小。一旦缓冲区被填满,它将刷新所有实际插入到表中的内容。

此外,mapreduce 客户端或具有批处理功能的独立客户端 技术。批处理由上述缓冲区属性控制

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

为行键放置不同值但在 hbase 中放置相同时间戳的解决方案? 的相关文章

随机推荐

  • 如何在软件中模拟浮点运算? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 当CPU没有 或有问题 浮点单元时 软件如何执行浮点运算 例如 PIC AVR 和 8051 微控制器架构 效仿 在 PIC AVR 和 8051 上下文中 浮点 是错误的术语
  • 确保字符串文字联合属于对象的键

    export type A a b c const obj a 4 b 5 c 6 d 7 我如何确保所有元素A是对象的键obj 根据您的需要 您可以自动构造您的类型 所有键作为一个类型 您可以使用keyof将所有密钥作为一个联合体 自从k
  • 如何根据 Javascript 中的多个键对对象数组进行分组?

    我的数组如下 WarehouseId 1 ShippingCarrierId 1 PostalCodeType ShipToCustomer TimeStart 1970 01 01T06 00 00 000Z TimeEnd 1970 0
  • 使用 jQuery AJAX 发送带有二进制数据的 FormData

    我想发送一个FormData通过使用 jQuery AJAX 例如 var uploadFormData new FormData uploadFormData append name value ajax url URL target t
  • 当我返回时,控制到达非空函数的末尾[重复]

    这个问题在这里已经有答案了 我有一个函数 它递归地调用自身 直到连接到服务器 然后函数返回0 为什么我有这样的错误行为 控制到达非空函数的末尾 指向函数结束的行 我做错了什么 我有 if else 语句 仅在 else 中返回 但即使在 i
  • 为什么 Rust 允许在一个作用域中两次声明相同的变量名? [复制]

    这个问题在这里已经有答案了 我第一次遇到允许在同一范围内声明变量名称两次的类型化语言 难道不会有机会错误地覆盖现有变量吗 它带来什么优势 有书中有一章介绍了这一点 隐藏与将变量标记为 mut 不同 因为如果我们不小心尝试在不使用 let 关
  • 从公共方法调用私有方法?

    我定义了一个这样的类 function Class1 this Func1 function Methods and vars function Func2 Methods and vars 我想找到一种从私有方法 Func2 调用公共方法
  • 在 vbscript 中使用 HTA

    在使用 VBscript 的 HTA 用户窗体时 我发现 HTA 不支持 WScript 及其对象 方法 是否有其他创建用户表单的方法 或者有什么方法可以使 HTA 支持 WScript 替代方案WScript Echo就是简单地将内容添加
  • 如何在 Openmodelica 中指定介质?

    我正在 Modelica 中模拟热泵热水系统 我附上了我的模特的照片 但是 当我运行模型时 出现错误 Medium 是部分的 部分类中不允许进行名称查找 您能告诉我吗 我该如何指定水箱 热泵冷凝器和管道中的水 我应该如何指定热泵蒸发器中的空
  • 使用包含通配符条件的数组时出现问题

    我一直在尝试运行 powershell 代码将文件分成 2 个 我有几个常规数组 效果很好 第三个数组包含每个条件的通配符 但这根本不起作用 我尝试过 in notin like notlike contains notcontains m
  • 如何最大程度地划分集合?

    我正在尝试解决欧拉计划问题之一 因此 我需要一种算法来帮助我以任意顺序找到集合中所有可能的分区 例如 给定集合2 3 3 5 2 3 3 5 2 3 3 5 2 3 3 5 2 3 3 5 2 5 3 3 等等 几乎该组成员的所有可能组合
  • MPMoviePlayer 控制风格

    我想使用以下代码隐藏 MPMoviePlayer 中的控件 IBAction video id sender NSBundle bundle NSBundle mainBundle NSString moviePath bundle pat
  • 如何在宏中获取当前命名空间的字符串

    我需要在宏中添加名称空间前缀 IE define MYMACRO x x namespace A namespace B MYMACRO C 并且 MYMACRO 必须返回 A B C 无法工作 命名空间由编译器识别 编译器仅在预处理器之后
  • 设置图像属性时,UIImageView 图像不会明显更新

    我有一个 UIImageView 其用户交互是真实的 并且我为其提供了点击手势识别器 其操作处理程序如下 IBAction func tap sender UITapGestureRecognizer let iv sender view
  • 如何使用 browsermob-proxy 修复“地址已在使用中”错误?

    我还在尝试使用browsermob proxy here 尝试在 python selenium 测试期间监控网络流量 请参阅browsermob代理 我正在使用以下脚本来测试它 from browsermobproxy import Se
  • 如何解码众多 Decodable Swift 中的单个异常属性?

    我有一个符合 Decodable 的结构 它有 50 个 String 属性 只有 1 个 Bool 属性 该布尔值来自服务器 如字符串 false true 或有时如整数 0 1 因此无法从框中解码 我怎样才能让它解码而不是对所有 50
  • 每行最后一个非 NA 行的列名称;使用 tidyverse 解决方案?

    数据集简要描述 我有从 Qualtrics 生成的调查数据 我已将其作为 tibble 导入到 R 中 每列对应一个调查问题 并且我保留了原始列顺序 以与调查中问题的顺序相对应 用通俗易懂的语言描述问题 由于参与者的正常流失 并非所有参与者
  • 无法启动/private/var/containers/Bundle/Application/

    我一直在尝试在 iOS 12 设备上测试应用程序 但每次构建它时 它都会在设备 我的 iPhone 或 iPad 上成功构建 但会崩溃 并且我收到以下消息 无法启动 private var containers Bundle Applica
  • useEffect 模拟 componentWillUnmount 不返回更新状态

    我有一个使用 useState 初始化状态的功能组件 然后通过输入字段更改该状态 然后 我有一个模拟 componentWillUnmount 的 useEffect 挂钩 以便在组件卸载之前 将当前更新的状态记录到控制台 但是 会记录初始
  • 为行键放置不同值但在 hbase 中放置相同时间戳的解决方案?

    我是 Hbase 的新人 将文本文件中的数据批量加载到 Hbase 时遇到问题 假设我有下表 Key id f1 c1 f2 c2 row1 a b row1 x y 当我解析2条记录并将其同时放入Hbase 相同的时间戳 时 则只有版本