Простое приложение Spark с проблемами MojoExecutionException

1

Я изучаю Apache Spark и пытаюсь запустить программу Spark в Java, но у меня возникают некоторые проблемы.
Я использую Maven для создания программы, и я создал новый проект maven. Вот pom.xml

  <groupId>spark</groupId>
  <artifactId>testspark</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>testspark</name>
  <url>http://maven.apache.org</url>
  <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <repositories>
     <repository>
       <id>Akka repository</id>
       <url>http://repo.akka.io/releases</url>
     </repository>
  </repositories>
  <dependencies>
    <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>3.8.1</version>
     <scope>test</scope>
   </dependency>
   <dependency> 
     <groupId>org.apache.spark</groupId>
     <artifactId>spark-core_2.10</artifactId>
     <version>0.9.0-incubating</version>
     </dependency>
  </dependencies>

И моя программа Spark в Java здесь:

public class SimpleApp{ 
    public static void main(String[] args) { 
            String logFile = "/usr/Java/spark-0.9.0/README.md"; 
            JavaSparkContext sc = new JavaSparkContext("local", "Simple App","/usr/Java/spark-0.9.0",new String[] { "target/testspark-0.0.1-SNAPSHOT.jar" }); 
            JavaRDD<String> logData = sc.textFile(logFile).cache(); 
            long numAs = logData.filter(new Function<String, Boolean>() { 
                    public Boolean call(String s) { 
                            return s.contains("a"); 
                    } 
            }).count(); 

            long numBs = logData.filter(new Function<String, Boolean>() { 
                    public Boolean call(String s) { 
                            return s.contains("b"); 
                    } 
            }).count(); 

            System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs); 
    } 

}

Я использую mvn package and mvn -X exec:java -Dexec.mainClass="spark.testspark.SimpleApp" для запуска программы. Я могу получить результат программы: Lines with a: 70, lines with b: 44, но после этого возникают проблемы следующим образом:

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3:java (default-cli) on project testspark: An exception occured while executing the Java class. null: InterruptedException -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3:java (default-cli) on project testspark: An exception occured while executing the Java class. null 
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108) 
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76) 
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116) 
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361) 
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155) 
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) 
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213) 
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:157) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
        at java.lang.reflect.Method.invoke(Method.java:606) 
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: org.apache.maven.plugin.MojoExecutionException: An exception occured while executing the Java class. null 
        at org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:345) 
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133) 
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
        ... 19 more 
Caused by: java.lang.InterruptedException 
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2017) 
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2052) 
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) 
        at org.apache.spark.scheduler.SparkListenerBus$$anon$2.run(SparkListenerBus.scala:42) 
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
root@ubuntu:~/workspace/testspark# mvn -X exec:java -Dexec.mainClass="spark.testspark.SimpleApp"

Я смущен этими проблемами. Есть идеи? Спасибо!

  • 0
    Вы пропустили включение pom.xml, я боюсь.
Теги:
maven
apache-spark

1 ответ

3

Я думаю, что вы забыли вызвать метод stop() JavaSparkContext в конце. Будет ли следующее сообщение об ошибке?

public class SimpleApp{ 
public static void main(String[] args) { 
        String logFile = "/usr/Java/spark-0.9.0/README.md"; 
        JavaSparkContext sc = new JavaSparkContext("local", "Simple App","/usr/Java/spark-0.9.0",new String[] { "target/testspark-0.0.1-SNAPSHOT.jar" }); 
        JavaRDD<String> logData = sc.textFile(logFile).cache(); 
        long numAs = logData.filter(new Function<String, Boolean>() { 
                public Boolean call(String s) { 
                        return s.contains("a"); 
                } 
        }).count(); 

        long numBs = logData.filter(new Function<String, Boolean>() { 
                public Boolean call(String s) { 
                        return s.contains("b"); 
                } 
        }).count(); 

        System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
        sc.stop();
  }
}
  • 0
    Я добавляю предложение к моей программе, и оно создает успех. Огромное спасибо. Но есть еще одно предупреждающее сообщение: [ПРЕДУПРЕЖДЕНИЕ] Не удалось уничтожить группу потоков org.codehaus.mojo.exec.ExecJavaMojo $ IsolatedThreadGroup [name = spark.testspark.SimpleApp, maxpri = 10] java.lang.IllegalThreadStateException
  • 0
    Извините, я не эксперт в Spark, просто подумал, что это требует закрытия полученных ресурсов (в данном случае потоков), поэтому было бы неплохо остановить его. Вы можете попробовать использовать последнюю стабильную версию (в настоящее время 0.9.1 в соответствии с их домашней страницей), возможно, она исчезнет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню