问题标签 [apache-spark-standalone]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 多节点 spark 集群上的 spark-shell 无法启动远程工作节点上的执行程序
在独立模式下安装了 spark 集群,第一个节点上有 2 个节点,运行 spark master,另一个节点 spark worker。当我尝试使用字数统计代码在工作节点上运行 spark shell 时,它运行良好,但是当我尝试在主节点上运行 spark shell 时,它给出以下输出:
不会触发 Executor 来运行作业。即使有工人可以火花大师它给出这样的问题。任何帮助都是appriciated,谢谢
docker - 在 Docker 容器中运行 Spark 驱动程序 - 没有从执行程序返回到驱动程序的连接?
更新:问题已解决。Docker 映像在这里:docker-spark-submit
我在 Docker 容器内使用一个胖罐子运行 spark-submit。我的独立 Spark 集群在 3 台虚拟机上运行——一台主机和两台工作机。从工作机器上的执行程序日志中,我看到执行程序具有以下驱动程序 URL:
"--driver-url" "spark://CoarseGrainedScheduler@172.17.0.2:5001"
172.17.0.2实际上是带有驱动程序的容器的地址,而不是运行容器的宿主机。工作机器无法访问此 IP,因此工作人员无法与驱动程序通信。正如我从 StandaloneSchedulerBackend 的源代码中看到的,它使用 spark.driver.host 设置构建 driverUrl:
它没有考虑 SPARK_PUBLIC_DNS 环境变量 - 这是正确的吗?在容器中,除了容器“内部”IP 地址(本例中为 172.17.0.2)之外,我无法将 spark.driver.host 设置为其他任何内容。尝试将 spark.driver.host 设置为主机的 IP 地址时,出现如下错误:
WARN Utils:服务“sparkDriver”无法绑定端口 5001。尝试端口 5002。
我尝试将 spark.driver.bindAddress 设置为主机的 IP 地址,但得到了同样的错误。那么,如何配置 Spark 以使用主机 IP 地址而不是 Docker 容器地址与驱动程序通信?
UPD:来自执行程序的堆栈跟踪:
apache-spark - 为什么 Apache Livy 会话显示应用程序 id 为 NULL?
我已经实现了一个功能齐全的 Spark 2.1.1 独立集群,我在其中使用 Apache Livycurl
0.4通过命令发布作业批次。在咨询 Spark WEB UI 时,我看到了我的工作及其应用程序 ID(类似于:)app-20170803115145-0100
,以及应用程序名称、核心、时间、状态等。但是在咨询 Livy WEB UI 时(http://localhost:8998 by默认),我看到以下结构:
如果我得到所有批次的状态,我会得到以下结果:
这显然是正确的,但我总是在appId字段中看到空值,还有driverLogUrl和sparkUiUrl。
该字段是否假设显示与我在 Spark WEB UI 中看到的相同的应用程序 ID?如果是这样,我该如何配置它或者它必须是自动的?不知道我是否在 livy.conf 或 livy-env.sh 文件中遗漏了一些配置行,因为我找不到任何示例或有关此的文档。
这是我的 livy.conf 文件:
这是 livy-env.sh 文件:
如果您需要更多信息,请告诉我。
更新 对于那些有同样问题的人。不幸的是,使用独立集群管理器我无法修复,但后来我不得不将其更改为 YARN 以更好地管理池和队列,这神奇地解决了问题,我能够看到所有这些信息。不知道为什么独立管理器不能将 applicationId 推送到 Livy,但是 YARN 可以,所以它只是自行修复,我没有更改 Livy conf 中的任何内容。文件。
apache-spark - 我可以使用 Apache Spark 独立版本分发工作吗?
我听到人们谈论“Apache Standalone Cluster”,这让我很困惑,因为我将“cluster”理解为通过潜在的快速网络连接并并行工作的各种机器,而“standalone”理解为孤立的机器或程序。所以问题是,Apache Standalone 可以跨网络进行分布式工作吗?如果可以,那么与非独立版本有什么区别?
apache-spark - Spark Standalone集群,每个执行程序的内存问题
嗨,我正在使用 spark 提交脚本启动我的 Spark 应用程序
我在两个节点(我的 2 台笔记本电脑)上部署了一个 spark 独立集群。集群运行良好。默认情况下,它为工作程序设置 15G,为执行程序设置 8 个核心。现在我遇到以下奇怪的行为。虽然我明确设置了内存,这也可以在 sparconf UI 的环境变量中看到,但在集群 UI 中,它说我的应用程序的执行程序内存限制为 1024MB。这让我想到了默认的1G参数。我想知道为什么会这样。
由于内存问题,我的应用程序确实失败了。我知道该应用程序需要大量内存。
最后一个混淆点是驱动程序。为什么考虑到我处于集群模式,火花提交不会立即返回?我认为,鉴于驱动程序是在集群上执行的,客户端即提交应用程序应该立即返回。这进一步表明我的 conf 和事情的执行方式有些不对劲。
任何人都可以帮助诊断吗?
apache-spark - Spark Streaming - 停止的工作人员抛出 FileNotFoundException
我在由三个节点组成的集群上运行一个 spark 流应用程序,每个节点都有一个工作程序和三个执行程序(总共有 9 个执行程序)。我正在使用 spark 独立模式(版本 2.1.1)。
该应用程序使用带有选项--deploy-mode client
和的 spark-submit 命令运行--conf spark.streaming.stopGracefullyOnShutdown=true
。提交命令从其中一个节点运行,我们称其为节点 1。
作为容错测试,我通过调用脚本来停止节点 2 上的工作程序stop-slave.sh
。
在节点 2 上的执行程序日志中,我可以在 shuffle 操作期间看到几个与 FileNotFoundException 相关的错误:
我可以在节点 2 上的 3 个执行程序中的每个执行程序的同一任务中看到 4 个此类错误。
在驱动程序日志中,我可以看到:
正如预期的那样,这正在关闭应用程序:执行spark.task.maxFailures
程序在单个任务上到达,然后应用程序停止。
我进行了不同的测试,所有测试都以应用程序停止而告终。我的想法是,行为可能会根据我要求工作人员停止的流过程中的精确步骤而有所不同。在任何情况下,所有其他测试都因上述相同的错误而失败。
将参数spark.task.maxFailures
增加到 8 也没有帮助,TaskSetManager 信号任务失败了 8 次而不是 4 次。
如果工人被杀了怎么办?
我还运行了一个不同的测试:我用 command 杀死了节点 2 上的 worker 和 3 个 executors 进程kill -9
。在这种情况下,流媒体应用程序适应了剩余的资源并继续工作。
在驱动程序日志中,我们可以看到驱动程序注意到缺少的执行程序:
然后,我们注意到一长串以下错误:
此错误会出现在日志中,直到被杀死的工作人员再次启动。
结论
使用专用命令停止工作人员有一个意想不到的行为:应用程序应该能够处理错过的工作,适应剩余的资源并继续工作(就像在 的情况下一样kill
)。
您对这个问题有何看法?
谢谢你,戴维德
apache-spark - 工作人员:无法连接到 spark apache 上的 master
我正在尝试在 Windows 上使用独立集群管理器部署 Spark 应用程序,因此在主端(IP:192 . . .186)我运行:
\bin>spark-class org.apache.spark.deploy.master.Master
在从属端(IP:192 . . .75)我跑了:
\bin>spark-class org.apache.spark.deploy.worker.Worker spark://192.*.*.186:7077
我有一个问题,客户端无法连接到主节点,这是我得到的错误:
我怎样才能解决这个问题?
apache-spark - Worker 无法连接到 Spark Apache 中的 master
我正在使用独立集群管理器部署 Spark Apache 应用程序。我的架构使用 2 台 Windows 机器,其中一台作为主机,另一台作为从机(工作者)
主人:我在上面运行:\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 显示的内容:
问题是工作节点无法连接到主节点并显示以下错误:
知道两台机器都禁用了防火墙并且我测试了它们之间的连接(使用nmap)并且一切正常,这可能是什么情况!但使用 telnet 我收到此错误:Connecting To 192.*.*.186...Could not open connection to the host, on port 23: Connect failed
apache-spark - 执行器在 Spark 独立部署中失败
我在本地 Windows 机器上运行 spark。当我将 master 设置为本地时,它工作得非常好,但是当我给它一个集群 master uri 时,它会为它启动的每个执行程序抛出以下异常。
17/10/05 17:27:19 INFO StandaloneAppClient$ClientEndpoint: Executor updated: app-20171005172719-0006/0 is now FAILED (java.lang.IllegalStateException: Library directory 'C:\Spark\bin\.\assembly\target\scala-2.10\jars' does not exist; make sure Spark is built.)
我正在本地尝试 spark 独立环境。所以我已经启动了一个主节点和工作节点,并将主 url 提供给我的驱动程序。我确保我的SPARK_HOME
环境变量设置为C:\Spark
(我放置火花的位置)。
解决此问题的任何帮助将不胜感激,谢谢。
apache-spark - 如何在 pyspark 应用程序中动态更改 PYTHONPATH
好的,所以我正在运行一个脚本,该脚本依赖于一个复杂的项目,其中包含一堆来自 pyspark 的自定义子模块。我正在运行的工作是我希望它具有针对 Spark 独立实例运行的多个不同版本的代码。
因此,我需要将我的项目放在每个工人的 PYTHONPATH 上,以使其正常工作。如果我将项目的源代码添加到 PYTHONPATH,然后启动独立集群,这会很好。如果我编辑 PYTHONPATH,那么运行时代码将只引用启动时发生的事情,而不是我运行 spark-submit 时有效的内容。
这很重要的原因是因为我希望能够针对多个版本的代码运行作业,这意味着我希望能够动态加载不同版本的代码。在我的脚本中压缩源代码和执行 sc.addPyFile() 之类的操作也不起作用。
有没有办法在 spark-submit 作业之间动态更改我的路径上的 python 代码,而无需重新启动我的独立集群?