来自apache-spark-makes-slow-mysql-queries-10x-faster
对于长时间运行(即报告或BI)查询,它可以更快一些,因为Spark是一个大规模并行系统。MySQL每个查询只能使用一个CPU核心,而Spark可以在所有集群节点上使用所有核心。在下面的示例中,MySQL查询在Spark中执行,运行速度是MySQL数据的5-10倍(在相同的MySQL数据之上)。
它看起来很棒,但我无法考虑查询的实际示例,在这个示例中,查询可以被划分为子查询,而多核van可以使它更快,而不是在一个核心上运行它?
发布于 2017-06-09 14:37:33
假设我们有两个表、客户和订单,每个表都有1亿条记录。
现在,我们必须在customer_id列的Customer和Order表中加入这两个表,以生成一个报告,这几乎是不可能的-- MySQL,因为单个系统必须对大量的数据执行这个连接。
在星区集群上,我们可以根据联接列重新划分这些表。现在,通过散列customer_id来分发这两个数据的数据。因此,这意味着orders和customers表都拥有火花的同一个工作节点中单个客户的所有数据,并且它可以执行本地连接,如下面的代码段所示。
val customerDf = //
val orderDf = //
val df1 = customerDf.repartition($"customer_id")
val df2 = orderDf.repartition($"customer_id")
val result df1.join(df2).on(df1("customer_id") == df2("customer_id")) 因此,这个1亿条记录连接现在在几十个或数百个工作节点上并行执行,而不是在一个节点上执行,就像在MySQL中那样。
https://stackoverflow.com/questions/44459346
复制相似问题