贵阳网站建设管理,没人愿意干的68个暴利行业,西乡专业做网站公司,2021最近最火的关键词写文章只是为了学习总结或者工作内容备忘#xff0c;不保证及时性和准确性#xff0c;看到的权当个参考哈#xff01;
1. 执行Broadcast大表时#xff0c;等待超时异常#xff08;awaitResult#xff09;
现象#xff1a;org.apache.spark.SparkException: Exception…写文章只是为了学习总结或者工作内容备忘不保证及时性和准确性看到的权当个参考哈
1. 执行Broadcast大表时等待超时异常awaitResult
现象org.apache.spark.SparkException: Exception thrown in awaitResult:
java.util.concurrent.TimeoutException: Futures timed out after [300seconds] 原因分析当数据需要broacast到executor上时由于数据量较大 、broacast超时导致。
解决方案 设置spark.sql.autoBroadcastJoinThreshold-1 不broadcast小表直接走shuffle。弊端时间花费长影响较大
2.Task任务在写文件时发生管道中断关闭异常ClosedByInterruptException
现象Uncaught exception while reverting writes to file /data03/yarn/……………
java.nio.channels.ClosedByInterruptException 解决方案查看该Task任务是否是推测执行任务如果是属于正常现象不影响任务。
3.DiskBlockManager 在创建本地目录失败
现象Failed to create local dir in /data10/yarn/…………. 原因分析这个错误一般是磁盘满了或者要么是磁盘坏了。联系大数据平台运维人员。
4.SparkSQL访问HIVE表时找不到数据库或者元数据信息
现象org.apache.spark.sql.catalyst.analysis.NoSuchDatabaseException: Database XXXX not found;
解决方案Step 1查看hive的配置文件是否正确。 Step 2在Step 1 基础上查看是否存在该数据库。 Step 3查看SparkSession 创建方法是否启用了Hive支持。正确的创建SparkSession 如下图 5.使用wholeTextFiles读取文件时报非法参数异常
现象Java.lang.IllegalArgumentException:……………..wholeTextFiles…..CharBuffer.allocation……. 原因分析wholeTextFile不支持一次性读入大于1G的大文件因为是将整个文件内容变成一个Text对象而Text对象是有长度限制。
解决方案将单个大文件分割成多个小文件读取。
6.数据倾斜
现象为啥我有几个Task任务卡住不动已经很久了现象如下图 点到当前的stage Tab 中 效果图如下 原因分析典型的数据倾斜现象所有的task都已经完成了而正在运行的task任务超过了所有完成task时间中位数的1.5倍以上发生了数据倾斜现象。
解决方案1.如果是Spark sql 访问hive 表由于上游的某个hive文件过大导致需要避免上游的表落地时某个文件特别大。可以在sql后面添加distribute by rand() ; 并且适
当增大spark.sql.shuffle.partitions参数值。2需要从代码和业务逻辑上去处理数据倾斜
问题。参考https://www.cnblogs.com/hd-zg/p/6089220.html
7.TaskResultGetter在拉取block块的时候Executor丢失导致连接失败错误
现象org.apache.spark.shuffle.FetchFailedException:Failed to connection………….
或者出现Executor Lost 现象。 原因分析shuffle read的时候数据的分区数设置的很小同时shuffle read的量很大那么
将会导致一个task需要处理的数据非常大。结果导致JVM crash从而导致取shuffle数据失
败同时executor也丢失了看到Failed to connect to host的错误也就是executor lost的
意思。有时候即使不会导致JVM crash也会造成长时间的GC。
解决方案
1. 减少shuffle数据首先考虑使用map side join或是broadcast join来规避shuffle的产生。将不必要的数据在shuffle前进行过滤比如原始数据有20个字段只要选取需要的字段进行处理即可将会减少一定的shuffle数据。
2. 针对于spark sql : 通过spark.sql.shuffle.partitions控制分区数默认为40根据shuffle的量以及计算的复杂度提高这个值。
3. 针对RDD操作通过spark.default.parallelism控制shuffle read与reduce处理的分区数官方建议为设置成运行任务的executor的2-3倍。
4. 提高executor的内存通过spark.executor.memory适当提高executor的memory值。
8.Java 堆栈溢出错误
现象Java.lang.StackOverflowError 原因分析
代码中有这样一段逻辑示意
DatasetRow totalDS; // 总数据集
while (循环条件) { DatasetRow batchDS // 某种业务计算过程最后得到批次结果数据集; totalDS totalDS.union(batchDS); // 把这批次的结果合并到最终总结果中
}
// 最后用 totalDS 再去做计算
因为循环次数比较多大约200多次导致最后 totalDS 的 lineage 太长造成Spark计算时递归过深引发 StackOverflowError。
解决方案每循环20次就checkpoint保存一下检查点这样强制截断lineage结果就运行完了没有出问题。
9.在代码中设置Master为local模式实际提交模式为yarn-cluster导致SparkContext初始化失败
现象ERROR ApplicationMaster: SparkContext did not initialize after waiting for 100000 ms. Please check earlier log output for errors. Failing the application
解决方案去掉setMaster(local[*])
10.Executor由于某个正在运行的Task由于Executor内存使用超出限制导致Executor的Container被kill使得Executor退出
现象ExecutorLostFailure (executor 3 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 8.1 GB of 8 GB physical memory used
原因分析不合理的使用大量的cache 和 broadcast操作导致executor 在运行task任务时资源紧张。
解决方法尽量避免缓存过多的RDD 移除RDD缓存操作增加参数spark.storage.memoryFraction和spark.yarn.executor.memoryOverhead的值。适当增加executor的数量和内存。
11.driver RPC 超时
现象org.apache.spark.rpc.RpcTimeoutException: Cannot receive any reply in 120 seconds. This timeout is controlled by spark.rpc.askTimeout at org.apache.spark.rpc.RpcTimeout org.apache.spark.rpc.RpcTimeout.org$apache$spark$rpc$RpcTimeout$$createRpcTimeoutException(RpcTimeout.scala:48) at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:63)
原因分析导致driver RPC 超时有两个原因
1executor所在的节点宕掉了。
2运行在executor中的任务占用较大内存导致executor长时间GC心跳线程无法运行从而引起心跳超时。
引发这个问题可能是发生了数据倾斜导致stop the world。
解决方案若存在数据倾斜首先解决数据倾斜问题。适当增加executor数量和内存。避免长时间的GC。
12.SparkSql使用” $”代替col(),需要导入隐式转换 现象在scala 命令行模式 可以直接用$column_name的方式指定列数据 为什么sbt 打包的时候不能这么用还得import column使用col(column_name)来替代能用$ 代替 col吗需要怎么操作
解决方案import spark.implicits._导入
13.Python Spark 在生产线上提交任务报错command not find。
解决方案请参考如下脚本注意spark-submit的路径 14.提高SparkSQL在shuffle之后Task的并发度
现象明明有很多task但是在处理量大的时候只分配40个如何增加Task的数量。 解决方案适当的增加 --conf spark.sql.shuffle.partitions参数的值注意该参数只有存在shuffle行为下才能生效。
15.由于打包冲突导致的SparkContext启动失败问题 解决方案将spark相关依赖删掉然后用maven命令mvn clean package重新打包。
16.在SparkSQL中sql语句中存在着过长的计算表达式导致GeneratedIterator超过了规定的字节数
现象ERROR Thread-8 CodeGenerator: failed to compile: org.codehaus.janino.JaninoRuntimeException: Code of method agg_doAggregateWithoutKey$(Lorg/apache/spark/sql/catalyst/expressions/GeneratedClass$GeneratedIterator;)V of class org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator grows beyond 64 KB. 用户代码如下图所示 原因分析在SQL中拼凑循环累积计算某个表达导致GeneratedIterator超过了规定的字节数64K。
解决方案1.优化自身的表达式代码不要过长可以分开计算。 2.或者设置spark.sql.codegen.wholeStagefalse, 不适用codegen策略。
17.Spark在执行Task任务时发生OOM现象 现象Java.lang.OutOfMemoryError:Java heap space 原因分析如果处理的数据或者加载的数据很大driver或者executor内存可能不够出现上面的OOM错误。
解决方案仔细查看日志分清是driver端还是executor端OOM。先优化自身的代码检查思考是否有必要在driver端处理大量的数据有没有大量的cache或者broadcast操作如果存在cache或者broadcast操作去除该操作。适当的调大driver或者executor的内存大小。 19.在SparkSQL中SQL语句存在大量的嵌套语句导致Spark无法解析
现象org.apache.spark.sql.AnalysisException: unresolved operator Project
解决方案检查一下自己的sql是否嵌套太多的子查询语句导致spark无法解析所以需要修改sql或者改用其他方式处理注意该语句可能在hive里面没有错误但是在spark中会出错。
20.Task返回给driver的数据量超过了1G
现象Total size of serialized results of 2000 tasks (2048MB) is bigger than spark.maxResultSize(1024.0 MB)
原因分析ask返回给driver的数据量超过了规定的1G。
解决方案设置参数spark.driver.maxResultSize3G参数的大小根据业务的实际情况而定 。
21.IDE日志中一直显示“ACCEPTED”任务跑不动
现象
原因分析当前IDE系统的yarn队列资源暂时被占满。
解决方案Spark阻塞在(state :ACCEPTED)状态 22.SparkSQL中小文件数过多导致任务过慢
现象IDE日志中长时间出现如下内容可以如下所示 原因分析小文件数较多与Spark UI中的task数目相同长时间在重命名小文件所在目录
解决方案SQL最上方加参数set spark.sql.adaptive.repartition.enabledtrue并建议将中间临时表、目标表格式切换为DataSource表Spark DataSource表推广文档