pythonspark任务_Spark-Spark任务中的常见错误

记录遇到过的Spark各种错误

1. Too many open files

linux 中 一切皆文件, Too many open files 有可能是file, 也有可能是socket。 在这里一般是file, 在HDP集群上, 需要在ulimit里设置最大文件打开数量。 一般建议设置为10240 , 默认是1024 。

2. OOM

Spark需要有两个关于memory相关的设置项

spark.drive.memory

spark.execute.memory

一般如果经常需要collect() 等拉回数据到drive的话, spark.drive.memory 的内存需要设置的大点,不过受单机限制, 不能超过单机最大内存

如果遇到execute oom的话, 一般是spark.execute.memory设置过小, 而分配到每个execute的数据量又太大, 或者数据倾斜, 造成某一个execute的数据量太大, 这里有集中解决方法。

1) repartition或者coalesce 将分区降低

2) 增大spark.execute.memory (可增加core数量)

3) 控制reduce参数 set mapred.reduce.tasks=10

3. filter后数据倾斜

解决方法

使用coalesce 降低分区, 并设置 shuffer=Ture

4. join速度慢

如果是大表join小表

解决方法:将小表设置为广播变量, 使用udf进行join

tiny_table = spark.sc.boardcast(tiny_table)

def udf_join_table(big_table_data):

return tiny_table.value[big_table_data]

5.shuffle FetchFailedException

org.apache.spark.shuffle.FetchFailedException:

org.apache.spark.shuffle.MetadataFetchFailedException:

Missing an output location for shuffle 0

解决方法:这种问题一般发生在有大量shuffle操作的时候,task不断的failed,然后又重执行,一直循环下去,直到application失败。

一般遇到这种问题提高executor内存即可,同时增加每个executor的cpu,这样不会减少task并行度。

6. driver.maxResultSize太小

Caused by: org.apache.spark.SparkException:

Job aborted due to stage failure: Total size of serialized

results of 374 tasks (1026.0 MB) is bigger than

spark.driver.maxResultSize (1024.0 MB)

解决方法:spark.driver.maxResultSize默认大小为1G 每个Spark action(如collect)所有分区的序列化结果的总大小限制,简而言之就是executor给driver返回的结果过大,报这个错说明需要提高这个值或者避免使用类似的方法,比如countByValue,countByKey等。

将值调大即可

spark.driver.maxResultSize 2g

找不到python

java.io.UIException: Cannot run program "python2.7": error=2,没有那个文件或目录

解决方法:execute环境变量问题 查看在环境变量中是否有python2.7

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值