我在一台指向主机的不同机器上有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