Apache Spark多节点群集

时间:2015-10-20 12:56:03

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

我目前正在使用apache spark进行记录器分析。我是Apache Spark的新手。我曾尝试使用apache spark standalone模式。我可以通过在客户端上使用deploy-mode提交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,现在没有例外但是为什么没有将任务分配给工作节点?

enter image description here

我试过没有群集。它的工作正常。如下图所示

enter image description here

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

enter image description here

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 我的解决方案是我将.jar文件上传到HDFS上。 输入命令行,如下所示:

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://路径。

答案 1 :(得分:1)

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

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路径是群集中任何节点的路径。

答案 2 :(得分:0)

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

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

参考Spark Documentation For Submitting JAR