为什么我的任务只在Spark集群中的一个worker中完成

时间:2015-04-18 02:51:44

标签: apache-spark

我构建了一个带有主服务器和2个从服务器的spark集群(其中一个slave和master在同一台机器上)。我修改了wordcount示例,以便在调用mapToPair()时可以输出一些消息。我把它提交给主人。但是只有一个工人在stdout中有输出。这是否只意味着一项工作完成任务?我的每个工人都有一个核心。我尝试在textFile()中制作1000个切片,但仍然不起作用。如何让两个工人完成任务?我犯了一些错误吗?

 SparkConf sparkConf = new SparkConf().setAppName("ORSIFTask").setMaster("spark://192.168.0.110:7077");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);    
ctx.addJar("/home/hadoop/ont-1.0-SNAPSHOT.jar");


JavaRDD<String> lines = ctx.textFile("hdfs://192.168.0.110:9000/features4.data",2).cache();
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
  @Override
  public Iterable<String> call(String s) {

    return Arrays.asList(SPACE.split(s));
  }
});

JavaPairRDD<String, String> ones = words.mapToPair(new PairFunction<String, String, String>() {
  @Override
  public Tuple2<String, String> call(String s) throws OWLOntologyCreationException {
    System.out.println("map:"+s);                
    return new Tuple2<String, String>(s, "thing");
  }
});

JavaPairRDD<String, String> counts = ones.reduceByKey(new Function2<String, String,String>() {    
  @Override
   public String call(String i1, String i2) {
     System.out.println("reduce:"+i1); 
     return i1;    
   }
});

List<Tuple2<String, String>> output = counts.collect();

1 个答案:

答案 0 :(得分:0)

1)检查SPARK_HOME/conf/slave文件或主WebUI是否列出了所有从站 2)您使用哪种群集模式?Println可能会在驱动程序中输出 3)RDD可能没有足够的分区 4)检查工作人员UI是否在执行作业时启动执行程序 5)增加默认数据并行化并检查。