Apache Spark:使用结构化数据是否合适

时间:2016-09-04 02:58:16

标签: mysql apache-spark hdfs distributed-computing bigdata

一个查询,我在Mysql中有两个较大的表A(40 GB)和B(70 GB),我经常需要从两个表中加入。我不使用连接查询,因为它永远不会返回结果。请考虑所有表格都已编入索引。

我从表A中获取数据,而不是使用该数据,我在表B中找到了块中的匹配记录。我进一步处理这个连接的数据。整个过程需要时间,具体取决于我的处理量。

我知道Spark也可以用于分布式计算。

问题1:如果我把这些数据放到HDFS上并通过apache处理它,那么群集中有5个节点可以给我一个更快的结果吗?我认为答案是肯定的。

问题2:将结构化数据(从MySql)更改为HDFS是否可以被视为一种好方法?

3 个答案:

答案 0 :(得分:2)

对于MySQL来说,150演出并不是那么多。如果您的计算机无法处理连接,Spark将无法帮助您。您可以将数据上传到Google bigtable或亚马逊关系数据存储并试用。否则,您可以通过连接两个表来创建表#3。确保索引要加入的列。

答案 1 :(得分:1)

这取决于你想做什么。

是的,Spark非常善于处理结构化数据,请阅读有关DataFrames的信息。您可以对数据编写SQL查询,这些查询将被优化并转换为RDD调用。

但这取决于你在做什么。

  1. 来自网站的实时查询,即更新订单,更新客户 - >对不起,在我看来,Spark将是一个开销。使用索引优化MySQL应该足够了。对于实时缓存,请查看网格,例如Oracle Coherence,GridGain / Apache Ignite,Hazelcast。

  2. 报告和分析,批量,流式分析在一些时间窗口和特殊分析 - > Spark会很棒,可以加快你的工作。

  3. 分析服务的ETL - >再次,Spark将成为加速工作的好工具。一家公司(抱歉,我不能公开告诉你的名字)为他的客户写了ETL过程,而不是使用旧工具6小时,现在ETL持续时间是15分钟。只需批量读取数据库,进行一些准备,转换,分组并放入仓库数据库。但是,客户必须为群集和维护工具付费。在这种情况下,与他们可以赚取的潜在资金相比,这个成本非常低。
  4. Spark可以从MySQL读取。但是,如果您只进行批量分析,我建议您每天在HDFS上转储数据。它将减少查询次数并加载到MySQL数据库。

答案 2 :(得分:0)

  

我会得到更快的结果吗?

取决于

您看到仅在处理时才有意义。如果数据不够大,那么通信成本作业调度将占据执行时间,导致执行时间比串行执行时慢!

当然,如果您可以使用多个计算机/节点,这会对您的应用程序产生很好的影响,因为正如所讨论的那样,您的数据对于MySQL来说并不是那么大。

因此,如果你的机器无法自己解决它们,设置一个集群,你的机器作为主机,而虚拟机作为一个从机就不会提供任何加速,事实上,最有可能的是,慢一点!

  

我是否必须将MySQL数据存入HDFS?

不是真的!

您可以通过jbdc格式使用mySqlContext,如下所述:How to work with MySQL and Apache Spark?