我在一台指向主机的不同机器上有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 看起来很健壮:

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