跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 一个 spark 计算任务需要对两张大表做 join 操作,有什么解决方案么
未分類
19 5 月 2020

一个 spark 计算任务需要对两张大表做 join 操作,有什么解决方案么

一个 spark 计算任务需要对两张大表做 join 操作,有什么解决方案么

資深大佬 : fdgdbr 2

比如说计算 sql 是 select * from table_a left join table_b on a.id=b.id
其中 table_a 和 table_b 的数据量都很大,几亿到几十亿的数量。直接把上面的 sql 扔给 spark 算的话,架构师跟我说内存会爆,即使用集群也会爆,那有什么解决方案吗
大佬有話說 (7)

  • 資深大佬 : enrio

    可以先将数据集进行切分,比如第一次只要”a”开头的 id,第二次只要”b”开头的,以此类推。你可以有各种各样的方法将数据缩小到一个集群能负担的量级。
    再一个使用 id 作为 key,将数据分到各个结点上去,这样 Shuffle 也不严重,数据都是在节点内部进行 join 。
    对 Spark SQL 不算太了解,不知道它内部会如何进行转化。

  • 資深大佬 : levelworm

    我琢磨着把大的那张表拆分然后一点点和另外一张 join 可以吗?

  • 資深大佬 : bsidb

    Spark 2.x 系列中 Spark SQL 的内部实现已经挺优化的,数据量特别大的情况下,如果内存不够会自动利用磁盘。如果数据量特别大,可以在程序中设置 SparkConf 的 spark.sql.shuffle.partitions 选项,将 partition 数量设置调高(默认是 200 ),这样每个 partition 的数据量就比较小,不会撑爆内存。

  • 資深大佬 : SmiteChow

    驱动表优化

  • 資深大佬 : SmiteChow

    如果没有优化的条件就自己手动创造,例如按照时间手动分批 join,用时间换空间

  • 資深大佬 : MarsBar

    首先你 ab 两个表有多少字段 每个字段大概有多大
    你的 join 结果需要全部的字段(*)吗 还是只需要一些
    这些都会影响到你最后的性能

    如同 @bsidb 所说 spark2.x 现在都优化过了 只要不是 cartesian join 正常的集群应该都是能 handle 的住的

  • 資深大佬 : sonice

    不带时间窗口的吗?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具