【发布时间】:2017-10-21 23:19:42
【问题描述】:
我正在使用spark.wholeTextFiles() 处理一个 400MB 的文件,并且我不断出现内存不足错误。我首先将这个 API 与一个总共有 40MB 的文件文件夹一起使用,我想知道我的代码是否适用于大文件,这就是大文件的来源。
这是配置,我想我为堆提供了足够的 RAM,但仍然没有运气,我只是在读取文件夹,然后用
写下来files.saveAsTextFile("data/output/no")
命令是
spark-submit --driver-memory 4G --driver-java-options -Xms4096m --executor-memory 4G 目标/scala-2.11/mz_2.11-1.0.jar
我比较了 spark sql,sc.hadoopFile 和 sc.wholeTextFiles 和 wholeTextFiles 是最快的,我认为这是因为 wholeTextFiles 试图将整个文件夹加载到一个节点的内存中,主节点我想一切都发生在 RAM 上,所以它很快。
HadoopFile() 按分区加载,与文件数量一样多,即使文件很小且此读取操作代价高昂。
spark sql 将文件夹加载到分区,分区大小可以用
定义spark.conf.set("spark.sql.files.maxPartitionBytes", 32000000)
但如果文件很小,将文件收费到每个分区需要时间。
第一季度。为什么我总是出现内存不足错误?
第二季度。当火花按分区加载文件夹/大文件并返回RDD时,如何 许多分区已被读入RAM?也许不是,火花等待 action 加载与 执行者(或核心?)每次处理?在那种情况下,也许我们应该 加载像 64MB 或 128MB 这样的大分区,而不是像这样的小分区 32kb?
【问题讨论】:
标签: apache-spark jvm out-of-memory apache-spark-sql