mysql – Spark SQL / Hive查询永远加入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – Spark SQL / Hive查询永远加入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2250字,纯文字阅读大概需要4分钟。
内容图文
所以我做的事情应该很简单,但显然它不是在Spark SQL中.
如果我在MySQL中运行以下查询,查询将在几分之一秒内完成:
SELECT ua.address_id
FROM user u
inner join user_address ua on ua.address_id = u.user_address_id
WHERE u.user_id = 123;
但是,在Spark(1.5.1)下的HiveContext中运行相同的查询需要超过13秒.添加更多联接会使查询运行很长时间(超过10分钟).我不确定我在这里做错了什么以及如何加快速度.
这些表是作为临时表加载到Hive上下文中的MySQL表.这是在单个实例中运行,数据库在远程计算机上运行.
>用户表有大约480万行.
> user_address表有350,000行.
这些表具有外键字段,但在db中没有定义明确的fk关系.我正在使用InnoDB.
Spark中的执行计划:
计划:
Scan
JDBCRelation(jdbc:mysql://.user,[Lorg.apache.spark.Partition;@596f5dfc,
{user=, password=, url=jdbc:mysql://, dbtable=user})
[address_id#0L,user_address_id#27L]Filter (user_id#0L = 123) Scan
JDBCRelation(jdbc:mysql://.user_address,
[Lorg.apache.spark.Partition;@2ce558f3,{user=, password=,
url=jdbc:mysql://, dbtable=user_address})[address_id#52L]ConvertToUnsafe ConvertToUnsafe
TungstenExchange hashpartitioning(address_id#52L) TungstenExchange
hashpartitioning(user_address_id#27L) TungstenSort [address_id#52L
ASC], false, 0 TungstenSort [user_address_id#27L ASC], false, 0SortMergeJoin [user_address_id#27L], [address_id#52L]
== Physical Plan == TungstenProject [address_id#0L]
解决方法:
首先,您执行的查询类型效率极低.至于现在(Spark 1.5.0 *)执行这样的连接,每次执行查询时都必须对两个表进行混洗/散列分区.在用户表中,user_id = 123谓词最有可能被推下但仍需要在user_address上进行完全随机播放时,这应该不是问题.
此外,如果表只是注册而不是缓存,那么每次执行此查询都会将整个user_address表从MySQL获取到Spark.
I’m not sure what I’m doing wrong here and how I can speed things up.
目前尚不清楚为什么要将Spark用于应用程序,但单机设置,小数据和查询类型表明Spark不适合这里.
一般来说,如果应用程序逻辑需要单个记录访问,则Spark SQL将无法正常运行.它专为分析查询而设计,而不是作为OLTP数据库替代品.
如果单个表/数据帧小得多,您可以尝试广播.
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions.broadcast
val user: DataFrame = ???
val user_address: DataFrame = ???
val userFiltered = user.where(???)
user_addresses.join(
broadcast(userFiltered), $"address_id" === $"user_address_id")
*这应该在Spark 1.6.0中使用SPARK-11410进行更改,这应该启用持久表分区.
内容总结
以上是互联网集市为您收集整理的mysql – Spark SQL / Hive查询永远加入全部内容,希望文章能够帮你解决mysql – Spark SQL / Hive查询永远加入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。