通过为maven依赖项提供spark-classPath来减小应用程序jar的大小:
我的集群有3个ec2实例,其中hadoop和spark正在运行。如果我构建了带有maven依赖项的jar,它会变得太大(大约100 MB)我想避免这种情况,因为Jar正在所有节点上进行复制,我每次都去做这份工作。
为了避免我已经构建了一个maven包作为" maven包"。对于依赖项解析,我已经下载了每个节点上的所有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
它在单个节点上本地工作。 我仍然得到这个错误。任何帮助将不胜感激。
答案 0 :(得分:9)
最后,我能够解决问题。我使用" mvn package" 而不是" mvn clean编译程序集:single" 创建了应用程序jar,因此它将使用在创建jar时不下载maven依赖项(但需要提供这些jar / dependencies运行时),这导致了小型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' s)运行时?
为此,我已经使用 mvn clean compile assembly:single 预先下载了每个节点上所有必需的依赖项。
答案 1 :(得分:0)
您不需要放置所有jar文件。只需放置您的应用程序jar文件。 如果再次出现错误而不是放置所需的所有jar文件。
你必须通过setJars()方法放置jars文件。