У меня кластер из 5 узлов, каждый из которых имеет физическую память по 132 ГБ и управляется Cloudera. Однако оба свойства yarn.nodemanager.resource.memory-mb
и yarn.scheduler.maximum-allocation-mb
были установлены на 100 ГБ. Я отправляю работу с 5 исполнителями, 5 ядрами на исполнителя и 40 ГБ памяти на исполнителя. Этот код просто берет файл размером 16 ГБ, помещает его в RDD и кэширует следующим образом
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the file name");
String file = br.readLine();
// getting the context and spark configuration
SparkConf sparkConf = new SparkConf();
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
// getting the input file into JavaRDD of strings
JavaRDD<String> lines = ctx.textFile("hdfs:/root/utkarsh/stark/" + file).cache();
lines.count();
ctx.close();
} catch (IOException e) {
e.printStackTrace();
}
Во время работы я наблюдаю потребление физической памяти 3-мя узлами с 2 + 2 + 1 исполнителями соответственно. Пиковая память для узлов составляет 54, 26, 48 ГБ соответственно.
Почему память раздувается, тогда как мой ввод составляет всего 16 ГБ.
Заранее спасибо !!