我有一个处理几百GB数据的脚本,当我尝试处理500gb以上时,我遇到了麻烦,低于这一切,它的工作正常。 首先调试应用程序我得到了关于超过spark.driver.maxResultSize值限制的错误,所以我将此值增加到4g并且现在失败的任务正在运行,但是,现在我有另一个问题,当我尝试要将结果保存到镶木地板文件中,任务失败并抛出此错误
17/01/27 06:35:27 INFO DAGScheduler: Job 7 failed: parquet at NativeMethodAccessorImpl.java:-2, took 12.106390 s
17/01/27 06:35:27 ERROR InsertIntoHadoopFsRelation: Aborting job.
org.apache.spark.SparkException: Job aborted due to stage failure: Serialized task 146:0 was 765207245 bytes, which exceeds max allowed: spark.akka.frameSize (134217728 bytes) - reserved (204800 bytes). Consider increasing spark.akka.frameSize
所以,似乎我需要增加spark.akka.frameSize值
我的问题是,我已经使用函数sparkConf()。set增加了maxResultSize,但我不知道如何(或语法)增加sparkConf()。set中的两个值。
这就是我在这些部分中的代码的外观:
conf = (SparkConf().set("spark.driver.maxResultSize", "4g"))
sc = SparkContext(conf=conf)
sqlContext = HiveContext(sc)
任务失败了:
sqlContext.sql(sql).coalesce(5).write.parquet(sys.argv[3], mode='overwrite')
只有一件事,我无法修改spark集群中的conf文件,而且,我们使用luigi将任务提交给spark,因此我暂时无法修改spark-submit字符串脚本的执行(这就是我直接从脚本修改参数的原因)
感谢任何指导。
答案 0 :(得分:1)
RTFM - 直接来自Spark 1.6.3 Python API documentation ...
class pyspark。 SparkConf (...)
此类中的所有setter方法都支持链接。
For 例如,您可以编写conf.setMaster"local").setAppName("My app")