【问题标题】:Setting spark classpaths on EC2: spark.driver.extraClassPath and spark.executor.extraClassPath在 EC2 上设置 spark 类路径:spark.driver.extraClassPath 和 spark.executor.extraClassPath
【发布时间】:2015-07-29 13:05:08
【问题描述】:

通过为 maven 依赖项提供 spark-classPath 来减小应用程序 jar 的大小:

我的集群有 3 个运行 hadoop 和 spark 的 ec2 实例。如果我使用 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

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

【问题讨论】:

    标签: hadoop apache-spark classpath maven-3


    【解决方案1】:

    最后,我能够解决问题。我使用 "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 下载了每个节点上所有必需的依赖项。

    【讨论】:

      【解决方案2】:

      你不需要把所有的 jars 文件都放进去。只要把你的应用程序的 jar 文件放进去。 如果你再次收到错误而不是放置所有需要的 jar 文件。

      您必须通过 setJars() 方法放置 jars 文件。

      【讨论】:

      • 我知道应用程序 Jar 是必需的,并且一切就绪。我说的是其他 jars(Maven 依赖项)。
      • 只在你的 pom 文件中放 maven 依赖。它将把所有 jar 文件放在主应用程序 jar 文件中。它会解决你的问题
      • 如果我这样做,它会导致我试图避免的大 jar 文件。
      • 你可以做一件事,在你的机器上设置 hadoop,然后将所有需要的 jars 文件放在一个 hdfs 目录中,然后使用 hdfs 位置获取所有 jars 文件。
      • spark.driver.extraClassPath 只为您的应用程序运行的一台机器提供 jars。您还必须设置执行程序类路径。如果您将所有 jars 文件放在 hdfs 中并从那里获取,那就更好了。
      猜你喜欢
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多