我正在运行一个处理某些日志文件的本地spark作业。由于每个月的日志需要单独处理,我会进行多次处理。只需一次处理一个月,一切都很顺利。即使是3-4循环也能完成。但除此之外我还会出现内存错误:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f4e506c7000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f4e29ee7000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)
12288 bytes for committing reserved memory.
./runspark.sh: line 1: 6222 Aborted (core dumped)
我正在执行这项工作:
spark-submit --driver-memory=12g run.py
run.py
类似于:
from pyspark import SparkConf, SparkContext
def do(sc, i):
rdd = sc.binaryFiles("cache/{}".format(i))
rdd1 = rdd.filter(...).map(...)
rdd2 = rdd.filter(...).map(...)
rdd1.persist()
rdd2.persist()
...
<processing>
...
rdd1.unpersist()
rdd2.unpersist()
if __name__ == "__main__":
conf = SparkConf.setMaster("local[*]")
sc = SparkContext(conf)
for i in range(12):
do(sc, i)
关注火花webUI我没有看到任何占用存储选项卡上的内存(比一个循环更长)。但是看htop
内存使用量不断增长。考虑到我没有使用可能占用内存的RDD,我对于占用所有内存的东西感到茫然。运行spark-1.5.2。