Apache Spark:使用结构化数据好吗
Apache Spark : Is it good to use structured data
一个查询,我在 Mysql 中有两个更大的表 A (40 GB) 和 B(70 GB),我经常需要从两个 table 加入。我不在查询中使用连接,因为它从来没有 returns 结果。请考虑所有 table 都已编入索引。
我从 table A 中获取数据,然后使用该数据在 table B 中找到匹配的记录块。我进一步处理这个连接数据。整个过程需要时间,这取决于我做了多少处理。
我知道Spark也可以用于分布式计算
问题 1:如果我将此数据放入 HDFS,然后通过集群中有 5 个节点的 apache spark 处理它,可以更快地得到结果吗?我想答案是肯定的。
问题 2:将结构化数据(从 MySql)更改为 HDFS 是否是一种好的方法?
Am I going to get a faster result?
它取决于!
你看distributed-computing makes sense only when dealing with bigdata。如果数据不够大,那么通信成本和作业调度将支配执行时间,导致执行时间比串行慢执行!
当然,如果您可以利用多个 machines/nodes,这会对您的应用程序产生良好的影响,因为正如所讨论的,您的数据对于 MySQL.[=15 来说并不是那么大=]
因此,如果您的机器无法自行解决这些问题,则将您的机器设置为主机集群,并将虚拟机作为从机,例如根本不会提供任何加速,它会事实上,很可能会慢一些!
Do I have to put my MySQL data to HDFS?
不是真的!
您可以通过 jbdc 格式使用 mySqlContext
,如以下所述:How to work with MySQL and Apache Spark?
150 场演出对 MySQL 来说并不算多。如果您的计算机无法处理连接,Spark 将不会帮助您。你可以把数据上传到google bigtable 或者amazon relation data store 试试看。否则,您可以通过连接两个 table 来创建 table #3。确保您加入的列已编入索引。
这取决于你想做什么。
是的,Spark非常擅长处理结构化数据,请阅读DataFrames。您可以对您的数据编写 SQL 查询,该查询将被优化并转换为 RDD 调用。
但这在很大程度上取决于你在做什么。
来自网站的实时查询,即更新订单、更新客户 -> 对不起,在我看来 Spark 将是一项开销。使用索引优化 MySQL 应该足够了。对于实时缓存,请查看网格,例如 Oracle Coherence、GridGain/Apache Ignite、Hazelcast。
报告和分析,包括批处理、流式分析 window 和即席分析 -> Spark 很棒,可以加快您的工作。
- 用于分析服务的 ETL -> 同样,Spark 将是加速作业的好工具。一家公司(对不起,我不能在 public 中告诉你名字)为他的客户编写了 ETL 过程,而不是使用旧工具的 6 小时,现在 ETL 持续时间为 15 分钟。只是从数据库中批量读取,一些准备,转换,分组并放入仓库数据库。但是,客户必须为集群和维护工具付费。在那种情况下,与他们可能赚到的钱相比,这个成本非常低。
Spark 可以读取 MySQL。但是,如果您只是进行批处理分析,我建议您每天将数据转储到 HDFS 上。它将减少查询数量并加载到 MySQL 数据库。
一个查询,我在 Mysql 中有两个更大的表 A (40 GB) 和 B(70 GB),我经常需要从两个 table 加入。我不在查询中使用连接,因为它从来没有 returns 结果。请考虑所有 table 都已编入索引。
我从 table A 中获取数据,然后使用该数据在 table B 中找到匹配的记录块。我进一步处理这个连接数据。整个过程需要时间,这取决于我做了多少处理。
我知道Spark也可以用于分布式计算
问题 1:如果我将此数据放入 HDFS,然后通过集群中有 5 个节点的 apache spark 处理它,可以更快地得到结果吗?我想答案是肯定的。
问题 2:将结构化数据(从 MySql)更改为 HDFS 是否是一种好的方法?
Am I going to get a faster result?
它取决于!
你看distributed-computing makes sense only when dealing with bigdata。如果数据不够大,那么通信成本和作业调度将支配执行时间,导致执行时间比串行慢执行!
当然,如果您可以利用多个 machines/nodes,这会对您的应用程序产生良好的影响,因为正如所讨论的,您的数据对于 MySQL.[=15 来说并不是那么大=]
因此,如果您的机器无法自行解决这些问题,则将您的机器设置为主机集群,并将虚拟机作为从机,例如根本不会提供任何加速,它会事实上,很可能会慢一些!
Do I have to put my MySQL data to HDFS?
不是真的!
您可以通过 jbdc 格式使用 mySqlContext
,如以下所述:How to work with MySQL and Apache Spark?
150 场演出对 MySQL 来说并不算多。如果您的计算机无法处理连接,Spark 将不会帮助您。你可以把数据上传到google bigtable 或者amazon relation data store 试试看。否则,您可以通过连接两个 table 来创建 table #3。确保您加入的列已编入索引。
这取决于你想做什么。
是的,Spark非常擅长处理结构化数据,请阅读DataFrames。您可以对您的数据编写 SQL 查询,该查询将被优化并转换为 RDD 调用。
但这在很大程度上取决于你在做什么。
来自网站的实时查询,即更新订单、更新客户 -> 对不起,在我看来 Spark 将是一项开销。使用索引优化 MySQL 应该足够了。对于实时缓存,请查看网格,例如 Oracle Coherence、GridGain/Apache Ignite、Hazelcast。
报告和分析,包括批处理、流式分析 window 和即席分析 -> Spark 很棒,可以加快您的工作。
- 用于分析服务的 ETL -> 同样,Spark 将是加速作业的好工具。一家公司(对不起,我不能在 public 中告诉你名字)为他的客户编写了 ETL 过程,而不是使用旧工具的 6 小时,现在 ETL 持续时间为 15 分钟。只是从数据库中批量读取,一些准备,转换,分组并放入仓库数据库。但是,客户必须为集群和维护工具付费。在那种情况下,与他们可能赚到的钱相比,这个成本非常低。
Spark 可以读取 MySQL。但是,如果您只是进行批处理分析,我建议您每天将数据转储到 HDFS 上。它将减少查询数量并加载到 MySQL 数据库。