Я довольно новичок в Spark
, и я использую кластер в основном для целей паралеллизации. У меня есть файл размером 100 Мбайт, каждая строка которого обрабатывается некоторым алгоритмом, который является довольно тяжелой и длительной обработкой.Исходные данные перекоса для небольшого файла
Я хочу использовать кластер из 10 узлов и распараллелить обработку. Я знаю, что размер блока больше 100MB
, и я попытался переделать textFile
. Если я хорошо понимаю, это repartition
метод увеличивает количество разделов:
JavaRDD<String> input = sc.textFile(args[0]);
input.repartition(10);
Вопрос заключается в том, что при развертывании в кластере, только один узел эффективно обрабатывать. Как я могу управлять процессом параллельно?
Update 1: вот моя spark-submit
команда:
/usr/bin/spark-submit --master yarn --class mypackage.myclass --jars
myjar.jar
gs://mybucket/input.txt outfile
Update 2: После раздела, есть в основном 2 операции:
JavaPairRDD<String, String> int_input = mappingToPair(input);
JavaPairRDD<String, String> output = mappingValues(int_input, option);
output.saveAsTextFile("hdfs://...");
где mappingToPair(...)
является
public JavaPairRDD<String, String> mappingToPair(JavaRDD<String> input){
return input.mapToPair(new PairFunction<String, String, String>() {
public Tuple2<String, String> call(String line) {
String[] arrayList = line.split("\t", 2);
return new Tuple2(arrayList[0], arrayList[1]);
}
});
}
и mappingValues(...)
является метод следующего типа:
public JavaPairRDD<String,String> mappingValues(JavaPairRDD<String,String> rdd, final String option){
return rdd.mapValues(
new Function<String, String>() {
// here the algo processing takes place...
}
)
}
Возможно, добавьте еще код, описывающий, что происходит после передела, иначе вопрос не ясен. – Chobeat
также покажут нам, что вы запускали искру submit cmd. –
@UmbertoGriffo вот команда – Newben