Hadoop 为什么在HDFS上运行的Spark wordcount应用程序中所有的位置级别都是任意的?

Hadoop 为什么在HDFS上运行的Spark wordcount应用程序中所有的位置级别都是任意的?,hadoop,apache-spark,hdfs,Hadoop,Apache Spark,Hdfs,我运行了一个由12个节点组成的Spark集群(8G内存,每个节点8个内核)进行了一些测试 我试图弄明白为什么一个简单的wordcount应用程序在“map”阶段的数据位置都是“Any”。14GB数据集存储在HDFS中 我遇到了同样的问题,就我而言,这是配置问题。我在EC2上运行,但名称不匹配。也许同样的事情也发生在你身上 当您检查HDFS对集群的看法时,应该是这样的: hdfs dfsadmin -printTopology Rack: /default-rack 172.31.xx.x

我运行了一个由12个节点组成的Spark集群(8G内存,每个节点8个内核)进行了一些测试

我试图弄明白为什么一个简单的wordcount应用程序在“map”阶段的数据位置都是“Any”。14GB数据集存储在HDFS中


我遇到了同样的问题,就我而言,这是配置问题。我在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中的执行者地址中也应该看到相同的内容(默认情况下,它是


在我的例子中,我为spark slaves使用公共主机名。我已经在
$SPARK/conf/SPARK env.sh
中更改了我的
SPARK\u LOCAL\u IP
以使用私有名称,在更改之后,我大多数时候都会得到
节点\u LOCAL

我今天遇到了同样的问题。这就是我的情况:


我的集群有9个工作线程(每个工作线程默认设置一个执行器),当我设置
--total executor cores 9
时,局部性级别是NODE_LOCAL,但当我将total executor cores设置在9以下时,例如
--total executor cores 7
,则局部性级别变为ANY,总时间开销是NODE_LOCAL级别的10倍。您可以试一试。

我正在EC2s上运行集群,我通过将以下内容添加到名称节点上的
spark env.sh
解决了我的问题

SPARK_MASTER_HOST=<name node hostname>

不要像这样启动从机
start all.sh
。你应该单独启动每个奴隶

$SPARK_HOME/sbin/start-slave.sh -h <hostname> <masterURI> 
$SPARK\u HOME/sbin/start-slave.sh-h

您是否尝试过配置?由于默认值为3s,您可能希望将其设置得更高。我尝试过,但无效。很抱歉,我不清楚您的答案。我应该在哪里修改?你能举个例子吗?谢谢。你能添加
hdfs-dfsadmin-printTopology的输出吗?
?好的,我把它贴在问题中。@XingjunWang和你集群的概述页面?基本上,在我的例子中,括号中的东西(在你的例子中是vm1-vm16)应该和spark看到的一样。所以你应该检查你的主机名,以及
conf/spark env.sh
config等等。我找到了另一种方法来处理它。您可以尝试将spark conf spark.locality.wait增加到更大的数字,例如50,或者尝试将spark.locality.wait.process增加到30,然后您可能会得到结果。
$SPARK_HOME/sbin/start-slave.sh -h <hostname> <masterURI>