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

Spark sql on hive的一个强大之处就是能够嵌在编程语言内执行,比如在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模式下模拟运行。

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2017-07-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

Oracle In-Memory Option的细节

在OOW大会之后,Oracle In-Memory Option这一数据库选件的细节被更多的公布出来。我选取一点信息和大家分享。 In-Memory Optio...

2889
来自专栏架构师小秘圈

分布式唯一ID极简教程

一,题记 所有的业务系统,都有生成ID的需求,如订单id,商品id,文章ID等。这个ID会是数据库中的唯一主键,在它上面会建立聚集索引! ID生成的核心需求有两...

4497
来自专栏岑玉海

Spark的机器学习算法mlib的例子运行

  Spark自带了机器学习的算法mlib,页面网址 http://spark.incubator.apache.org/docs/latest/mllib-g...

4075
来自专栏程序员的SOD蜜

“设计应对变化”--实例讲解一个数据同步系统

 系列文章索引: [WCF邮件通信系统应用 之 数据同步程序 之 设计内幕 之 一] 同步一个数据库要发多少个数据包? [WCF邮件通信系统应用 之 数据同步...

2397
来自专栏杨建荣的学习笔记

gqlplus的简单使用(r6笔记第43天)

使用sqlplus的时候如果命令敲错之后,可能很多情况下需要重新再敲一遍,也可以用一些快捷方式,但是如果想查看之前执行的sql语句,list选项就无能为力了,它...

3009
来自专栏牛客网

CVTE安卓二面面经

一面: 1、Service两种启动方式有什么区别? 2、binder机制了解吗,说一下。怎么确定客户端调用的具体是哪一个方法?底层是怎么处理的? 3、四种引用 ...

35210
来自专栏数据和云

深入并行:从数据倾斜到布隆过滤深度理解Oracle的并行

陈焕生 Oracle Real-World Performance Group 成员,senior performance engineer,专注于 OLTP...

3159
来自专栏大数据智能实战

Spark Hbase读取操作的一些总结与测试

Spark连接HBase实现查询的操作有好多种步骤,其中常用的是直接调用Hbase本身提供的写入和读出的接口。 然而不少人在此基础上进行了各种封装,有的支持sp...

2687
来自专栏牛客网

美团java后台实习三面

美团一面(50分钟) 1、spring的理解。 1、项目相关 2、Redis缓存的应用 3、http解析的全过程 4、Java中的锁 5、Hashmap和con...

3928
来自专栏Hadoop实操

安装CDSW数据磁盘初始化异常问题分析

本文主要讲述基于Kerberos环境下的CDH5.13.1版本安装CDSW1.3.0数据磁盘初始化异常问题分析及解决办法。

1102

扫码关注云+社区