在大型文件上使用“.count()”时出现pyspark内存问题?

时间:2015-07-22 21:42:06

标签: apache-spark pyspark

我在一台指向主机的不同机器上有1个火花主机在不同的机器上运行3个从机(每台机器有50GB内存)。

我打开了pyspark:

pyspark --master spark://mymastermachine:7077

然后我运行一个sc.textFile命令,该命令从hdfs中读取一个大小为7GB的文件。但是,当存储到变量“myfilerdd”中,然后执行myfilerdd.count()时,我会看到如下消息:

INFO BlockManagerInfo: Removed broadcast_2_piece0 on ######:##### in memory (size: 1473.0 B, free: 255.1 MB)
WARN HeartbeatReceiver: Removing executor 0 with no recent heartbeats: 160788 ms exceeds timeout 120000 ms
ERROR TaskSchedulerImpl: Lost an executor 0 (already removed): Executor heartbeat timed out after 160788 ms

在8080端口的spark master url中,我看到作业失败了。我注意到的一件事是,在“正在运行的应用程序”中,我看到:

Application ID  Name    Cores   Memory per Node Submitted Time  User    State   Duration
app-3535323432-0000 PySparkShell    32  512.0 MB    ##### ####  mbaker  RUNNING 4 s

注意每个节点的内存是512.0MB,这是我的“myfilerdd.count()”失败的原因吗?因为数据超过512MB?当我在一个小于10MB的文件上使用sc.textFile时,我不会遇到同样的问题。

当我尝试以本地模式运行时:

pyspark --master local[4]

然后做同样的事情,pyspark shell挂起像:

 INFO BlockManagerInfo: Removed broadcast_2_piece0 on ####### in memory (size: 1473.0 B, free: 255.1 MB)

- after waiting a long time, below shows - 

 Exception in thread "stdout writer for python2.7" java.lang.OutOfMemoryError: Java heap space

我的工人看起来很健壮:

Worker Id   Address State   Cores   Memory
worker-457453474554 ipdaddress:#####    ALIVE   32 (32 Used)    50.0 GB (512.0 MB Used)

我没有正确设置群集或缺少某些配置选项吗?

注意:spark-env.sh中的SPARK_WORKER_MEMORY = 10g和SPARK_DAEMON_MEMORY = 10g

0 个答案:

没有答案