为什么HDFS上运行的Spark wordcount应用程序中的位置级别都是ANY?

时间:2015-11-03 03:49:58

标签: hadoop apache-spark hdfs

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

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

enter image description here

enter image description here

4 个答案:

答案 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>