我正在使用以下配置在集群中运行Spark Job:
--master yarn --deploy-mode client
--executor-memory 4g
--executor-cores 2
--driver-memory 6g
--num-executors 12
当我在驱动程序中采集数据样本时,问题发生在作业中。运行的命令如下:
rddTuplesA.sample(false, 0.03, 261).collect().forEach((tuple) ->
//build histogram...
);
rddTuplesA
对象是JavaRDD
作业抛出以下错误:
然而,当我得到一个较小的样本时,这项工作非常完美。
rddTuplesA.sample(false, 0.01, 261).collect().forEach((tuple) ->
//build histogram...
);
是否有任何配置参数需要更改以使作业运行?看来问题与网络有关。此外,如果这是由于内存问题而发生的,那么Driver上不会出现与内存相关的错误吗?类似于:
java. lang.OutOfMemoryError:超过GC开销限制
终于解开了谜团。这个问题与集群网络有关。具体来说,我在每台机器(节点)的 /etc/hosts文件中添加了它们的本地ip映射到它们的主机名(作为别名),如下所示:
192.168.0.1 snf-1234
192.168.0.2 snf-1235
...
看起来,当样本很大时,驱动程序试图建立一个由于ipv4和主机名之间缺少匹配而无法实现的连接。