【问题标题】:Spark Hive table join strategySpark Hive 表连接策略
【发布时间】:2017-04-30 05:16:38
【问题描述】:

我有一个包含 140 亿条记录(大约 1TB 大小)的 Hive 表和另一个包含 8 亿条记录(2GB 大)的 Hive 表。我想加入他们,我的策略应该是什么? 我有一个 36 节点的集群。我正在使用 50 个执行程序,每个执行程序 30 GB。

据我所知,我的选择是:

  1. 广播 2 GB 表
  2. 只是盲目加入2张桌子(我已经这样做了,大约需要4个小时才能完成)

如果我重新分区两个表并加入它们,它会提高性能吗? 我观察到,在第二种方法中,最后 20 个任务非常慢,我希望它们正在处理具有更多数据(倾斜数据)的分区。

【问题讨论】:

  • 你看过提供的答案了吗?

标签: apache-spark apache-spark-sql


【解决方案1】:

如果您为每个工作人员提供足够的 RAM,则较小的表可以放入内存。在这种情况下,地图侧连接/侧数据方法可能很有用。

看看使用MapJoin提示:

SELECT /*+ MAPJOIN(b) */ a.key, a.value
FROM a JOIN b ON a.key = b.key

要点:

如果除了一个被连接的表之外所有的表都很小,连接可以是 仅作为地图作业执行。

有关其用法的更多详细信息,请参见此处:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins#LanguageManualJoins-MapJoinRestrictions

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多