单表千亿电信大数据场景,使用Spark+CarbonData替换Impala案例

简介: 使用Spark+CarbonData替换Impala案例

背景介绍

国内某移动局点使用Impala组件处理电信业务详单,每天处理约100TB左右详单,详单表记录每天大于百亿级别,在使用impala过程中存在以下问题:

1、详单采用Parquet格式存储,数据表使用时间+MSISDN号码做分区,使用Impala查询,利用不上分区的查询场景,则查询性能比较差。

2、在使用Impala过程中,遇到很多性能问题(比如catalog元数据膨胀导致元数据同步慢等),并发查询性能差等。

3、Impala属于MPP架构,只能做到百节点级,一般并发查询个数达到20左右时,整个系统的吞吐已经达到满负荷状态,在扩容节点也提升不了吞吐量。

4、资源不能通过YARN统一资源管理调度,所以Hadoop集群无法实现Impala、Spark、Hive等组件的动态资源共享。给第三方开放详单查询能力也无法做到资源隔离。

解决方案

针对上面的一系列问题,移动局点客户要求我们给出相应的解决方案,我们大数据团队针对上面的问题进行分析,并且做技术选型,在这个过程中,我们以这个移动局点的几个典型业务场景作为输入,分别对Spark+CarbonData、Impala2.6、HAWQ、Greenplum、SybaseIQ进行原型验证,性能调优,针对我们的业务场景优化CarbonData的数据加载性能,查询性能并贡献给CarbonData开源社区,最终我们选择了Spark+CarbonData的方案,这个也是典型的SQL On Hadoop的方案,也间接印证了传统数据仓库往SQL on Hadoop上迁移的趋势。

参考社区官网资料,结合我们验证测试和理解:CarbonData是大数据Hadoop生态高性能数据存储方案,尤其在数据量较大的情况下加速明显,与Spark进行了深度集成,兼容了Spark生态所有功能(SQL,ML,DataFrame等),Spark+CarbonData适合一份数据满足多种业务场景的需求,它包含如下能力:

1、存储:行、列式文件存储,列存储类似于Parquet、ORC,行存储类似Avro。支持针对话单、日志、流水等数据的多种索引结构。

2、计算:与Spark计算引擎深度集成和优化;支持与Presto, Flink, Hive等引擎对接;

3、接口:

  • API:兼容DataFrame, MLlib, Pyspark等原生API接口;
  • SQL:兼容Spark语法基础,同时支持CarbonSQL语法扩展(更新删除,索引,预汇聚表等)。

4、数据管理:

  • 支持增量数据入库,数据批次管理(老化管理)
  • 支持数据更新,删除
  • 支持与Kafka对接,准实时入库

细的关键技术介绍以及使用,请上官网阅读查看文档https://carbondata.apache.org/

技术选型介绍

这里补充介绍下为什么选取SQL on Hadoop技术作为最终的解决方案。

接触过大数据的人都知道,大数据有个5V特征,从传统互联网数据到移动互联网数据,再到现在很热门的IoT,实际上随着每一次业界的进步,数据量而言都会出现两到三个数量级的增长。而且现在的数据增长呈现出的是一个加速增长的趋势,所以现在提出了一个包括移动互联网以及物联网在内的互联网大数据的5大特征:Volume、 Velocity、Variety、Value、Veracity。随着数据量的增长传统的数据仓库遇到的挑战越来越多。

传统数据仓库面临的挑战:

_1

同时数据体系也在不断的进化

• 存储方式的进化:离线、近线 -> 全部在线

• 存储架构的进化:集中式存储 -> 分布式存储

• 存储模型的进化:固定结构 -> 灵活结构.

数据处理模式的进化

• 固定模型固定算法 -> 灵活模型灵活算法

数据处理类型的进化

• 结构化集中单源计算 -> 多结构化分布式多源计算

数据处理架构的进化

• 数据库静态处理 -> 数据实时/流式/海量处理

针对上述的变化数据库之父Kimball提出了一个观点:

_2

Kimball的核心观点:

hadoop改变了传统数仓库的数据处理机制,传统数据库的一个处理单元在hadoop中解耦成三层:

• 存储层:HDFS

• 元数据层:Hcatalog

• 查询层:Hive、Impala、Spark SQL

Schema on Read给了用户更多的选择:

• 数据以原始格式导入存储层

• 通过元数据层来管理目标数据结构

• 由查询层来决定什么时候提取数据

• 用户在长期探索和熟悉数据之后,可以采取Schema on Write模式固化中间表,提高查询性能

_3

SQL on Hadoop数据仓库技术

数据处理和分析

• SQL on hadoop

• Kudu+Impala、Spark、HAWQ、Presto、Hive等

• 数据建模和存储

• Schema on Read

• Avro & ORC & Parquet & CarbonData

• 流处理

• Flume+Kafka+Spark Streaming

SQL-on-Hadoop技术的发展和成熟推动变革

_4

经过上述的技术分析,最终我们选择了SQL on Hadoop的技术作为我们平台未来的数据仓库演进方向,这里肯定有人问了,为什么不选取MPPDB这种技术呢,这里我们同样把SQL on Hadoop与MPPDB进行过对比分析(注Impala其实也是一种类似MPPDB的技术):

_5

方案实施效果

局点2018年9月底上线Spark+CarbonData替换Impala后运行至今,每天处理大于100TB的单据量,在业务高峰期,数据加载性能从之前impala的平均单台60MB/s到平台单台100MB/s的性能,在局点典型业务场景下,查询性能在20并发查询下,Spark+CarbonData的查询性能是Impala+parquet的2倍以上。

同时解决了以下问题:

1、Hadoop集群资源共享问题,Impala资源不能通过Yarn统一资源调度管理,Spark+CarbonData能通过Yarn统一资源调度管理,实现与其他如Spark,Hive等组件的动态资源共享。

2、Hadoop集群扩容问题,之前Impala只能使用百台机器,现在Spark+CarbonData能做到上千台节点集群规模。

_6

实施过程中注意项:

1、数据加载使用CarbonData的local sort方式加载,为了避免大集群产生过多小文件的问题,加载只指定少数机器上进行数据加载,另外对于每次加载数据量比较小的表可以指定表级别的compaction来合并加载过程中产生的小文件。

2、根据业务的查询特点,把经常查询过滤的字段设置为数据表的sort column属性(比如电信业务经常查询的用户号码等),并且设置sort column的字段顺序先按照字段的查询频率由高到低排列,如果查询频率相差不大,则再按照字段distinct值由高到低排列,来提升查询性能。

3、创建数据表设置的blocksize大小,单个表的数据文件block大小可以通过TABLEPROPERTIES进行定义,单位为MB,默认值为1024MB。这个根据实际数据表的每次加载的数据量,根据我们实践经验:一般建议数据量小的表blocksize设置成256MB,数据量比较大的表blocksize设置成512MB。

4、查询性能的调优,还可以结合业务查询的特点,对查询高频率的字段,创建bloomfilter等datamap来提升查询性能。

5、还有一些Spark相关的参数设置,对于数据加载和查询,先结合SparkUI分析性能瓶颈点,在针对性的调整相关的参数,这里不一一介绍了,记住一点性能调优是个技术细活,参数调整要针对性的调整,一次调整只调相关的一个或者几个参数,在看效果,不生效就调整回去,切记千万不要一次性调整的参数过多。

推荐阅读:https://www.roncoo.com/course/list.html?courseName=%E5%A4%A7%E6%95%B0%E6%8D%AE+

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
人工智能 分布式计算 大数据
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
本文探讨了大数据场景下降维的核心问题与解决方案,重点分析了“维度灾难”对模型性能的影响及特征冗余的陷阱。通过数学证明与实际案例,揭示高维空间中样本稀疏性问题,并提出基于Spark的分布式降维技术选型与优化策略。文章详细展示了PCA在亿级用户画像中的应用,包括数据准备、核心实现与效果评估,同时深入探讨了协方差矩阵计算与特征值分解的并行优化方法。此外,还介绍了动态维度调整、非线性特征处理及降维与其他AI技术的协同效应,为生产环境提供了最佳实践指南。最终总结出降维的本质与工程实践原则,展望未来发展方向。
693 0
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
1250 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
786 79
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
机器学习/深度学习 分布式计算 大数据
阿里云 EMR Serverless Spark 在微财机器学习场景下的应用
面对机器学习场景下的训练瓶颈,微财选择基于阿里云 EMR Serverless Spark 建立数据平台。通过 EMR Serverless Spark,微财突破了单机训练使用的数据规模瓶颈,大幅提升了训练效率,解决了存算分离架构下 Shuffle 稳定性和性能困扰,为智能风控等业务提供了强有力的技术支撑。
787 15
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
770 2
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
702 1
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
分布式计算 大数据 OLAP
AnalyticDB与大数据生态集成:Spark & Flink
【10月更文挑战第25天】在大数据时代,实时数据处理和分析变得越来越重要。AnalyticDB(ADB)是阿里云推出的一款完全托管的实时数据仓库服务,支持PB级数据的实时分析。为了充分发挥AnalyticDB的潜力,将其与大数据处理工具如Apache Spark和Apache Flink集成是非常必要的。本文将从我个人的角度出发,分享如何将AnalyticDB与Spark和Flink集成,构建端到端的大数据处理流水线,实现数据的实时分析和处理。
596 1
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
466 0