【问题标题】:Apache Spark Multi Node ClusteringApache Spark 多节点集群
【发布时间】:2025-12-09 04:30:01
【问题描述】:

我目前正在使用 apache spark 进行记录器分析。我是 Apache Spark 的新手。我曾尝试使用 apache spark 独立模式。我可以通过在客户端上提交带有部署模式的 jar 来运行我的代码。但我不能使用多节点集群运行。我使用的工作节点是不同的机器。

sh spark-submit --class Spark.LogAnalyzer.App --deploy-mode cluster --master spark://rishon.server21:7077 /home/rishon/loganalyzer.jar "/home/rishon/apache-tomcat-7.0.63/LogAnalysisBackup/"

当我运行此命令时,它显示以下错误

15/10/20 18:04:23 ERROR ClientEndpoint: Exception from cluster was: java.io.FileNotFoundException: /home/rishon/loganalyzer.jar (No such file or directory)
java.io.FileNotFoundException: /home/rishon/loganalyzer.jar (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at org.spark-project.guava.io.Files$FileByteSource.openStream(Files.java:124)
    at org.spark-project.guava.io.Files$FileByteSource.openStream(Files.java:114)
    at org.spark-project.guava.io.ByteSource.copyTo(ByteSource.java:202)
    at org.spark-project.guava.io.Files.copy(Files.java:436)
    at org.apache.spark.util.Utils$.org$apache$spark$util$Utils$$copyRecursive(Utils.scala:514)
    at org.apache.spark.util.Utils$.copyFile(Utils.scala:485)
    at org.apache.spark.util.Utils$.doFetchFile(Utils.scala:562)
    at org.apache.spark.util.Utils$.fetchFile(Utils.scala:369)
    at org.apache.spark.deploy.worker.DriverRunner.org$apache$spark$deploy$worker$DriverRunner$$downloadUserJar(DriverRunner.scala:150)
    at org.apache.spark.deploy.worker.DriverRunner$$anon$1.run(DriverRunner.scala:79)

据我了解,驱动程序将数据和应用程序代码发送到工作节点。我不知道我的理解是否正确。所以请帮我在集群上运行应用程序。

我尝试在集群上运行jar,现在没有异常,但是为什么任务没有分配给工作节点?

我尝试过不进行聚类。它工作正常。如下图所示

上图显示,任务分配给工作节点。但是我还有一个问题要分析日志文件。实际上,我在文件夹中的主节点中有日志文件(例如:'/home/visva/log')。但是工作节点在自己的文件系统上搜索文件。

【问题讨论】:

  • /home/rishon/loganalyzer.jar 是否有 jar - 请确认。
  • 我只是将它放在主节点中。不在工作节点中。我想,这个例外是关于工作节点的。
  • Jar 应该只在主节点中。这个 jar 是否存在于 Master 中?
  • 我确定。我在主节点中受到了震动。不知道集群中worker节点和master节点是如何工作的?驱动程序代码和应用程​​序代码,是不同还是相同?我在不同的机器上使用过工作节点,但我不知道我做对了还是错了?请帮助我了解所有这些想法。
  • 请看附图

标签: apache-spark apache-spark-sql spark-streaming hadoop-streaming


【解决方案1】:

我遇到了同样的问题。 我的解决方案是我在 HDFS 上上传了我的 .jar 文件。 像这样输入命令行:

spark-submit --class com.example.RunRecommender --master spark://Hadoop-NameNode:7077 --deploy-mode cluster --executor-memory 6g --executor-cores 3 hdfs://Hadoop-NameNode:9000/spark-practise-assembly-1.0.jar

application-jar:包含您的应用程序和所有依赖项的捆绑 jar 的路径。 URL 必须在集群内全局可见,例如所有节点上都存在的 hdfs:// 路径或 file:// 路径。

【讨论】:

    【解决方案2】:

    如果在 spark-submit 中使用集群模型,则需要使用 6066 端口(spark 中默认的 rest 端口):

    spark-submit --class Spark.LogAnalyzer.App --deploy-mode cluster --master spark://rishon.server21:6066 /home/rishon/loganalyzer.jar "/home/rishon/apache-tomcat-7.0.63/LogAnalysisBackup/" 
    

    就我而言,我将应用程序的 jar 上传到集群中的每个节点,因为我不知道 spark-submit 如何自动传输应用程序,也不知道如何将节点指定为驱动程序节点。 注意:app的jar路径是集群任意节点的路径。

    【讨论】:

      【解决方案3】:

      Spark 中有两种部署模式来运行脚本。
      1.client(默认):在客户端模式下,驱动程序直接在spark-submit进程中启动,作为集群的客户端。(主节点)

      2.cluster :如果您的应用程序是从远离工作机器的机器提交的,通常使用集群模式来最小化驱动程序和执行程序之间的网络延迟。

      参考Spark Documentation For Submitting JAR

      【讨论】:

      • 感谢您的回复。我在配置工作节点时犯了错误。我刚刚解决了那个异常。但是应用程序没有运行。我有像第一个屏幕截图一样的输出。在该屏幕截图中显示了正在运行的驱动程序。但是为什么没有分配给该驱动程序程序的工作人员。我做错了什么。
      • 它正在worker上运行应用程序。有 2 个核心,并且都被用于工作节点。
      • 是的,谢谢,它像集群一样工作。但是如果我不提和提部署模式为集群有什么区别。
      • 请再看一个附件。
      • @Visva :在外行术语中,如果您通过打开该远程计算机来运行 spark 应用程序,则需要使用客户端模式,如果您在未打开远程计算机的情况下从工作站运行,则使用集群.
      最近更新 更多