spark日志查看方法
分享一个博客:https://blog.csdn.net/qq_33588730/article/details/109353336
异常集
1. org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow
原因:kryo序列化缓存空间不足。
解决方法:增加参数,--conf spark.kryoserializer.buffer.max=2047m。
2. org.elasticsearch.hadoop.rest.EsHadoopNoNodesLeftException: Connection error
原因:此时es.port可能为9300,因为ElasticSearch客户端程序除了Java使用TCP方式连接ES集群以外,其他语言基本上都是使用的Http方式,ES客户端默认TCP端口为9300,而HTTP默认端口为9200。elasticsearch-hadoop使用的就是HTTP方式连接的ES集群。
解决方法:可以将es.port设置为 9200。
3. Error in query: nondeterministic expressions are only allowed in Project, Filter, Aggregate or Window, found
解决方法:如果是SparkSQL脚本,则rand()等函数不能出现在join...on的后面。
4. driver端日志中频繁出现:Application report for application_xxx_xxx (stage: ACCEPTED)
解决方法:通过yarn UI左侧的“Scheduler”界面,搜索自己任务提交的yarn队列,查看资源是否用完,与同队列同事协调资源的合理使用,优化资源使用量不合理的任务,如下所示:
5. Spark任务数据量过大(如上百亿条记录)跑不过去
原因:数据量过大导致executor内存扛不住那么多数据。
解决方法:增加参数,--conf spark.shuffle.spill.numElementsForceSpillThreshold=2000000,将过量数据写入到磁盘中。
6. user clas threw exeception:ml.dmlc.xgboost4j.java.XGBoostError:XGBoostModel trained failed, caused by Values to assemble cannot be null
原因:机器学习训练数据中有为null的地方。
解决方法:把数据中有null的地方去掉,或对null值先进行预处理再训练。
7. Caused by: org.apache.spark.sql.catalyst.parser.ParseException: Datatype void is not supported
原因:Spark不支持Hive表中的void字段类型,代码中临时create的Hive表中,如果from的源表中某字段为全空值,则create table时该临时表的这个字段类型就会变成void。
解决方法:如果是上面这种情况,可以用Hive跑任务或者修改该Hive表的字段类型不为void,或将null转换为string等。
8. ERROR SparkUI: Failed to bind SparkUI java.net.BindException: Address already in use: Service failed after 16 retries
原因:Spark UI端口绑定尝试连续16个端口都已被占用
解决方法:可以把spark.port.maxRetries参数调的更大如128。
9. Error in Query: Cannot create a table having a column whose name contains commas in Hive metastore
解决方法:查看SparkSQL脚本中是否存在类似于“round(t1.sim_score , 5)”这种以函数结果作为字段值的语句,后面如果没加“as”别名会导致该错误。
10. Fail to send RPC to ...
原因:数据量过大超出默认参数设置的内存分配阈值,container会被yarn杀掉,其他节点再从该节点拉数据时,会连不上。
解决方法:可以优化代码将过多的连续join语句(超过5个)拆分,每3个左右的连续join语句结果生成一个临时表,该临时表再和后面两三个连续join组合,再生成下一个临时表,并在临时表中提前过滤不必要的数据量,使多余数据不参与后续计算处理。只有在代码逻辑性能和参数合理的前提下,最后才能增加--executor-memory、--driver-memory等资源,不能本末倒置。
未完待续。。。