文档章节

在scala中使用spark sql解决特定需求

九劫散仙
 九劫散仙
发布于 2017/07/20 19:58
字数 786
阅读 30
收藏 0

spark sql一个强大之处就是能够嵌在编程语言内执行,比如在java或者scala,Python里面,正是因为这样的特性,使得spark sql开发变得更加有趣。 比如我们想做一个简单的交互式查询,我们可以直接在linux终端直接执行spark sql查询hive来分析,也可以开发一个jar来完成特定的任务。

有些时候单纯的使用sql开发可能功能有限,比如我有下面的一个功能:

一张大的hive表里面有许多带有日期的数据,现在一个需求是能够把不同天的数据分离导入到不同天的es索引里面,方便按时间检索,提高检索性能。

有几种方式可以完成:

(1)写一个MapReduce程序,遍历这个表每一条数据,插入到es里面。

(2)使用Hive按日期分区,生成n个日期分区表,再借助es-hadoop框架,通过shell封装将n个表的数据批量导入到es里面不同的索引里面

(3)使用Scala+Spark SQL读取Hive表按日期分组,然后借助es-hadoop框架把每一组的数据导入es里面。

优缺点:

方式一:开发量最大,导入性能最差

方式二:开发量次之,导入性能一般

方式三:开发量小,性能最优

总结分析:

方式一:

直接使用MapReduce读取表数据,然后每一行add一次,插入性能非常低效,有人会说可以批使用list批量插入,但是不要忘记我们现在是每一天的数据插入到不同的索引里面,一个list是不能放不同日期的数据,所以如果想要批量还要维护一个不同日期的list,并放在Map里面,最后提交完清空集合,整体复杂度增加而且维护调试都比较麻烦。

方式二:

直接使用Hive,提前将数据构建成多个分区表,然后借助官方的es-hadoop框架,直接将每一个分区表的数据,导入到对应的索引里面,这种方式直接使用大批量的方式导入,性能比方式一好,但由于Hive生成多个分区表以及导入时还要读取每个分区表的数据涉及的落地IO次数比较多,所以性能一般

方式三:

在scala中使用spark sql操作hive数据,然后分组后取出每一组的数据集合,转化成DataFrame最后借助es-hadoop框架,将每组数据直接批量插入到es里面,注意此种方式对内存依赖比较大,因为最终需要将数据拉回spark的driver端进行插入操作。

关于方式一和方式二就不再细说了,有兴趣的朋友可以自己尝试下,下篇文章会把基于第三种方式实现的例子分享出来,可以直接在spark的local模式下模拟运行。

© 著作权归作者所有

九劫散仙
粉丝 268
博文 175
码字总数 189625
作品 0
海淀
私信 提问
Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)

在Spark中,也支持Hive中的自定义函数。自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似tochar,todate等 UDAF(User- Defined Aggregation Funcation...

青夜之衫
2017/12/04
0
0
Spark(三) -- Shark与SparkSQL

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/45726665 首先介绍一下Shark的概念 Shark简单的说就是Spark上的Hive,其底层依...

jchubby
2015/05/14
0
0
sparkSql catalyst优化器

---title: sparkSql catalyst优化器subtitle: 自定义catalyst优化器description: catalyst优化器解析keywords: [sparkSql,catalyst,解析]author: liyzdate: 2019-01-10tags: [sparkSql,优化]......

freeli
01/14
51
0
sparkSQL的整体实现框架

这篇博客的目的是让那些初次接触sparkSQL框架的童鞋们,希望他们对sparkSQL整体框架有一个大致的了解,降低他们进入spark世界的门槛,避免他们在刚刚接触sparkSQL时,不知所措,不知道该学习...

hffzkl
2018/06/26
0
0
hive,shark,sparkSQL,hive on spark,impala,drill比较

Hive on Mapreduce Hive的原理大家可以参考这篇大数据时代的技术hive:hive介绍,实际的一些操作可以看这篇笔记:新手的Hive指南,至于还有兴趣看Hive优化方法可以看看我总结的这篇Hive性能优...

hblt-j
2018/08/13
224
0

没有更多内容

加载失败,请刷新页面

加载更多

什么叫做IaC,与DevOps有什么关系?如何实现?

  互联网时代 ,Development应运而生,用户高并发 ,Operations 因势而动,用户终体验 Dev + Operations = DevOps。茫茫IT大江湖,创新钻研的人总会相遇,接头暗号:敏捷、持续、稳定、交付...

梅丽莎好
20分钟前
4
0
Docker下使用disconf:细说demo开发

Docker下的disconf实战全文链接 《Docker搭建disconf环境,三部曲之一:极速搭建disconf》; 《Docker搭建disconf环境,三部曲之二:本地快速构建disconf镜像》; 《Docker搭建disconf环境,...

程序员欣宸
47分钟前
8
0
centos7配置nfs共享存储服务

nfs 是一种网络文件系统,需要依赖rpc进行过程调度 注意nfs只验证id,验证用户名,并且只能在类unix os上进行文件共享服务,由于它的脆弱的验证机制,所以不适宜在internet上工作,在内网使用...

老孟的Linux私房菜
51分钟前
11
0
整合到 Mockito 2

为了能够持续改进 Mockito 和在未来提升测试体验,我们希望你能够升级到 Mockito 2.10!Mockito 按照语义化版本(semantic versioning)的方式对版本进行编排,并且只在主版本升级的时候包含...

honeymoose
今天
5
0
spring boot actuator

actuator 是监控系统健康的工具,引入 spring-boot-starter-actuator会暴露一些endpoint. 可通过如下配置来配置这些endpoint的基本配置: 可通过http:${url}:28081/management/actuator/*来访...

ZH-JSON
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部