我是Apache Spark的新手,我刚刚了解到Spark支持三种类型的集群:
由于我是Spark的新手,我想我应该首先尝试Standalone.但我想知道哪一个是推荐的.说,将来我需要构建一个大型集群(数百个实例),我应该去哪个集群类型?
在Spark Standalone模式下,有主节点和工作节点.
这里有几个问题:
TL; DR:在Spark Standalone集群中,客户端和集群部署模式之间有什么区别?如何设置应用程序运行的模式?
我们有一个带有三台机器的Spark Standalone集群,它们都使用Spark 1.6.1:
spark-submit从Spark文档中,我读到:
(...)对于独立群集,Spark目前支持两种部署模式.在客户端模式下,驱动程序在与提交应用程序的客户端相同的进程中启动.但是,在集群模式下,驱动程序从集群内的一个工作进程启动,客户端进程在完成其提交应用程序的责任时立即退出,而无需等待应用程序完成.
但是,通过阅读本文,我并不真正了解实际差异,而且我不了解不同部署模式的优点和缺点.
另外,当我使用start-submit启动我的应用程序时,即使我将属性设置spark.submit.deployMode为"cluster",我的上下文的Spark UI也显示以下条目:
所以我无法测试两种模式以查看实际差异.话虽这么说,我的问题是:
1)Spark Standalone 客户端部署模式和集群部署模式之间有哪些实际区别?使用每个人的专业和利益是什么?
2)如何选择我的应用程序将运行哪一个,使用spark-submit?
阅读完这个问题后,我想提出更多问题:
failover hadoop hadoop-yarn apache-spark apache-spark-standalone
驱动程序是否需要持续访问主节点?或者只需要获得初始资源分配?如果在创建Spark上下文后master不可用,会发生什么?这是否意味着申请会失败?
使用Spark(1.6.1)独立主机,我需要在同一个spark master上运行多个应用程序.
所有申请在第一个申请后提交,始终保持'WAIT'状态.我还观察到,一个运行中包含所有核心工人的总和.我已经尝试过限制它,SPARK_EXECUTOR_CORES但是它用于纱线配置,而我正在运行的是"独立主机".我尝试在同一个主人上运行许多工作人员,但每次首次提交的申请都会消耗所有工人.
config high-availability apache-spark apache-spark-standalone
所以我有一个带有16个内核和64GB内存的Spark独立服务器.我在服务器上运行主服务器和工作服务器.我没有启用动态分配.我在Spark 2.0上
我不明白的是,当我提交工作并指明:
--num-executors 2
--executor-cores 2
Run Code Online (Sandbox Code Playgroud)
只应占用4个核心.然而,当提交作业时,它会占用所有16个内核,并且无论如何都会绕过num-executors参数旋转8个执行程序.但如果我将executor-cores参数更改为4它将相应调整,4个执行器将旋转.
我有一个Spark Standalone(不是YARN/Mesos)集群和一个运行(在客户端模式下)的驱动程序应用程序,它与该集群通信以执行其任务.但是,如果我关闭并重新启动Spark主服务器和工作程序,则驱动程序不会重新连接到主服务器并恢复其工作.
也许我对Spark Master和驱动程序之间的关系感到困惑.在这种情况下,主人是否负责重新连接到驱动程序?如果是这样,主服务器是否将其当前状态序列化到某个可以在重启时恢复的磁盘?
我正在使用独立集群管理器部署 Spark Apache 应用程序。我的架构使用 2 台 Windows 机器:一组作为主机,另一组作为从机(工作程序)。
Master:我在其上运行:\bin>spark-class org.apache.spark.deploy.master.Master这是 Web UI 显示的内容:

Slave:我在其上运行:\bin>spark-class org.apache.spark.deploy.worker.Worker spark://192.*.*.186:7077这就是 Web UI 显示的内容:
问题是worker节点无法连接到master节点,并显示以下错误:
17/09/26 16:05:17 INFO Worker: Connecting to master 192.*.*.186:7077...
17/09/26 16:05:22 WARN Worker: Failed to connect to master 192.*.*.186:7077
org.apache.spark.SparkException: Exception thrown in awaitResult:
at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:205)
at org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:75)
at org.apache.spark.rpc.RpcEnv.setupEndpointRefByURI(RpcEnv.scala:100)
at org.apache.spark.rpc.RpcEnv.setupEndpointRef(RpcEnv.scala:108)
at org.apache.spark.deploy.worker.Worker$$anonfun$org$apache$spark$deploy$worker$Worker$$tryRegisterAllMasters$1$$anon$1.run(Worker.scala:241)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Failed to connect to /192.*.*.186:7077
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:232)
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:182)
at …Run Code Online (Sandbox Code Playgroud) 基本上,主节点也作为从节点之一执行。一旦 master 上的 slave 完成,它就会调用 SparkContext 停止,因此这个命令会传播到所有在处理过程中停止执行的 slave。
错误登录其中一名工作人员:
信息 SparkHadoopMapRedUtil:尝试_201612061001_0008_m_000005_18112:已提交
INFO Executor:已完成阶段 8.0 中的任务 5.0 (TID 18112)。发送给驱动程序的 2536 字节结果
信息 CoarseGrainedExecutorBackend:驱动程序命令关闭
错误 CoarseGrainedExecutorBackend:收到信号终止