今天一个生产环境任务出现了性能问题,,经过仔细检查发现是在一个join操作时,原设定广播右表数据广播失败,导致后续步骤进行缓慢,,报错信息

java.io.IOException: org.apache.spark.SparkException:Failed to get broadcast_544_piece0 of broadcast_544

 源代码大概是这个样子(变量全部用xx、yy代替了,不影响整个结构)

    val Site = draftedSite.join(broadcast(toSite), Seq("joinCon"))
.withColumn("xxx", distanceUDF($"yy", $"yy", $"yy", $"yy"))
.withColumn("xxx", defineSiteDistanceUDF($"yy", $"yy", $"yy", $"yy"))
.filter("xx> 0 and xx< yy")
.withColumn("deleteSite", expr(
"""
|case
|when xx!= xx then if (xx< xx, xx, xx)
|when xx!= xx then if(xx< xx, xx, xx)
|else if(xx> xx, xx, xx)
|end
""".stripMargin)).repartition(xx).cache()

一开始查询网上,大致都是一种说法,类似https://issues.apache.org/jira/browse/SPARK-5594中的sparkContect中的残留信息数据导致不成功,这明显不是我这个问题,我每次都是新起动一个sparkContect的。

后来公司的大神看了这段代码之后,指出 可能是repartition导致的广播失败,去掉repartition(xx),之后任务成功执行。

    在key值不够的情况下,强制repartition可能会导致生成一部分空分区,空分区导致了广播的失败。

    另外在数据量不定的情况下不建议使用强制广播,建议将tosite注册为临时表之后cache,有spark根据数据量自动判断是否广播

最终修改之后结果如下:

    toSite.createOrReplaceTempView("temp")
spark.catalog.cacheTable("temp")
val temp= spark.sql("select * from temp") val Site = draftedSite.join(toSite, Seq("joinCon"))
.withColumn("xxx", distanceUDF($"yy", $"yy", $"yy", $"yy"))
.withColumn("xxx", defineSiteDistanceUDF($"yy", $"yy", $"yy", $"yy"))
.filter("xx> 0 and xx< yy")
.withColumn("deleteSite", expr(
"""
|case
|when xx!= xx then if (xx< xx, xx, xx)
|when xx!= xx then if(xx< xx, xx, xx)
|else if(xx> xx, xx, xx)
|end
""".stripMargin)).cache()

repartition导致的广播失败,关于错误Failed to get broadcast_544_piece0 of broadcast_544的更多相关文章

  1. 因为错误关闭Selinux导致CentOS7启动失败(进度条卡死,图形界面加载卡死)

    我在CentOS7上安装oracle,非常麻烦,搞半天终于安装完毕,当天我没有发现任何问题,第二天上班打开虚拟机CentOS7就进不去了. 我想起来之前关闭了Selinux,把系统名称改成了redha ...

  2. 使用不同用户对Oracle数据库进行异机恢复,失败,错误:Backup file not found in NetBackup catalog

    最近做某数据库恢复演练,数据库版本是10.2.0.4,恢复控制文件一直报错,报错如下,经过反复折腾,原来恢复机上oracle用户不是oracle导致(我的是oraclev4),查看源库oracle用户 ...

  3. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.2.Oracleasm Createdisk ASM磁盘失败:Instantiating disk: failed

    1.错误信息:Instantiating disk: failed [root@linuxrac1 /]# /usr/sbin/oracleasm createdisk OCR_VOTE /dev/s ...

  4. flume 集群datanode节点失败导致hdfs写失败(转)

    来自:http://www.geedoo.info/dfs-client-block-write-replace-datanode-on-failure-enable.html 这几天由于杭州集群处于 ...

  5. SQLServer 2012异常问题(一)--故障转移群集+镜像环境导致作业执行失败

    原文:SQLServer 2012异常问题(一)--故障转移群集+镜像环境导致作业执行失败 先感谢一下我的同事们最先发现此问题,鸣谢:向飞.志刚.海云 最近在生产环境发现一个诡异的问题: 环境:WIN ...

  6. 【常见踩坑】USB调试安装失败(Installation failed with message INSTALL_CANCELED_BY_USER)

    一.写在前面 最近一直在忙活着项目重构,忙活了一个多月(那是天天加班,不分昼夜呀,ps:这不是我司要求的哈),终于把沉积了三四年的老项目给重构了,目前在测试阶段,也总算有了点闲时来跟大家分享分享一些问 ...

  7. 【转载】Sqlserver强制密码过期导致数据库登录失败

    Sqlserver在设置登录账户信息的时候,有个复选框信息会被默认勾上,即强制实施密码策略,默认勾选上的还有强制密码过期.如果勾上了这个强制密码过期后,则你的账户密码在一定时间登录后会提示Sqlser ...

  8. adb remount 失败:remount failed: Operation not permitted

    adb remount 失败:remount failed: Operation not permitted     关于ADB的使用,这里再说明下:经常使用命令 adb shell - 登录设备sh ...

  9. 阿里云SLB漏选“健康检查正常的http状态码”导致url重定向失败问题处理

    背景:           一客户将线下电商网站迁移到阿里云上,公网出口使用阿里云SLB,SLB后端实例为ECS(webserver)web服务使用nginx.后端APP服务器使用了tomcat:to ...

随机推荐

  1. dotnet C# 给结构体字段赋值非线程安全

    在 dotnet 运行时中,给引用对象进行赋值替换的时候,是线程安全的.给结构体对象赋值,如果此结构体是某个类的成员字段,那么此赋值不一定是线程安全的.是否线程安全,取决于结构体的大小,取决于此结构体 ...

  2. Redis详解(三)——

    redis https://www.cnblogs.com/zhangyinhua/p/14504717.html

  3. git01_常用命令

    git与github介绍 Git是什么 Git是一个开源的[分布式][版本控制系统],用于敏捷高效地处理任何或小或大的项目 版本控制器 CVS/SVN/Git SVN 客户端/服务器 GIT 客户端/ ...

  4. Django——session保持登录

    Django操作session语法: # 1.设置Sessions值 request.session['session_name'] ="admin" # 2.获取Sessions ...

  5. Python - 面向对象编程 - 实战(6)

    需求 设计一个培训机构管理系统,有总部.分校,有学员.老师.员工,实现具体如下需求: 有多个课程,课程要有定价 有多个班级,班级跟课程有关联 有多个学生,学生报名班级,交这个班级对应的课程的费用 有多 ...

  6. Jenkins(4)- 在centos7.x下完全卸载Jenkins

    如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html 先关闭tomcat ./shutd ...

  7. Linux常用命令 - tail命令详解

    21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 实时刷 ...

  8. Spring AOP 事务配置(实现转账事务)

    1. 事务特性 事务特性:ACID 原子性:整体 [原子性是指事务包含的所有操作要么全部成功,要么全部失败] 一致性:数据 [一个事务执行之前和执行之后都必须处于一致性状态] 隔离性:并发 [对于任意 ...

  9. vue开发流程

    在安装node.js 测试安装  在cmd 下输入node   如查能正确输出命令提示符,表明安装好node 测试安装npm -v   如果能成功出现版本信息表示安装好npm 安装配置 G码云   或 ...

  10. Java中short和int的转换

    例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1 ...