文章目录

  • 简介
  • 测试
    • tpcds-kit
    • spark-sql-perf
      • 生成数据
      • 执行查询
      • 查询结果
  • TPC-DS
  • FAQ

简介

spark-sql-perf 是一个 spark sql 性能测试框架,可以用来进行一些基准测试。

测试环境:

  • spark 2.4.0
  • spark-sql-perf_2.11-0.5.0-SNAPSHOT

测试

tpcds-kit

通过 tpcds-kit 生成 TPC-DS 数据。

sudo yum install gcc make flex bison byacc git
git clone https://github.com/databricks/tpcds-kit.git
cd tpcds-kit/tools
make OS=LINUX

spark-sql-perf

编译打包,从$spark-sql-perf/target/scala-2.11 下获得需要的jar包(spark-sql-perf_2.11-0.5.0-SNAPSHOT.jar)

git clone https://github.com/databricks/spark-sql-perf.git
sbt package

启动 spark-shell

    spark-shell \--conf spark.executor.instances=40 \--conf spark.executor.cores=3 \--conf spark.executor.memory=8g \--conf spark.executor.memoryOverhead=2g \--jars scala-logging-slf4j_2.11-2.1.2.jar,scala-logging-api_2.11-2.1.2.jar,spark-sql-perf_2.11-0.5.0-SNAPSHOT.jar

生成数据

需要提前将 tpcds-kit 分发到所有 spark executor 节点

import com.databricks.spark.sql.perf.tpcds.TPCDSTablesval rootDir = "hdfs://ns/user/admin/tpcds/data"
val dsdgenDir = "/path/to/tpcds-kit/tools"
val scaleFactor = "20"
val format = "parquet"
val databaseName = "tpcds"val sqlContext = spark.sqlContext
val tables = new TPCDSTables(sqlContext,dsdgenDir = dsdgenDir, scaleFactor = scaleFactor,useDoubleForDecimal = true, useStringForDate = true)tables.genData(location = rootDir,format = format,overwrite = true,partitionTables = true, clusterByPartitionColumns = true, filterOutNullPartitionValues = false, tableFilter = "", numPartitions = 120)//创建临时表
tables.createTemporaryTables(rootDir, format)
//将表信息注册到 hive metastore
//sql(s"create database $databaseName")
//tables.createExternalTables(rootDir, format, databaseName, overwrite = true, discoverPartitions = true)

执行查询

默认情况下,使用 runExperiment 会在后台线程中进行,最终将结果以JSON格式保存到 resultLocation 下时间戳命名的子目录中,例如 $resultLocation/timestamp=1429213883272

import com.databricks.spark.sql.perf.tpcds.TPCDSval tpcds = new TPCDS (sqlContext)
val databaseName = "tpcds"
sql(s"use $databaseName")val resultLocation = "hdfs://ns/user/admin/result"
val iterations = 1
val queries = tpcds.tpcds2_4Queries
//单个查询设置超时时间
val timeout = 300val experiment = tpcds.runExperiment(queries, iterations = iterations,resultLocation = resultLocation,forkThread = true)
experiment.waitForFinish(timeout)

查询结果

有两种获取方式,如果 experiment 还没有关闭,可以使用 experiment.getCurrentResults 方法获取

//从 experiment 获取结果
experiment.getCurrentResults.
withColumn("Name", substring(col("name"), 2, 100)).
withColumn("Runtime", (col("parsingTime") + col("analysisTime") + col("optimizationTime") + col("planningTime") + col("executionTime")) / 1000.0).
selectExpr('Name, 'Runtime)

如果已经关闭,则可以从 resultLocation 中获取结果JSON文件并解析

//从文件中读取
val result = spark.read.json(resultLocation)
result.select("results.name","results.executionTime").flatMap(r=>{val name = r.getAs[Seq[String]]("name")val executionTime = r.getAs[Seq[Double]]("executionTime")name.zip(executionTime)
}).toDF("name","executionTime").show()

TPC-DS

TPC-DS采用星型、雪花型等多维数据模式。它包含7张事实表,17张纬度表平均每张表含有18列。其工作负载包含99个SQL查询,覆盖SQL99和2003的核心部分以及OLAP。这个测试集包含对大数据集的统计、报表生成、联机查询、数据挖掘等复杂应用,测试用的数据和值是有倾斜的,与真实数据一致。可以说TPC-DS是与真实场景非常接近的一个测试集,也是难度较大的一个测试集。

TPC-DS的这个特点跟大数据的分析挖掘应用非常类似。Hadoop等大数据分析技术也是对海量数据进行大规模的数据分析和深度挖掘,也包含交互式联机查询和统计报表类应用,同时大数据的数据质量也较低,数据分布是真实而不均匀的。因此TPC-DS成为客观衡量多个不同Hadoop版本以及SQL on Hadoop技术的最佳测试集。这个基准测试有以下几个主要特点:

  • 一共99个测试案例,遵循SQL’99和SQL 2003的语法标准,SQL案例比较复杂
  • 分析的数据量大,并且测试案例是在回答真实的商业问题
  • 测试案例中包含各种业务模型(如分析报告型,迭代式的联机分析型,数据挖掘型等)
  • 几乎所有的测试案例都有很高的IO负载和CPU计算需求

FAQ

执行 new TPCDS 时如果提示

java.lang.ClassNotFoundException: com.typesafe.scalalogging.slf4j.LazyLogging
java.lang.ClassNotFoundException: com.typesafe.scalalogging.Logging

导入相应的包即可

--jars /path/to/scala-logging-slf4j_2.11-2.1.2.jar,/path/to/scala-logging-api_2.11-2.1.2.jar

spark-sql-perf相关推荐

  1. Spark SQL基本操作以及函数的使用

    2019独角兽企业重金招聘Python工程师标准>>> 引语: 本篇博客主要介绍了Spark SQL中的filter过滤数据.去重.集合等基本操作,以及一些常用日期函数,随机函数,字 ...

  2. Spark SQL与外部数据源的操作(Spark SQL ——> CSV/JSON/Parquet/hive/mysql)

    目录 一.Spark SQL支持的外部数据源 二.Spark SQL -> CSV 2.1 读CSV文件 a.有列名 b.无列名 2.2 写CSV文件 三.Spark SQL -> JSO ...

  3. 【Spark Summit East 2017】Spark SQL:Tungsten之后另一个可以达到16倍速度的利器

    更多精彩内容参见云栖社区大数据频道https://yq.aliyun.com/big-data:此外,通过Maxcompute及其配套产品,低廉的大数据分析仅需几步,详情访问https://www.a ...

  4. 【未完成】[Spark SQL_2] 在 IDEA 中编写 Spark SQL 程序

    0. 说明 在 IDEA 中编写 Spark SQL 程序,分别编写 Java 程序 & Scala 程序 1. 编写 Java 程序 待补充 2. 编写 Scala 程序 待补充 转载于:h ...

  5. spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?

    戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...

  6. spark SQL学习(综合案例-日志分析)

    日志分析 scala> import org.apache.spark.sql.types._ scala> import org.apache.spark.sql.Rowscala> ...

  7. Adaptive Execution让Spark SQL更高效更好用

    本文所述内容均基于 2018年9月17日 Spark 最新 Spark Release 2.3.1 版本,以及截止到 2018年10月21日 Adaptive Execution 最新开发代码.自动设 ...

  8. Spark SQL中出现 CROSS JOIN 问题解决

    Spark SQL中出现 CROSS JOIN 问题解决 参考文章: (1)Spark SQL中出现 CROSS JOIN 问题解决 (2)https://www.cnblogs.com/yjd_hy ...

  9. 【Spark】Spark SQL, DataFrames and Datasets Guide(翻译文,持续更新)

    本文主要是翻译Spark官网Spark SQL programming guide .只能保证大概意思,尽量保证细节.英文水平有限,如果有错误的地方请指正,轻喷.目录导航在右上角 Spark SQL. ...

  10. hive编程指南电子版_第三篇|Spark SQL编程指南

    在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...

最新文章

  1. IIC通信控制的AD5259------在调试过程中遇到的奇葩问题
  2. nginx+fastcgi实现动静分离架构
  3. qt5.9.0调试如何查看变量的值_从0开发3D引擎(四):搭建测试环境
  4. linux系统12,Linux操作系统12则经典应用技巧
  5. 使用Android SDK Manager下载sdk时总是出现中断异常的解决办法。
  6. Servlet体系结构
  7. pat 乙级 1005 继续(3n+1)猜想(C++)
  8. HttpURLConnection, Android访问网络,实用demo
  9. boost.asio防止恶意空连接的方法
  10. python输出50-150之间不能被5整除的整数代码解读
  11. HTML滚动条自定义
  12. jstl处理栏目与子栏目_深圳北易:网站SEO优化如何提高网站栏目页排名
  13. Yocto tips (17): Yocto License问题:restricted license not whitelisted in LICENSE_FLAGS_WHITELIST
  14. 【先定一个小目标】Asp.net Core 在IIS上的托管运行
  15. Unity3D VS UE4
  16. php安装时候的源是什么,Windows安装源无效怎么办
  17. 一小时学会Python3爬虫基础(七)高级数据的全部操作:列表
  18. 字节跳动最新开源!java后端工程师简历模板
  19. ModBus(RTU TCP UDP通信)及利用socket通信(DTU)实现Modbus-RTU通信协议
  20. 138个医共体!紧密型县域医共体建设和改革,这个省这么干

热门文章

  1. 我有200台摄像机4MB/s,后端防火墙吞吐量多少G够用?应用层1G够用吗?
  2. Java线程的6种状态(NEW,RUNNABLE,BLOCKED,WAITING,TINED_WATING,TEMINATE)
  3. 计算机硬件与软件教学反思,计算机硬件教学反思.doc
  4. 华为网络---静态路由
  5. Unity3d制作2D游戏飞翔的小鸟(FlappyBird)
  6. 婴儿大脑MRI图谱集
  7. 日积一步3(求解点到平面二次曲线的最近距离)
  8. day15-正则表达式
  9. 【JTS】JTS的几何图形的基本关系方法
  10. 拟一维喷管流动的数值解——全亚声速等熵喷管流动的非守恒型CFD解法(MacCormack方法)