2014-09-29 3 views
3

Я выполняю довольно большую задачу на моем кластере из 4 узлов. Я читаю около 4 ГБ отфильтрованных данных из одной таблицы и запускаю обучение и прогнозирование Naïve Baye. У меня есть сервер области HBase, работающий на одной машине, которая отделена от искрового кластера, работающего в режиме честного планирования, хотя HDFS работает на всех машинах.Расписание задач с искровым

Выполняя, я испытываю странное распределение задач по количеству активных задач в кластере. Я заметил, что только одна активная задача или не более двух задач выполняется на одной/двух машинах в любой момент времени, а другая сидит без дела. Мое предположение состояло в том, что данные в RDD будут разделены и обработаны на всех узлах для операций, таких как счетчик и отчетливый и т. Д. Почему все узлы не используются для больших задач одного задания? Имеет ли HBase на отдельной машине какое-либо отношение к этому?

ответ

1

Некоторые вещи, чтобы проверить:

  1. Предположительно вы читаете в ваших данных с помощью hadoopFile() или hadoopRDD(): рекомендуется установить [необязательный] параметр minPartitions, чтобы убедиться, что количество разделов равно числу узлов вы хотите использовать.
  2. Как вы создаете другое приложение RDD s в своем приложении, проверьте количество разделов этих RDD и насколько равномерно распределены данные по ним. (Иногда операция может создать RDD с таким же количеством разделов, но может сделать данные в ней плохо неуравновешенными.) Вы можете проверить это, вызвав метод glom(), распечатав количество элементов полученного RDD (количество разделов) а затем прокручивать его и печатать количество элементов каждого из массивов. (Это вводит сообщение, поэтому не оставляйте его в своем производственном коде.)
  3. Многие вызовы API на RDD имеют необязательные параметры для установки количества разделов, а затем есть такие вызовы, как repartition() и coalesce(), которые могут изменять разбиение на разделы , Используйте их, чтобы исправить проблемы, которые вы обнаружите, используя описанную выше технику (но иногда это доказывает необходимость переосмысления вашего алгоритма.)
  4. Убедитесь, что вы фактически используете RDD s для всех ваших больших данных и не случайно оказались с некоторой большой структурой данных на главном сервере.

Все это предполагает, что у вас есть проблемы с перекосом данных, а не что-то более зловещее. Это не гарантирует, что это правда, но вам нужно проверить ситуацию с данными, прежде чем искать что-то сложное. Легко перекосить данные, особенно учитывая гибкость Spark, и это может стать настоящим беспорядком.