Hadoop 在EC2上设置spark类路径:spark.driver.extraClassPath和spark.executor.extraClassPath

Hadoop 在EC2上设置spark类路径:spark.driver.extraClassPath和spark.executor.extraClassPath,hadoop,apache-spark,classpath,maven-3,Hadoop,Apache Spark,Classpath,Maven 3,通过为maven依赖项提供spark类路径来减少应用程序jar的大小: 我的集群有3个运行hadoop和spark的ec2实例。如果我使用maven依赖项构建jar,它会变得太大(大约100 MB),我希望避免这种情况,因为每次运行作业时,jar都会在所有节点上复制 为了避免这种情况,我将maven包构建为“maven包”。为了解决依赖关系,我下载了每个节点上的所有maven依赖关系,然后只提供了上面的jar路径: 我在“spark defaults.conf”中的每个节点上添加了类路径,如下所

通过为maven依赖项提供spark类路径来减少应用程序jar的大小:

我的集群有3个运行hadoop和spark的ec2实例。如果我使用maven依赖项构建jar,它会变得太大(大约100 MB),我希望避免这种情况,因为每次运行作业时,jar都会在所有节点上复制

为了避免这种情况,我将maven包构建为“maven包”。为了解决依赖关系,我下载了每个节点上的所有maven依赖关系,然后只提供了上面的jar路径:

我在“spark defaults.conf”中的每个节点上添加了类路径,如下所示

它在单个节点上本地工作。
但我还是会遇到这个错误。任何帮助都将不胜感激

不需要放置所有jar文件,只需放置应用程序jar文件即可。 若您再次遇到错误,请将所需的所有jar文件放入


必须通过setJars()方法将jars文件放入

最后,我终于解决了这个问题。我使用“mvn package”而不是“mvn clean compile assembly:single”创建了应用程序jar,这样它在创建jar时就不会下载maven依赖项(但需要在运行时提供这些jar/依赖项),这导致了较小的jar(因为只有依赖项的引用)

然后,我在每个节点的spark defaults.conf中添加了两个参数,如下所示:

spark.driver.extraClassPath     /home/spark/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.1.7/cassandra-driver-core-2.1.7.jar:/home/spark/.m2/repository/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar:/home/spark/.m2/repository/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar:/home/spark/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar

spark.executor.extraClassPath     /home/spark/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.1.7/cassandra-driver-core-2.1.7.jar:/home/spark/.m2/repository/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar:/home/spark/.m2/repository/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar:/home/spark/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar
所以问题就出现了,应用程序JAR将如何在运行时获得maven依赖项(所需的JAR?


为此,我已经提前使用mvn clean compile assembly:single下载了每个节点上所有必需的依赖项。

我知道需要应用程序Jar,并且已经准备就绪。我正在谈论其他Jar(Maven依赖项)。只在pom文件中放置Maven依赖项。它将把所有jar文件放在主应用程序jar文件中。它将解决您的问题如果我这样做,它将导致我试图避免的大jar文件。您可以做一件事:在您的计算机上安装hadoop,然后将所有必需的jar文件放在一个hdfs目录中,然后使用hdfs位置获取所有jar文件。spark.driver.extraClassPath仅为运行应用程序的一台计算机提供jar。您还必须设置executors类路径。如果您将所有JAR文件都放在hdfs中并从中获取,则效果会更好。
spark.driver.extraClassPath     /home/spark/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.1.7/cassandra-driver-core-2.1.7.jar:/home/spark/.m2/repository/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar:/home/spark/.m2/repository/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar:/home/spark/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar

spark.executor.extraClassPath     /home/spark/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.1.7/cassandra-driver-core-2.1.7.jar:/home/spark/.m2/repository/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar:/home/spark/.m2/repository/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar:/home/spark/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar