spark 性能调优高级篇(查询sparksql最新分区)

技术怎么解析SparkSQL+SequoiaDB 性能调优策略这篇文章将为大家详细讲解有关怎么解析SparkSQL+SequoiaDB 性能调优策略,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后

本文将详细解释如何分析SparkSQL SequoiaDB的性能调优策略。这篇文章的内容质量很高,所以边肖会分享给大家参考。希望你看完这篇文章后有所了解。

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

01sequeiadb和SparkSQL简介

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

Spark近年来发展迅速,越来越多的开发人员使用SparkSQL进行大数据处理和分析。SparkSQL是Spark产品不可分割的一部分,SQL的执行引擎由Spark的RDD和Dataframe实现。

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

如何集成0红杉DB和SparkSQL?

Spark本身就是一个分布式计算框架。与Hadoop不同,它同时为开发人员提供分布式计算和分布式存储。相反,它打开了存储层的开发界面。只要开发人员按照Spark的接口规范实现接口方法,任何存储产品都可以成为Spark数据计算的来源,包括SparkSQL的数据源。

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

Spark和SequoiaDB的对接方式比较简单。用户只需要在每个Spark Worker的CLASSPATH中添加Spark连接器的sequoiab-sequoiab . jar和SequoiaDB java驱动程序sequoiab . jar。

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

SPARK _ class path='/media/PSF/mnt/sequoiab-driver-2 . 9 . 0-snapshot . jar :/media/PSF/mnt/SPARK-sequoiab _ 2.11-2 . 9 . 0-snapshot . jar '

用户修改完spark-env.sh的配置后,重启spark-sql或thriftserver,完成spark和SequoiaDB的对接。

03sequeiadb和SparkSQL性能优化

将从连接器计算技术原理、Spark SQL优化、sequoiab优化和连接器参数优化四个方面介绍SparkSQL sequoiab的性能优化。

3.1针对SparkSQL的SequoiaDB

a)连接器的工作原理

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

下图显示了存储层中Spark工作人员和数据节点之间的关系。

怎么解析SparkSQL+SequoiaDB  性能调优策略

图1

Spark计算框架和存储层的关系可以从下图中理解。接到计算任务后,星火大师

,首先会与存储层做一次通讯,从存储层的访问快照或者是存储规划中,得到本次计算任务所设计的所有数据的存储情况。存储层返回给 Spark master 的结果为数据存储的 partition 队列。

然后 Spark master 会将数据存储的 partition 队列中的 partition 逐个分配给给 Spark worker。Spark work 在接收到数据的 partition 信息后,就能够了解如何获取计算数据。然后 Spark work 会主动与存储层的 node 节点进行连接,获取数据,再结合 Spark master 下发给 Spark worker 的计算任务,开始数据计算工作。

 怎么解析SparkSQL+SequoiaDB 性能调优策略
图2

 

SequoiaDB for Spark 的连接器的实现原理和上述描述基本一致,只是在生成数据计算的 partition 任务时,连接器会根据 Spark 下压的查询条件到 SequoiaDB 中生成查询计划。

如果 SequoiaDB 能够根据查询条件做索引扫描,连接器生成的 partition 任务将是让Spark work 直接连接 SequoiaDB 的数据节点。

如果 SequoiaDB 无法根据查询条件做索引扫描,连接器将获取相关数据表的所有数据块信息,然后根据 partitionblocknum 和 partitionmaxnum 参数生成包含若干个数据块连接信息的 partititon 计算任务。

 

B)  Connector 参数

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

用户在 SparkSQL 上创建数据源为 SequoiaDB 的 table,建表模版如下:

create [temporary] <table|view> <name>[(schema)] using com.sequoiadb.spark options (<options>);

SparkSQL 创表命令的关键字介绍:

1. temporary 关键字,代表该表或者视图是否为邻时创建的,如果用户标记了temporary 关键字,则该表或者视图在客户端重启后将自动被删除;

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

3. com.sequoiadb.spark 关键字为 SequoiaDB for Spark connector  的入口类;

4. options 为 SequoiaDB for Spark connector 的配置参数;

 

SparkSQL 建表例子如下:

create table tableName (name string, id int) using com.sequoiadb.spark options (host 'sdb1:11810,sdb2:11810,sdb3:11810', collectionspace 'foo', collection 'bar', username 'sdbadmin', password 'sdbadmin');

SparkSQL for SequoiaDB 的建表 options 参数列表如下:

怎么解析SparkSQL+SequoiaDB 性能调优策略
表1

 
3.2 SparkSQL 优化

用户如果要使用 SparkSQL 对海量数据做统计分析操作,那么应该从3个方面进行性能调优:

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

2. 增加 Spark Worker 数目,并且设置每个 Worker 均可以使用当前服务器左右 CPU 资源,以提高并发能力;

3. 调整 Spark 的运行参数;

用户可以对 spark-env.sh 配置文件进行设置,SPARK_WORKER_MEMORY 为控制 Worker 可用内存的参数,SPARK_WORKER_INSTANCES 为每台服务器启动多少个 Worker 的参数。

 

如果用户需要调整 Spark 的运行参数,则应该修改 spark-defaults.conf 配置文件,对优化海量数据统计计算有较明显提升的参数有:

1. spark.storage.memoryFraction, 该参数控制 Worker 多少内存比例用户存储临时计算数据,默认为0.6,代表60%的含义;

2. spark.shuffle.memoryFraction, 该参数控制计算过程中 shuffle 时能够占用每个 Worker 的内存比例,默认为0.2,代表20%的含义,如果临时存储的计算数据较少,而计算中有较多的 group by, sort, join 等操作,应该考虑将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. 尽可能将大表的数据分布式存储,所以建议符合二维切分条件的 table 应该采用主子表+ Hash 切分两种数据均衡方式进行数据分布式存储;

2. 数据导入时,应该避免同时对相同集合空间的多个集合做数据导入,因为同一个集合空间下的多个集合是共用相同一个数据文件,如果同时向相同集合空间的多个集合做数据导入,会导致每个集合下的数据块存储过于离散,从而导致在 Spark SQL 从SequoiaDB 获取海量数据时,需要读取的数据块过多;

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

 
3.4 connector 优化

SequoiaDB for Spark 连接器的参数优化,主要分两个场景,一是数据读,另外一个是数据写入。

数据写入的优化空间较少,只有一个参数可以调整,即bulksize参数,该参数默认值为500,代表连接器向 SequoiaDB 写入数据时,以500条记录组成一个网络包,再向 SequoiaDB 发送写入请求,通常设置 bulksize 参数,以一个网络包不超过2MB为准。

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

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

    1. single 值代表 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 性能调优策略就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/150143.html

(0)

相关推荐

  • brew mysql无法连接问题怎么解决

    技术brew mysql无法连接问题怎么解决本篇内容介绍了“brew mysql无法连接问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大

    攻略 2021年12月4日
  • 英文大小写26个字母,二十六个字母大小写及音标是

    技术英文大小写26个字母,二十六个字母大小写及音标是一英文大小写26个字母、26个英文字母的大写字母 A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V、W、X、Y、Z。
    二、26个

    生活 2021年10月24日
  • Pycharm怎么安装PyQt5

    技术Pycharm怎么安装PyQt5本篇内容主要讲解“Pycharm怎么安装PyQt5”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pycharm怎么安装PyQt5”吧!1.

    攻略 2021年12月8日
  • 怎么进行mysql量级数据表的分页优化

    技术怎么进行mysql量级数据表的分页优化怎么进行mysql量级数据表的分页优化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Limit分页

    攻略 2021年10月25日
  • 对孩子的期望和鼓励的话,父母对孩子的期望寄语初中生

    技术对孩子的期望和鼓励的话,父母对孩子的期望寄语初中生1家长对初中孩子的期望 1.愿你是一棵树:春天对孩子的期望和鼓励的话,吐一山淡淡的香味;夏天,洒一抹如泉的凉荫;秋天,举一树甜甜的青果;冬天,做一个养精蓄锐的好梦!

    生活 2021年10月21日
  • 您考虑的任何香港云服务器都应该提供的5个功能

    技术您考虑的任何香港云服务器都应该提供的5个功能无论您的独特需求是什么,每个网站所有者都应该在租用云服务器的时候关注五件事。1.可靠的性能 您想自信地知道,只要有人尝试导航到您的网站,他们就会看到您设计的网站。否则,你付

    礼包 2021年11月9日