HBASE入库方式比较

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: HBASE数据入库主要目的是保证数据快速,准确,完整的进入HBASE,并在数据入库时减少对大数据集群的影响。

一.概述

本文主要从HBASE入库的不同方式进行阐述,对HBASE的参数调整本文不进行过多阐述。HBASE数据入库主要目的是保证数据快速,准确,完整的进入HBASE,并在数据入库时尽量少占用大数据集群资源,减少对大数据集群的影响。

二.入库方式

HBASE数据入库主要分成以下三种方式:
1.MR预生成HFILE

采用MR的方式进行HFILE进行生成,生成HFILE文件后采用LOAD方式进行数据入库

2.MR过程中PUT

采用MR中Map阶段进行PUT数据入库

3.HBASE原生口的PUT方式

用JAVA调用HBASE的PUT接口进行数据入库

1和2都存在MR的过程,会使用集群YARN的资源,而且如果没有进行HBASE的参数调整和预分区操作,会引起HBASE的region的split;3方式采用多客户端,多线程方式进行数据入库,本身用的就是HBASE的原生方式,排序合并操作都压给了HBASE,受制于网络和内存。
从上面的原理描述,3方式看上去是入库最合适的方式,但是对于服务端的压力却是最大的。
为了完成本文所说的尽量少占用大数据集群资源目的,对于预生成HFILE方式需进行优化,不采用MR方式进行生成。

三.实现

1.非MR方式预生成HFILE方式优化
1)将数据生成KeyValue放入list,并将其进行排序
Snipaste_2020-02-29_14-57-35.png
2)使用StoreFile.Writer将数据写入到HDFS的HFILE中
Snipaste_2020-02-29_15-11-18.png
3)将生成的HFILE文件用doBulkLoad导入到HBASE
Snipaste_2020-02-29_15-14-43.png

2.使用HBASE的原生接口PUT
Snipaste_2020-02-29_15-19-51.png

四.测试

测试方案主要进行HFILE入库,PUT入库,多列,全列按不同数据量进行测试
名词解释:
file:hfile方式入库
put:put方式入库
column:多列,每列独立
columnall:全列,列合并打包
10W:代表数据量
如file_column_10w代表用hfile方式入库10W数据量的多列

注:下述时间都是秒

入库方式/提交记录数 KV满一万 1万条记录 2万条记录 4万条记录 8万条记录
file_column_10w 158 122 114 110 106
file_columnall_10w 116 77 78 77 69
put_column_10w 125 188 196 202 181
put_columnall_10w 78 53 62 60 68
file_column_100w 1823 1161 1138 1005 1003
file_columnall_100w 1230 597 565 539 510
put_column_100w 1501 1534 1804 2100 1913
put_columnall_100w 844 472 462 465 477
file_column_1000w 10301
file_columnall_1000w 4806
put_column_1000w 21311
put_columnall_1000w 5050

五.总结

  1. hfile文件方式入库会随着提交数据记录数的增加而效率提升
  2. put方式入库提交数据记录数增加不能很明显提升效率,有时候反而会变慢,原因应该是memstore需要清除历史KeyValue的缘故,并受到缓存大小限制,而hfile方式会直接绕过memstore,不受memstore限制。
  3. 当数据记录数大的时候,hfile的方式优于put方式
  4. hfile方式在数据量小的时候,增加提交记录数效率不明显
  5. hfile方式可以自由控制导入hfile的大小,优势就是减少hfile的compact,劣势就是需要增加按region来生成hfile防止bulkload时再分裂
  6. hfile方式适合大数据量数据导入,put方式小量数据导入,put会比hfile时效性高
  7. 全列的入库方式比多列的入库方式效率要高很多,而且HFILE文件也会小很多,相应的存储会减少,原因是减少了rowkey的存储
相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
162 0
|
SQL 分布式计算 Hadoop
Hadoop集群hbase的安装
Hadoop集群hbase的安装
211 0
|
3月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
111 4
|
2月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
76 4
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
34 3
|
2月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
59 3
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
88 2
|
2月前
|
存储 分布式计算 Hadoop
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
56 2
|
6月前
|
存储 分布式计算 Hadoop
Hadoop节点文件存储HBase设计目的
【6月更文挑战第2天】
65 6
|
6月前
|
存储 分布式计算 Hadoop
Hadoop节点文件存储Hbase高可靠性
【6月更文挑战第2天】
101 2