如何在Web上运行Apache Spark作业后获得输出

时间:2014-10-11 13:18:36

标签: java web-services hadoop apache-spark

我是一名学习Hadoop和Apache Spark的学生。我想知道如何从网上获得Apache Spark Job的输出。

以下是如此简单的PHP代码,可以在网上运行Apache Spark Job,因为我只想测试它。

<?php
echo shell_exec("spark-submit --class stu.ac.TestProject.App --master spark://localhost:7077 /TestProject-0.0.1-SNAPSHOT.jar");
?>

以下是Apache Spark作业的示例Java代码。

public class App 
{
public static void main( String[] args )
{
    SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi");
    sparkConf.setMaster("spark://localhost:7077");
    JavaSparkContext jsc = new JavaSparkContext(sparkConf);

    int slices = (args.length == 1) ? Integer.parseInt(args[0]) : 2;
    int n = 100000 * slices;
    List<Integer> l = new ArrayList<Integer>(n);
    for (int i = 0; i < n; i++) {
        l.add(i);
    }
    JavaRDD<Integer> dataSet = jsc.parallelize(l, slices);

    JavaRDD<Integer> countRDD = dataSet.map(new Function<Integer, Integer>() {
        public Integer call(Integer arg0) throws Exception {
            double x = Math.random() * 2 - 1;
            double y = Math.random() * 2 - 1;
            return (x * x + y * y < 1) ? 1 : 0;
        }
    });

    int count = countRDD.reduce(new Function2<Integer, Integer, Integer>() {
        public Integer call(Integer arg0, Integer arg1) throws Exception {
            return arg0 + arg1;
        }
    });

    System.out.println("Pi is roughly " + 4.0 * count / n);
    jsc.stop();
}
}

我想获得标准输出,但在运行代码后我得到空输出。我在maven项目上构建了这个java代码,所以也检查了它在cmd模式下运行。

我该如何解决?

先谢谢你的回答,对不起我的英语不好。如果您不理解我的问题,请发表评论。

2 个答案:

答案 0 :(得分:6)

工作的输出可以保留在工作中。即使Spark很快,它也不会那么快,以至于它可以立即生成数据。作业在分布式群集上运行,这需要一些时间。

您必须将输出写入某处,通常是在数据库中,然后您可以从Web应用程序进行查询。您不能从您的网络应用程序开始工作,而应根据您的应用程序的需要安排工作。

如果您在Java,Scala或Python作业中运行作业,则可以直接检索其结果。使用PHP我不太确定。

答案 1 :(得分:6)

您可以将JobServer Api用于Apache Spark