如何解析SparkSQL+SequoiaDB性能调优策略

分类:编程技术 时间:2024-02-20 16:14 浏览:0 评论:0
0
本文将详细讲解如何解析SparkSQL+SequoiaDB性能调优策略。文章内容质量很高,分享给大家,作为参考。希望您看完本文后对相关知识有一定的了解。 。

下面介绍SequoiaDB(分布式存储)和Spark(分布式计算)的对接使用,以及如何在海量数据场景下提升统计分析性能。


01 SequoiaDB和SparkSQL简介

SequoiaDB是一款开源的金融级分布式关系数据库,支持标准SQL和事务功能,支持复杂索引查询。 ,与Hadoop、Hive、Spark深度集成。在分布式存储功能方面,SequoiaDB能够提供比一般大数据产品更多的数据切分规则,包括:水平切分、范围切分、主子表切分(类似partitio)n 分区)和多维分割方法。用户可以根据不同的场景选择相应的分段方法,以提高系统的存储容量和运行性能。

Spark这几年发展特别迅速,越来越多的开发者使用SparkSQL进行大数据处理和分析。 SparkSQL是Spark产品的组成部分,SQL执行引擎是利用Spark的RDD和Dataframe实现的。

SparkSQL与另一个流行的大数据SQL产品Hive有相似之处,但两个产品之间仍然存在本质的区别。最大的区别在于执行引擎。 Hive支持Hadoop和Tez计算框架,而SparkSQL只支持Spark RDD计算框架,但SparkSQL有更深入的执行计划优化和处理引擎优化。



02如何集成SequoiaDB和SparkSQL?

火花本身就是一个分布式计算框架。它不像Hadoop那样同时为开发者提供分布式计算和分布式存储。而是开放存储层的开发接口。只要开发者按照Spark的接口规范实现接口方法,任何存储产品都可以成为Spark数据。计算的来源还包括SparkSQL的数据源。

SequoiaDB是一个分布式数据库,可以为用户存储海量数据。但如果想要对海量数据进行统计和分析,仍然需要借助分布式计算框架的并发计算性能,提高计算效率。因此,SequoiaDB为Spark开发了SequoiaDB for Spark连接器,让Spark支持并发从SequoiaDB获取数据,然后完成相应的数据计算。

Spark与Sequoi的对接方法aDB相对简单。用户只需将SequoiaDB for Spark连接器spark-sequiadb.jar和SequoiaDB的java驱动sequoiadb.jar添加到每个Spark Worker的CLASSPATH中即可。

例如,用户希望SparkSQL连接SequoiaDB,可以在spark-env.sh配置文件中添加SPARK_CLASSPATH参数。如果该参数已存在,则将新的jar包添加到SPARK_CLASSPATH参数中,如:

SPARK_CLASSPATH="/media/psf/mnt/sequoiadb-driver-2.9。 0-SNAPSHOT.jar:/media/psf/mnt/spark-sequoiadb_2.11- 2.9.0-SNAPSHOT.jar"


用户修改spark-env.sh配置后,重启spark-sql或thriftserver即可完成Spark与SequoiaDB的连接。



03 SequoiaDB和SparkSQL性能优化

Spark SQL+SequoiaDB的性能优化将基于连接器计算技术原理、SparkSQL优化、与SequoiaDB优化并连接或者从四个方面来介绍参数优化。



3.1 SequoiaDB for SparkSQL

A) Connector的工作原理

虽然Spark产品为用户提供了多种功能模块,但只是数据计算的功能模块。 Spark产品本身不具备任何存储功能。默认情况下,Spark从本地文件服务器或HDFS读取数据。 Spark还向广大开发者开放了与存储层的接口。开发者只要按照Spark接口规范实现自己的存储层连接器,任何数据源都可以称为Spark计算的数据源。

下图展示了Sparkworker和存储层datanode之间的关系。


图1

从下图可以了解Spark计算框架与存储层的关系。 Spark Master收到计算任务后,首先与存储层通信,从存储层的访问快照或存储计划中获取为本次计算任务设计的所有数据的存储状态。存储层返回给Spark Master的结果是数据存储的分区队列。

然后Spark master会将数据存储的分区队列中的分区一一分配给Spark Worker。 Spark Work接收到数据的分区信息后,就可以了解如何获取计算数据。然后Spark Work会主动连接存储层的Node节点,获取数据,然后结合Spark Master向Spark Worker下发的计算任务,开始数据计算工作。


图2



SequoiaDB for Spark连接器的实现原理与上面的描述基本相同,只是它生成数据计算 当执行分区任务时,连接器会根据Spark推送的查询条件在SequoiaDB中生成查询计划。

如果SequoiaDB可以根据查询条件进行索引扫描,那么连接器生成的分区任务将允许Spark工作直接连接到SequoiaDB的数据节点。

如果SequoiaDB无法根据查询条件进行索引扫描,连接器会获取相关数据表的所有数据块信息,然后根据查询生成包含多个数据块连接信息的分区计算任务PartitionBlocknum 和 PartitionMaxnum 参数。



B) 连接器参数

SequoiaDB for Spark 连接器在 SequoiaDB 2.10 之后进行了重构,以提高 Spark 并发从 SequoiaDB 获取数据的性能,参数也相应调整。

用户在SparkSQL上创建一张数据源为SequoiaDB的表。建表模板如下:

create [temporary] [(schema)] using com.sequoiadb.spark options ();

SparkSQL建表命令关键字介绍:

1. tempor 关键字,表示是表还是视图,如果用户标记了temporary 关键字,则客户端重启后该表或视图会自动删除;

2.用户在创建表时可以选择不指定表结构。因为如果用户没有显式指定表结构,SparkSQL在创建表时会自动检测已有数据的表结构;

3. com.sequoiadb.spark关键字是SequoiaDB for Spark连接器的入口类;

4. options 为 SequoiaDB for Spark 连接器的配置参数;



SparkSQL建表示例如下:

< pre>create table tableName (name string, id int) using com.sequoiadb.spark options (host 'sdb1:11810,sdb2:11810,sdb3:11810', collectionspace 'foo', collection 'bar' , 用户名 'sdbadmin', 密码 'sdbadmin');



SparkSQL for SequoiaDB 建表选项参数列表如下:


表1


3.2 SparkSQL优化

如果用户想使用SparkSQL进行海量统计分析操作数据方面,应该从三个方面进行性能调优:

1.增加Spark Worker最大可用内存大小,防止计算过程中数据超出内存范围,部分数据需要写入临时文件;

2.增加 Spark Workers 的数量,并设置每个 Worker 使用当前服务器的左右 CPU 资源,以提高并发性;

3.调整Spark的运行参数;

用户可以通过调整spark -env.sh配置文件来设置,SPARK_WORKER_MEMORY是控制Worker可用内存的参数,SPARK_WORKER_INSTANCES是参数eter 控制每台服务器上启动的 Worker 数量。



如果用户需要调整Spark的运行参数,需要修改spark-defaults.conf配置文件。能够显着提高海量数据统计计算优化的参数有:

1. Spark.storage.memoryFraction,该参数控制Worker用户存储临时计算数据的内存比例。默认为 0.6,即 60%;

2. Spark .shuffle.memoryFraction,该参数控制每个Worker在计算过程中shuffle可以占用的内存比例。默认值为 0.2,即 20%。如果临时存储的计算数据较少,且计算、排序、join等操作中group by较多,则应考虑增大spark.shuffle.memoryFraction,减小spark.storage.memoryFraction,避免写入多余的内存进入临时文件乐;

3. Spark.serializer ,该参数设置Spark在运行时使用哪种序列化方法。默认是org.apache.spark.serializer.JavaSerializer,但是为了提高性能,应该选择org.apache.spark.serializer.KryoSerializer序列化。



3.3 SequoiaDB优化

在SparkSQL+SequoiaDB的这个组合中,由于数据是从SequoiaDB读取的,所以性能上需要考虑三点优化

1.大表的数据是可以分布式存储的,所以建议满足二维切分条件的表采用主子表+Hash切分两种数据平衡方式进行分布式数据存储;

2.数据导入时,应避免将数据同时导入到同一集合空间中的多个集合中,因为同一集合空间中的多个集合共享同一个数据文件。如果你导入将数据同时放入同一个集合空间中的多个集合中,就会产生问题。导致每个集合下的数据块存储过于离散,导致Spark SQL从SequoiaDB获取海量数据时需要读取的数据块过多;

3.如果SparkSQL的查询命令包含查询条件,则应在SequoiaDB中相应建立相应字段的索引。


3.4 连接器优化

SequoiaDB for Spark 连接器参数优化主要分为两种场景,一种是数据读取,一种是数据写入。

数据写入优化空间较小。只有一个参数可以调整,即bulksize 参数。该参数默认值为500,表示连接器向SequoiaDB写入数据时,会使用500条记录组成一个网络数据包,然后向SequoiaDB发送写入请求。散装包装通常设置 ramer,使网络数据包不超过 2MB。

对于数据读取的参数优化,用户需要关注三个参数partitionmode、partitionblocknum和partitionmaxnum。

Partitionmode,连接器的分区模式,可选值为single、sharding、datablock、auto,默认值为auto,表示连接器智能识别。

1、单值是指SparkSQL在访问SequoiaDB数据时不考虑并发性能,仅使用一个线程连接SequoiaDB的Coord节点。一般建表、采样表结构数据时使用该参数;

2.sharding该值代表SparkSQL访问SequoiaDB数据时,采用直连SequoiaDB的各个datanode。该参数一般在SQL命令包含查询条件时使用,且查询可以使用SequoiaDB中的索引查询;

3 .datablock值表示SparkSQL访问SequoiaDB数据时,使用SequoiaDB并发连接的数据块进行数据读取。该参数一般用于SQL命令无法使用SequoiaDB中索引查询且查询数据量较大的场景;

4、auto值表示SparkSQL查询SequoiaDB数据时,采用的方式访问SequoiaDB会由连接器根据不同的情况来决定。

Partitionblocknum,该参数只有在partitionmode=datablock时才会生效,代表每个Worker在进行数据计算时,一次获得多少个SequoiaDB数据块读取任务。该参数默认值为4。如果SequoiaDB存储的数据量较大,且参与计算的数据块较多,则用户应增大该参数,以使SparkSQL计算任务保持在合理范围内,提高数据质量阅读效率效率。

partitionmaxnum,该参数仅在partitionmode=datablock时生效,代表连接器可以生成的最大数据块读取任务数。该参数默认值为1000。该参数主要是为了防止SequoiaDB中数据量过多导致数据块总数过大,导致SparkSQL的计算任务过多,最终导致整体计算性能下降。

这里分享一下如何解析SparkSQL+SequoiaDB的性能调优策略。希望以上内容能够对大家有所帮助,大家可以借鉴。更多知识。如果您觉得文章不错,可以分享出去,让更多的人看到。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何解析SparkSQL+SequoiaDB性能调优策略

用户评论