我对Spark非常新,我主要使用集群来实现并行化目的。我有一个100MB的文件,其中的每一行都通过一些算法进行处理,这是相当繁重和长时间的处理。用于小文件的spark重新分区数据
我想使用10节点群集并行处理。我知道块大小超过100MB,我试图重新分区textFile。如果我没有理解好,这repartition方法增加分区的数量:
JavaRDD input = sc.textFile(args[0]);
input.repartition(10);
的问题是,当我部署到集群中,只有一个节点被有效地处理。我怎样才能设法平行处理文件?
更新1:这里是我的命令:
/usr/bin/spark-submit --master yarn --class mypackage.myclass --jars
myjar.jar
gs://mybucket/input.txt outfile
更新2:分区后,基本上有两种操作:
JavaPairRDD int_input = mappingToPair(input);
JavaPairRDD output = mappingValues(int_input, option);
output.saveAsTextFile("hdfs://...");
其中mappingToPair(...)是
public JavaPairRDD mappingToPair(JavaRDD input){
return input.mapToPair(new PairFunction() {
public Tuple2 call(String line) {
String[] arrayList = line.split("\t", 2);
return new Tuple2(arrayList[0], arrayList[1]);
}
});
}
和mappingValues(...)是以下类型的方法:
public JavaPairRDD mappingValues(JavaPairRDD rdd, final String option){
return rdd.mapValues(
new Function() {
// here the algo processing takes place...
}
)
}
2016-12-14
Newben
+0
可能会添加更多代码来描述重新分区后发生的情况,否则问题不明确。 –
+0
也向我们展示了你已经启动的spark提交cmd。 –
+0
@UmbertoGriffo这里的命令是 –