java - EMR Spark 在 java main 中工作,但不在 java 函数中工作

标签 java amazon-web-services apache-spark emr amazon-emr

我想知道为什么这样做:

public final class JavaSparkPi {

public static void main(String[] args) throws Exception {

    SparkConf sparkConf = new SparkConf().setMaster("yarn-cluster").setAppName("mySparkApp");
    JavaSparkContext jsc = new JavaSparkContext(sparkConf);
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0; i < 10 ; i++){
            list.add(i);
        }

        JavaRDD<Integer> dataSet = jsc.parallelize(list)
                .map(s->2*s)
                .map(s->5*s);

        int weirdStuff= dataSet.reduce((a, b) -> (a + b)/2);
        System.out.println("stuff is " + weirdStuff);
        jsc.stop();     

}
}

为什么不这样:

public final class JavaSparkPi {

    private void startWorkingOnMicroSpark() {
    SparkConf sparkConf = new SparkConf().setMaster("yarn-cluster").setAppName("mySparkApp");
    JavaSparkContext jsc = new JavaSparkContext(sparkConf);
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0; i < 10 ; i++){
            list.add(i);
        }

        JavaRDD<Integer> dataSet = jsc.parallelize(list)
                .map(s->2*s)
                .map(s->5*s);

        int weirdStuff = dataSet.reduce((a, b) -> (a + b)/2);
        System.out.println("weirdStuff is " + weirdStuff);
        jsc.stop();     
    }
public static void main(String[] args) throws Exception {

    JavaSparkPi jsp = new JavaSparkPi();
    jsp.startWorkingOnMicroSpark();

}  

}

我正在使用 EMR 开发 Spark。我在这两个项目之间发现的唯一区别是,一个将 spark 部分写在 main 中,另一个则没有。 我在 EMR 中将它们作为 spark 应用程序启动 --JavaSparkPi 类 争论。

这是失败的状态:

Statut :FAILED

Raison :

Fichier journal :s3://mynewbucket/Logs/j-3AKSZXK7FKMX6/steps/s-2MT0SB910U3TE/stderr.gz

Détails:Exception in thread "main" org.apache.spark.SparkException: Application application_1501228129826_0003 finished with failed status

Emplacement JAR : command-runner.jar

Classe principale : Aucun

Arguments : spark-submit --deploy-mode cluster --class JavaSparkPi s3://mynewbucket/Code/SparkAWS.jar

Action sur échec : Continuer

还有一个成功的:

Emplacement JAR : command-runner.jar
Classe principale : Aucun
Arguments : spark-submit --deploy-mode cluster --class JavaSparkPi 
s3://mynewbucket/Code/SparkAWS.jar
Action sur échec : Continuer

最佳答案

将那些Spark初始化方法放到main中。

SparkConf sparkConf = new SparkConf().setMaster("yarn-cluster").setAppName("mySparkApp"); JavaSparkContext jsc = new JavaSparkContext(sparkConf);

关于java - EMR Spark 在 java main 中工作,但不在 java 函数中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45369007/

相关文章:

amazon-web-services - 如何命名使用 cloudformation 模板创建的自定义托管策略

scala - 最简单程序的大型任务

java 从文本文件中删除具有特定元素的行

java - 将值从 Frege 传递到 Java 并返回

java - 使用键盘向下键在 Jpanel 上移动 BALL

bash - 可以在 AWS Lambda 函数中编写 bash 脚本吗

java - Method 和 Constructor<?> 都继承自 Member,都具有 getExceptionTypes() 方法。在这种情况下如何避免代码重复?

amazon-web-services - 条件表达式在 aws_security_group 资源导出 block terraform 中不起作用

apache-spark - 将 parquet 读入 spark 数据集忽略缺失的字段

java - Spark 在 UDF Java 中获取 WrappedArray<WrappedArray<Double>> 的值