Spark работает медленнее с аппаратным увеличением

Я пытаюсь найти подходящий размер оборудования для моей работы в Spark. Насколько я понимаю, увеличение количества машин может помочь ускорить мою работу, учитывая тот факт, что в моей работе нет сложной операции действия и, следовательно, возможно небольшое количество вычислений в программе драйвера . Тем не менее, я наблюдаю, что скорость выполнения задания снижается при добавлении ресурсов в Spark. Я могу воспроизвести этот эффект, используя следующую простую работу:

  • Загрузка текстового файла (~ 100 Гб) из HDFS
  • Выполнение простого преобразования «фильтр» в СДР, это выглядит следующим образом:

    JavaRDD<String> filteredRDD = rdd.filter(new Function<String, Boolean>() {
        public Boolean call(String s) {
            String filter = "FILTER_STRING";
            return s.indexOf(filter) > 0 ? true : false; 
       }
    
  • Выполнение действия count () для результата

Проблема масштабирования проявляется, когда я увеличиваю количество машин в кластере от 4 до 8. Вот некоторые подробности об окружающей среде:

  • Каждый исполнитель настроен на использование 6 ГБ памяти. Также HDFS размещается на тех же машинах.
  • Каждая машина имеет 24 ГБ ОЗУ в общей сложности и 12 ядер (настроено на использование 8 для исполнителей Spark).
  • Spark находится в кластере YARN.

Есть какие-нибудь идеи, почему я не получаю ту степень масштабируемости, которую ожидаю от Spark?

10
задан asaad 14 March 2016 в 14:27
поделиться