我运行了一个包含12个节点的Spark集群(8G内存,每个8个内核)进行一些测试。
我正在试图弄清楚为什么“map”阶段的简单wordcount应用程序的数据位置都是“Any”。 14GB数据集存储在HDFS中。
答案 0 :(得分:1)
我遇到了同样的问题,在我的情况下,这是配置问题。我在EC2上运行,我的名字不匹配。也许同样的事情发生在你身上。
当您检查HDFS如何看待您的群集时,它应该是这样的:
hdfs dfsadmin -printTopology
Rack: /default-rack
172.31.xx.xx:50010 (ip-172-31-xx-xxx.eu-central-1.compute.internal)
172.31.xx.xx:50010 (ip-172-31-xx-xxx.eu-central-1.compute.internal)
同样应该在UI中的执行者地址中看到(默认情况下是http://your-cluster-public-dns:8080/)。
在我的情况下,我使用公共主机名作为火花奴隶。我已更改SPARK_LOCAL_IP
中的$SPARK/conf/spark-env.sh
以使用私人名称,在此更改后,我大多数时间都会NODE_LOCAL
。
答案 1 :(得分:1)
我今天遇到同样的问题。这是我的情况:
我的群集有9个工作者(默认情况下每个设置一个执行程序),当我设置--total-executor-cores 7
时,Locality杠杆为NODE_LOCAL,但是当我将total-executor-cores设置为低于9时,例如{{1} },然后Locality杠杆变为ANY,总时间成本比NODE_LOCAL杠杆高10倍。你可以尝试一下。
答案 2 :(得分:0)
我正在EC2上运行我的群集,我通过在名称节点上添加以下spark-env.sh
来修复我的问题
SPARK_MASTER_HOST=<name node hostname>
然后将以下内容添加到数据节点上的spark-env.sh
SPARK_LOCAL_HOSTNAME=<data node hostname>
答案 3 :(得分:0)
不要像这样start-all.sh
开始奴隶。你应该独自开始每一个奴隶
$SPARK_HOME/sbin/start-slave.sh -h <hostname> <masterURI>