通过为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
它在单节点上本地工作。我仍然得到这个错误。任何帮助将不胜感激。
2条答案
按热度按时间r1wp621o1#
最后,我终于解决了这个问题。我使用“mvn package”而不是“mvn clean compile”创建了应用程序jarassembly:single ,这样它就不会在创建jar时下载maven依赖项(但需要在运行时提供这些jar/依赖项),从而导致jar的大小变小(因为只有依赖项的引用)。
然后,我在spark-defaults.conf中为每个节点添加了以下两个参数:
所以问题出现了,应用程序jar将如何获得maven依赖(必需的jar)运行时?
为此,我使用mvn clean compile下载了每个节点上所有必需的依赖项assembly:single in 前进。
3pvhb19x2#
你不需要把所有的jar文件都放进去,只要把你的应用jar文件放进去就行了。如果再次出现错误,请将所需的所有jar文件放入。
必须通过setjars()方法将jars文件放入。