一个查询,我在Mysql中有两个较大的表A(40 GB)和B(70 GB),我经常需要从两个表中加入。我不使用连接查询,因为它永远不会返回结果。请考虑所有表格都已编入索引。
我从表A中获取数据,而不是使用该数据,我在表B中找到了块中的匹配记录。我进一步处理这个连接的数据。整个过程需要时间,具体取决于我的处理量。
我知道Spark也可以用于分布式计算。
问题1:如果我把这些数据放到HDFS上并通过apache处理它,那么群集中有5个节点可以给我一个更快的结果吗?我认为答案是肯定的。
问题2:将结构化数据(从MySql)更改为HDFS是否可以被视为一种好方法?
答案 0 :(得分:2)
答案 1 :(得分:1)
这取决于你想做什么。
是的,Spark非常善于处理结构化数据,请阅读有关DataFrames的信息。您可以对数据编写SQL查询,这些查询将被优化并转换为RDD调用。
但这取决于你在做什么。
来自网站的实时查询,即更新订单,更新客户 - >对不起,在我看来,Spark将是一个开销。使用索引优化MySQL应该足够了。对于实时缓存,请查看网格,例如Oracle Coherence,GridGain / Apache Ignite,Hazelcast。
报告和分析,批量,流式分析在一些时间窗口和特殊分析 - > Spark会很棒,可以加快你的工作。
Spark可以从MySQL读取。但是,如果您只进行批量分析,我建议您每天在HDFS上转储数据。它将减少查询次数并加载到MySQL数据库。
答案 2 :(得分:0)
我会得到更快的结果吗?
取决于!
您看到distributed-computing仅在处理bigdata时才有意义。如果数据不够大,那么通信成本和作业调度将占据执行时间,导致执行时间比串行执行时慢!
当然,如果您可以使用多个计算机/节点,这会对您的应用程序产生很好的影响,因为正如所讨论的那样,您的数据对于MySQL来说并不是那么大。
因此,如果你的机器无法自己解决它们,设置一个集群,你的机器作为主机,而虚拟机作为一个从机就不会提供任何加速,事实上,最有可能的是,慢一点!
我是否必须将MySQL数据存入HDFS?
不是真的!
您可以通过jbdc格式使用mySqlContext
,如下所述:How to work with MySQL and Apache Spark?