使用spark分析云HBase的数据

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:   云HBase具有很好的在线入库和查询能力,不过在分析上面有比较大的欠缺,这篇文章主要介绍如何使用Spark对云HBase中数据做复杂分析。

  云HBase具有很好的在线入库和查询能力,不过在分析上面有比较大的欠缺,这篇文章主要介绍如何使用Spark对云HBase中数据做复杂分析。

1 云HBase查询分析的现状

  • HBase原生API:HBase原生API适合基于row key做点查,这个是HBase最擅长的查询场景
  • Phoenix:Phoenix作为HBase的SQL层,使用二级索引的技术,擅长多条件组合查询;Phoenix没有自己的计算资源,类似groupby这样的复杂查询需要借助HBase的协处理器来完成,这样一方面性能不好,同时会影响HBase集群的稳定性;
  • Spark:具有丰富的算子支持复杂分析,使用Spark集群的计算资源,通过并发分析的方式可以提高性能,同时不影响HBase集群的稳定性。

2 Spark分析HBase的方式对比

  Spark分析HBase数据有“RDD API”、“SQL API”、“HFILE”三种方式,相关对比如下:

方式 特点 优点 缺点
RDD API 1、使用hadoop 社区的TableInputFormat、TableRecordReader工具类,来做split、数据scan;
2、具体API为 newAPIHadoopRDD();
1、spark、HIVE都集成了TableInputFormat、 TableRecordReader工具类 1、这种方式需要把表的所有数据全部scan到spark计算引擎做过滤、复杂计算等;
2、不支持HBase scan API中blockcache的开关以及cachesize的配置,在高并发scan大表时会影响HBase集群的稳定性
SQL API 1、通过spark的sql 优化器,支持谓词下推、列裁剪、分区裁剪等优化,尽可能的把优化下推到存储端,从而提高性能;
2、 具有sql的schema到HBase column的映射,不用写复杂的类型转换;
3、支持HBase scan API中blockcache的开关以及cachesize的配置,用户可以根据场景调整,从而保证云Hbase的稳定性
1、充分列用HBase的存储特性,将优化下推到数据源端提高性能 1、使用scan API在分析大表时会增加HBase集群的load以及memory使用
HFILE 1、spark直接分析表的HFILE,直读HDFS,完全不用使用HBase集群资源;
2、spark直接分析表的HFILE与Scan的方式对比,可以减少一次对HFile中数据的序列化和反序列化,提高性能;
1、可以有效解决在高并发scan时导致HBase集群load高以及内存消耗;
2、直读HFILE有较好的性能表现
1、spark分析HFILE需要结合HBase的snapshot表的方式来保证分析数据的一致性

  对于数据动态更新增加的小表推荐使用SQL API的方式,可以有效的优化分析,减少对HBase集群稳定性的影响;对于静态表或者全量静态表的分析推荐使用分析HFILE的方式直读HDFS,这样可以完全不影响HBase集群稳定性;不推荐使用RDD API 的方式,这种方式一方没有优化性能差,同时在高并发以及表数据量大时,会严重影响HBase集群的稳定性,从而影响在线业务。

3 三种方式的具体使用

  云HBase团队为大家提供了一个github项目供大家参考使用上面的三种方式来开发Spark分析HBase的程序,项目地址

  • 依赖项:需要下载云HBase及云Phoenix的client包
  • 分析HFILE:

    • 需要先开通云HBase的HDFS访问权限,参考文档
    • 在hbase shell中对表生成snapshot表“snapshot 'sourceTable', ‘snapshotName'”
    • 在项目中配置自己的hdfs-sit.xml文件,然后通过直读HDFS的方式分析snapshot表
  • 具体的example

    • RDD API对应:org.apache.spark.hbase.NativeRDDAnalyze
    • SQL API对应:org.apache.spark.sql.execution.datasources.hbase.SqlAnalyze
    • 分析HFILE对应:org.apache.spark.hfile.SparkAnalyzeHFILE

注:有任何问题,欢迎交流

相关实践学习
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
目录
相关文章
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
51 3
|
26天前
|
缓存 监控 Shell
如何使用 HBase Shell 进行数据的实时监控和备份?
如何使用 HBase Shell 进行数据的实时监控和备份?
|
26天前
|
Shell 分布式数据库 Hbase
如何使用 HBase Shell 进行数据的批量导入和导出?
如何使用 HBase Shell 进行数据的批量导入和导出?
|
2月前
|
SQL 分布式计算 Serverless
EMR Serverless Spark:一站式全托管湖仓分析利器
本文根据2024云栖大会阿里云 EMR 团队负责人李钰(绝顶) 演讲实录整理而成
153 2
|
2月前
|
设计模式 数据采集 分布式计算
企业spark案例 —出租车轨迹分析
企业spark案例 —出租车轨迹分析
86 0
|
4月前
|
分布式计算 大数据 分布式数据库
"揭秘HBase MapReduce高效数据处理秘诀:四步实战攻略,让你轻松玩转大数据分析!"
【8月更文挑战第17天】大数据时代,HBase以高性能、可扩展性成为关键的数据存储解决方案。结合MapReduce分布式计算框架,能高效处理HBase中的大规模数据。本文通过实例展示如何配置HBase集群、编写Map和Reduce函数,以及运行MapReduce作业来计算HBase某列的平均值。此过程不仅限于简单的统计分析,还可扩展至更复杂的数据处理任务,为企业提供强有力的大数据技术支持。
71 1
|
4月前
|
存储 分布式计算 Java
|
4月前
|
分布式计算 监控 大数据
如何处理 Spark 中的倾斜数据?
【8月更文挑战第13天】
259 4
|
4月前
|
存储 缓存 分布式计算
|
4月前
|
分布式计算 Apache 数据安全/隐私保护
流计算引擎数据问题之在 Spark Structured Streaming 中水印计算和使用如何解决
流计算引擎数据问题之在 Spark Structured Streaming 中水印计算和使用如何解决
56 1