Я хочу обработать данные из файла HDFS, используя код Spark Java. При обработке файлов я выполняю простое преобразование, такое как замена новой строки пробелом и поиск шаблонов с помощью регулярных выражений из файла. Я использовал метод wholeTextFiles для чтения данных из файлов HDFS, но для обработки только 4 МБ файлов потребовалось 2 часа.
Spark-код:
public class TransformationOper {
public static void main(String[] args){
SparkConf sparkConf = new SparkConf().setAppName("Spark RDD Filter").setMaster("local[2]")
.set("spark.yarn.queue","llap").set("spark.executor.instances", "4").set("spark.executor.memory","4g")
.set("spark.executor.cores", "2").set("spark.driver.memory","2g")
.set("sun.io.serialization.extendedDebugInfo","true").set("sun.io.serialization.extendedDebugInfo","true");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
JavaPairRDD<String, String> textFile = sc.wholeTextFiles("hdfs://sandbox-hdp.hortonworks.com:8020"+args[0]);
JavaRDD<String> re = textFile.map( t -> t._2);
JavaRDD<String> r2 = re.map( s -> s.replaceAll("\r\n|\n", " "));
r2.saveAsTextFile("hdfs://sandbox-hdp.hortonworks.com:8020"+args[1]);
sc.close();
}
}
Я пытался увеличить память искрового исполнителя до 15g с 4 экземплярами, но это заняло 2 часа. У меня есть 1 мастер с памятью 56 ГБ, 8 ядер и 3 рабочих с памятью 28 ГБ, 8 ядер. Как повысить производительность работы с искрой, используя эти конфигурации узлов.
Спасибо,