在ec2上设置spark类路径:spark.driver.extraclasspath和spark.executor.extraclasspath

lyr7nygr  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(579)

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

spark.driver.extraClassPath        /home/spark/.m2/repository/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar:/home/spark/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.1.5/cassandra-driver-core-2.1.5.jar:/home/spark/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar:/home/spark/.m2/repository/com/google/collections/google-collections/1.0/google-collections-1.0.jar:/home/spark/.m2/repository/com/datastax/spark/spark-cassandra-connector-java_2.10/1.2.0-rc1/spark-cassandra-connector-java_2.10-1.2.0-rc1.jar:/home/spark/.m2/repository/com/datastax/spark/spark-cassandra-connector_2.10/1.2.0-rc1/spark-cassandra-connector_2.10-1.2.0-rc1.jar:/home/spark/.m2/repository/org/apache/cassandra/cassandra-thrift/2.1.3/cassandra-thrift-2.1.3.jar:/home/spark/.m2/repository/org/joda/joda-convert/1.2/joda-convert-1.2.jar

它在单节点上本地工作。我仍然得到这个错误。任何帮助将不胜感激。

r1wp621o

r1wp621o1#

最后,我终于解决了这个问题。我使用“mvn package”而不是“mvn clean compile”创建了应用程序jarassembly:single ,这样它就不会在创建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 in 前进。

3pvhb19x

3pvhb19x2#

你不需要把所有的jar文件都放进去,只要把你的应用jar文件放进去就行了。如果再次出现错误,请将所需的所有jar文件放入。
必须通过setjars()方法将jars文件放入。

相关问题