Проблема запуска тривиального автономного приложения spark: java.lang.NoClassDefFoundError: org / apache / spark / sql / internal / StaticSQLConf $ - PullRequest
0 голосов
/ 09 марта 2019

Я запускаю тесты на искру несколько раз в день, но столкнулась с новой проблемой при запуске простого автономного приложения.Я пробовал на spark 2.3.0 и 2.4.0 с одинаковыми результатами.

  def main(args: Array[String]): Unit = {
    val spark =   SparkSession.builder.appName("bestRoutes").master("local").getOrCreate
    // do stuff with the session..
  }

Это приводит к ошибке / трассировке стека, показанной здесь:

19/03/09 11:02:24 INFO BlockManagerMasterEndpoint: Registering block manager 192.168.0.4:54406 with 2004.6 MB RAM, BlockManagerId(driver, 192.168.0.4, 54406, None)
19/03/09 11:02:24 INFO BlockManagerMaster: Registered BlockManager BlockManagerId(driver, 192.168.0.4, 54406, None)
19/03/09 11:02:24 INFO BlockManager: Initialized BlockManager: BlockManagerId(driver, 192.168.0.4, 54406, None)
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/internal/StaticSQLConf$
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:935)
    at task1.AirData$$anonfun$2.apply(AirData.scala:52)
    at task1.AirData$$anonfun$2.apply(AirData.scala:52)
    at scala.Option.getOrElse(Option.scala:121)
    at task1.AirData$.main(AirData.scala:51)
    at task1.AirData.main(AirData.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.internal.StaticSQLConf$
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more
19/03/09 11:02:24 INFO SparkContext: Invoking stop() from shutdown hook
19/03/09 11:02:24 INFO SparkUI: Stopped Spark web UI at http://192.168.0.4:4040

Я использую проверенное и истинное maven pom.xml - и соответствующие части spark показаны здесь:

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_${scala.binary.version}</artifactId>
        <version>${spark.version}</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-catalyst_${scala.binary.version}</artifactId>
        <version>${spark.version}</version>
        <scope>provided</scope>
    </dependency>

И затем требуемая заливка - которая является стандартной частью spark проектов

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <createDependencyReducedPom>false</createDependencyReducedPom>
                        <relocations>
                            <relocation>
                                <pattern>com.google.common</pattern>
                                <shadedPattern>shaded.com.google.common</shadedPattern>
                            </relocation>
                            <relocation>
                                <pattern>org.glassfish.hk2</pattern>
                            </relocation>

                        </relocations>
                        <transformers>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <manifestEntries>
                                    <Main-Class>a2a.TimeSeries</Main-Class>
                                    <Build-Number>1.0</Build-Number>
                                </manifestEntries>
                            </transformer>
                        </transformers>
                        <artifactSet>
                            <excludes>
                                <exclude>org.apache.spark:*</exclude>
                                <exclude>org.apache.hadoop:*</exclude>
                            </excludes>
                        </artifactSet>
                        <filters>
                            <filter>
                                <artifact>*.*</artifact>
                                <excludes>
                                    <!--<exclude>org.apache.maven:lib:tests</exclude>-->
                                    <exclude>log4j:log4j:jar:</exclude>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                    <exclude>META-INF/ECLIPSE*</exclude>
                                    <exclude>META-INF/license/*</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <minimizeJar>false</minimizeJar>
                    </configuration>
                </execution>
            </executions>
        </plugin>

1 Ответ

1 голос
/ 10 марта 2019

Класс StaticSQLConf является частью артефактного искрового катализатора _ $ {scala.binary.version}, который используется в качестве предоставляемой области maven. Следовательно, время работы искры не может его найти. Это должно быть скомпилировано.

   <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-catalyst_${scala.binary.version}</artifactId>
        <version>${spark.version}</version>
        <scope>compile</scope>
    </dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...