首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的BroadcastHashJoin在星火中比ShuffledHashJoin慢

为什么我的BroadcastHashJoin在星火中比ShuffledHashJoin慢
EN

Stack Overflow用户
提问于 2015-12-07 16:59:59
回答 1查看 2.8K关注 0票数 5

我在星火中使用javaHiveContext执行一个连接。

这张大桌子是1,76 is,有1亿张唱片。

第二张表是273兆美元,有1000万记录。

我得到一个JavaSchemaRDD,然后在上面调用count()

代码语言:javascript
复制
String query="select attribute7,count(*) from ft,dt where ft.chiavedt=dt.chiavedt group by attribute7";

JavaSchemaRDD rdd=sqlContext.sql(query);

System.out.println("count="+rdd.count());

如果我强制一个broadcastHashJoin (SET spark.sql.autoBroadcastJoinThreshold=290000000),并在具有8核和20 it内存的5个节点上使用5个执行器,它将在100秒内执行。如果我不强制广播,它将在30秒内执行。

注:表存储为Parquet文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-07 19:26:00

问题的根源很可能是广播成本。为了简单起见,让我们假设在较大的RDD中有1800 in,在较小的RDD中有300 in。假设有5个执行器而以前没有分区,那么所有数据中的五分之一应该已经在正确的机器上了。在标准连接的情况下,它的洗牌容量为1700 of。

对于广播连接,必须将较小的RDD传输到所有节点。这意味着大约1500 be的数据将被传输。如果您添加了所需的与驱动程序的通信,这意味着您必须以一种更昂贵的方式移动相当数量的数据。必须首先收集经广播的数据,然后才能将数据转发给所有工人。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34139049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档