我是一名学习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模式下运行。
我该如何解决?
先谢谢你的回答,对不起我的英语不好。如果您不理解我的问题,请发表评论。
答案 0 :(得分:6)
工作的输出可以保留在工作中。即使Spark很快,它也不会那么快,以至于它可以立即生成数据。作业在分布式群集上运行,这需要一些时间。
您必须将输出写入某处,通常是在数据库中,然后您可以从Web应用程序进行查询。您不能从您的网络应用程序开始工作,而应根据您的应用程序的需要安排工作。
如果您在Java,Scala或Python作业中运行作业,则可以直接检索其结果。使用PHP我不太确定。
答案 1 :(得分:6)
您可以将JobServer Api用于Apache Spark