sparkSQL将谓词推入kudu引擎
kudu之所以执行非常快速,可以用来替代HDFS和Hbase等,一个主要原因是,我们可以将普通SQL中的谓词推入kudu引擎,这样kudu查询数据会变的非常快;
将谓词评估推入Kudu引擎可以提高性能,因为它可以减少需要流回Spark引擎以进行进一步评估和处理的数据量。
通过Spark API当前支持谓词下推的谓词集包括:
- 等于(=)
- 大于(>)
- 大于或等于(> =)
- 小于(<)
- 小于等于(<=)
因此,Spark SQL中的这些语句会将谓词评估推向Kudu的存储引擎,从而提高整体性能。
- import org.apache.kudu.spark.kudu._
- import org.apache.spark.{SparkConf, SparkContext}
- import org.apache.spark.sql.SparkSession
- /**
- * Created by angel;
- */
- object Predicate_pushDown {
- def main(args: Array[String]): Unit = {
- val sparkConf = new SparkConf().setAppName("AcctfileProcess")
- //设置Master_IP并设置spark参数
- .setMaster("local")
- .set("spark.worker.timeout", "500")
- .set("spark.cores.max", "10")
- .set("spark.rpc.askTimeout", "600s")
- .set("spark.network.timeout", "600s")
- .set("spark.task.maxFailures", "1")
- .set("spark.speculationfalse", "false")
- .set("spark.driver.allowMultipleContexts", "true")
- .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
- val sparkContext = SparkContext.getOrCreate(sparkConf)
- val sqlContext = SparkSession.builder().config(sparkConf).getOrCreate().sqlContext
- //使用spark创建kudu表
- val kuduMasters = "hadoop01:7051,hadoop02:7051,hadoop03:7051"
- val kuduContext = new KuduContext(kuduMasters, sqlContext.sparkContext)
- //TODO 1:定义kudu表
- val kuduTableName = "spark_kudu_tbl"
- //TODO 2:配置kudu参数
- val kuduOptions: Map[String, String] = Map(
- "kudu.table" -> kuduTableName,
- "kudu.master" -> kuduMasters)
- //TODO 3:注册kudu表作为spark的临时表
- sqlContext.read.options(kuduOptions).kudu.registerTempTable(kuduTableName)
- //TODO 4:执行sparkSQL语句,spark会自动将谓词推入kudu引擎
- val customerNameAgeDF = sqlContext.
- sql(s"""SELECT name, age FROM $kuduTableName WHERE age >= 30""")
- //TODO 5:展示结果
- customerNameAgeDF.show()
- //TODO 6:使用sparkSQL的查询计划
- customerNameAgeDF.explain()
- }
- }
可以看到查询计划:
== Physical Plan == Scan org.apache.kudu.spark.kudu.KuduRelation@781dbe44 [name#0,age#1] PushedFilters: [IsNotNull(age), *GreaterThanOrEqual(age,30)], ReadSchema: structname:string,age:int
sparkSQL将谓词推入kudu引擎的更多相关文章
- rownum导致sql不能进行谓词推入
背景 案件(13405_RI-再保结算查询导出太慢),造成性能慢的原因是执行以下sql时,每次执行平均需要消耗2秒, 画面上,点击一次导出按钮,就会发起数以百记的调用. SQL执行代码段 select ...
- js扩展方法(数组不重复推入)
扩展方法是一个很有趣的东西. 使用prototype在原始的类型上添加自己需要的方法.方便在一些常用的情况下使用,比如说字符串的String.trim()清除字符串前后的空格(当然这个方法内置已经有了 ...
- 使用sparksql往kafka推送数据
一.相关配置参数 1.同级目录resource文件夹下配置 brokers_list=kafkaxxx02broker01:9092,kafkaxxx02broker02:9092,kafkaxxx0 ...
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编 ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...
- SQL 编码规范
1. 必须对表起别名,方便调查表用了哪些列 比如 select owner,object_id,name from a,b where a.id=b.id; 如果不对表取别名,我怎么知道你访问的列是哪 ...
- 优化大型复杂SQL
with aa as (select a.agmt_id, sum(c.acct_bal) as card_bal, --借记卡期末存款余额 a.card_open_org, a.OPEN_DATE, ...
- SQL 编码标准
1. 你必须从别名表,易于使用的表,该表列 实例 select owner,object_id,name from a,b where a.id=b.id; 假设是不正确的别名表.我知道你是怎么访问表 ...
- Oracle SQL高级编程——分析函数(窗口函数)全面讲解
Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...
- 译:ORCFILE IN HDP 2:更好的压缩,更高的性能
原文地址: https://hortonworks.com/blog/orcfile-in-hdp-2-better-compression-better-performance/ ORCFILE I ...
随机推荐
- HTML中添加音乐video embed audio
做H5页面时需要添加背景音乐,方法如下 方式一:<video controls="" autoplay="" name="media" ...
- useful tips for python
import module; help(module.function) import module; help(module.class)
- appium+java报错之nodejs报错
$ gulp(node:784) fs: re-evaluating native module sources is not supported. If you areusing the grace ...
- [转]TSVNCache.exe卡死电脑的解决方法
转至于https://blog.csdn.net/gnail_oug/article/details/55506820. 正文如下: 每当打开explorer资源管理器的时候,经常卡死,换了固态硬盘还 ...
- [C][代码实例]整型数组二分排序
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...
- C# 如何获取自定义的config中节点的值,并修改节点的值
现定义一个方法 DIYConfigHelper.cs using System; using System.Xml; using System.Configuration; using System. ...
- 洛谷P4451 [国家集训队]整数的lqp拆分 [生成函数]
传送门 题意简述:语文不好不会写,自己看吧 思路如此精妙,代码如此简洁,实是锻炼思维水经验之好题 这种题当然是一眼DP啦. 设\(dp_n\)为把\(n\)拆分后的答案.为了方便我们设\(dp_0=1 ...
- IBM X 3650 M3服务器RAID0设置
1 进入磁盘整列设置窗口 1.1 开机在提示符页面下按[F1]进入BIOS设置 1.2 依次进入子菜单[System Settings]à[Adapters and UEFI Drivers] 1.3 ...
- Modbus库开发笔记:Modbus ASCII Master开发
这一节我们来封装Modbus ASCII Master应用,Modbus ASCII主站的开发与RTU主站的开发是一致的.同样的我们也不是做具体的应用,而是实现ASCII主站的基本功能.我们将ASCI ...
- Confluence 6 修改你站点的外观和感觉
你可以为你的 Confluence 整个站点修改表现以及外观和感觉,也可以为单独的空间进行修改. 对整个站点进行的修改将会对使用全局外观和感觉(look and feel)的空间一并进行修改.如果某个 ...