工人没有足够的记忆力

时间:2015-02-23 11:59:37

标签: apache-spark

我收到以下WARN消息:

TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory

当我尝试运行以下spark-task时:

spark/bin/spark-submit --master $SPARK_MASTER_URL --executor-memory 8g --driver-memory 8g --name "Test-Task" --class path.to.my.Class myJAR.jar

Master和所有工作人员都有足够的内存来完成这项任务(见图),但似乎他们没有分配它。

status frontend

我的设置如下:

SparkConf conf = new SparkConf().set("spark.executor.memory", "8g");

当我开始我的任务然后输入

ps -fux | more

在我的控制台中,它显示了以下选项:

-Xms512m -Xmx512m

谁能告诉我我做错了什么?

编辑: 我在做什么: 我在我的主磁盘上保存了一个巨大的文件,当我将其加载到内存中时它大约是5GB(这是一张地图图)。所以我首先将整个地图加载到内存中,然后为每个节点提供此地图的一部分进行处理。据我所知,这就是为什么我的主实例上也需要很多内存的原因。也许不是一个好的解决方案?

1 个答案:

答案 0 :(得分:1)

要扩大主节点的堆大小,可以设置SPARK_DAEMON_MEMORY环境变量(例如,在spark-env.sh中)。但我怀疑它会解决你的内存分配问题,因为主节点没有加载数据。

我不明白你的地图地图"文件是。但通常,要处理大文件,您可以使用共享文件夹(NFS)或更好的分布式文件系统(HDFS,GlusterFS)将其提供给每个工作节点。然后每个工作人员都可以读取文件的一部分并进行处理。只要文件格式是可拆分的,例如Spark支持JSON file format,这就可以工作。