我正在设置Hadoop集群以进行测试,并将所有内容放入3个Docker容器中。
我在master上的spark-defaults.conf是:
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://spark-master:9000/spark/logs
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider
spark.history.fs.logDirectory hdfs://spark-master:9000/spark-logs
spark.history.fs.update.interval 10s
spark.history.ui.port 18080
spark.driver.memory 512m
spark.executor.memory 512m
spark.yarn.am.memory 512m
spark.yarn.historyServer.address spark-master:18080
spark.executor.instances 1
core-site.xml
[root@spark-master hadoop]# cat core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://spark-master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop</value>
</property>
</configuration>
yarn-site.xml
[root@spark-master hadoop]# cat yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>spark-master</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>128</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>
hdfs-site.xml
[root@spark-master hadoop]# cat hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/hdfs/datanode</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
</configuration>
纱线节点-list
[root@spark-master /]# yarn node -list
Total Nodes:2
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
cassandra-node-1:39414 RUNNING cassandra-node-1:8042 1
cassandra-node-2:42546 RUNNING cassandra-node-2:8042 1
大师
[root@spark-master /]# jps
1952 SparkSubmit
597 NameNode
458 ResourceManager
1066 SecondaryNameNode
2906 Jps
75 ZeppelinServer
1292 HistoryServer
2702 SparkSubmit
node-1
[root@cassandra-node-1 /]# jps
96 NodeManager
1606 CoarseGrainedExecutorBackend
3094 Jps
231 DataNode
node-2
[root@cassandra-node-2 /]# jps
229 DataNode
3110 Jps
1565 ExecutorLauncher
94 NodeManager
这里一切似乎都很好。我看到一个容器中有应用程序管理器,而另一个容器中有spark shell执行器。
现在问题很简单了。我要做的就是两次执行spark-shell-我想做 “在纱线上有一个火花壳和一个齐柏林飞艇解释器”方案,但是由于它是无限期待决的,所以Zeppelin解释器无法正常工作,因此为了简单起见,我只想运行两个火花箱。
但是当我要执行第二个Shell时,它被卡住了,但是这里有足够的资源可以使用,对吗?有3.13 GB的可用内存,在8个内存中仅使用了1个vcore(7个免费vcore),它们似乎都非常空闲,所以为什么没有启动另一个spark-shell并使其挂起呢?
对于未决的应用尝试,它报告:
Total Outstanding Resource Requests: <memory:896, vCores:1>
但是我有足够的内存,CPU似乎也没有问题。
我有4个核心处理器-Intel(R)CoreTM i5-2540M CPU @ 2.60GHz(cat / proc / cpuinfo提供4个处理器),但是我不明白为什么它报告它像我有8个(也许是因为2 Docker容器,因此它认为我有2x4,但我总共只有4个)。
也许问题在于一个Spark Shell占用2个内核,因为它使用2个容器(一个用于应用程序主容器,另一个用于Spark执行器),另一个Spark-Shell也使用2个容器,因此将其4个一起使用,但是以某种方式可以只分配三个,一个出色,但是为什么当我总共有四个呢?
第一个shell毫无问题地启动,但是第二个shell被“接受”,但是它正在等待资源,并且只有在我杀死第一个spark-shell的情况下,它才会继续。
编辑
1)纱线节点-在任何应用程序之前列出
Total Nodes:2
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
cassandra-node-2:43961 RUNNING cassandra-node-2:8042 0
cassandra-node-1:36905 RUNNING cassandra-node-1:8042 0
2)纱线节点-list-在第一个spark-shell启动之后-我进入了spark-shell控制台
Total Nodes:2
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
cassandra-node-2:43961 RUNNING cassandra-node-2:8042 2
cassandra-node-1:36905 RUNNING cassandra-node-1:8042 0
3)启动第二个spark-shell之后,输出与2)中的输出相同,第二个shell给了我:
[root@spark-master /]# spark-shell
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
2018-09-04 10:56:14 WARN Utils:66 - Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
并且没有其他输出卡住了。
应用尝试在hadoop后端的第二个spark-shell中说:
Total Outstanding Resource Requests: memory:896, vCores:1