一个 spark 计算任务需要对两张大表做 join 操作,有什么解决方案么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fdgdbr
V2EX    程序员

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

  •  
  •   fdgdbr 2020-05-21 18:12:56 +08:00 3657 次点击
    这是一个创建于 2019 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如说计算 sql 是 select * from table_a left join table_b on a.id=b.id
    其中 table_a 和 table_b 的数据量都很大,几亿到几十亿的数量。直接把上面的 sql 扔给 spark 算的话,架构师跟我说内存会爆,即使用集群也会爆,那有什么解决方案吗
    7 条回复    2020-05-22 14:03:18 +08:00
    enrio
        1
    enrio  
       2020-05-21 18:46:22 +08:00
    可以先将数据集进行切分,比如第一次只要"a"开头的 id,第二次只要"b"开头的,以此类推。你可以有各种各样的方法将数据缩小到一个集群能负担的量级。
    再一个使用 id 作为 key,将数据分到各个结点上去,这样 Shuffle 也不严重,数据都是在节点内部进行 join 。
    对 Spark SQL 不算太了解,不知道它内部会如何进行转化。
    levelworm
        2
    levelworm  
       2020-05-21 21:18:02 +08:00 via Android
    我琢磨着把大的那张表拆分然后一点点和另外一张 join 可以吗?
    bsidb
        3
    bsidb  
       2020-05-22 08:41:15 +08:00
    Spark 2.x 系列中 Spark SQL 的内部实现已经挺优化的,数据量特别大的情况下,如果内存不够会自动利用磁盘。如果数据量特别大,可以在程序中设置 SparkConf 的 spark.sql.shuffle.partitions 选项,将 partition 数量设置调高(默认是 200 ),这样每个 partition 的数据量就比较小,不会撑爆内存。
    SmiteChow
        4
    SmiteChow  
       2020-05-22 10:50:57 +08:00
    驱动表优化
    SmiteChow
        5
    SmiteChow  
       2020-05-22 10:57:02 +08:00
    如果没有优化的条件就自己手动创造,例如按照时间手动分批 join,用时间换空间
    MarsBar
        6
    MarsBar  
       2020-05-22 11:07:13 +08:00
    首先你 ab 两个表有多少字段 每个字段大概有多大
    你的 join 结果需要全部的字段(*)吗 还是只需要一些
    这些都会影响到你最后的性能

    如同 @bsidb 所说 spark2.x 现在都优化过了 只要不是 cartesian join 正常的集群应该都是能 handle 的住的
    sonice
        7
    sonice  
       2020-05-22 14:03:18 +08:00
    不带时间窗口的吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5236 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 08:11 PVG 16:11 LAX 00:11 JFK 03:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86