Присоединяйтесь к производительности на платформе AWS упругие карту уменьшить куст


Я выполняю простой запрос соединения

 select count(*) from t1 join t2 on t1.sno=t2.sno 

Таблицы t1 и t2 имеют по 20 миллионов записей каждая, а столбец sno имеет строковый тип данных.

Табличные данные импортируются в HDFS из Amazon s3 в формате rcfile. Запрос занял 109 секунд с 15 большими экземплярами Amazon, однако он занимает 42 секунды на sql server с 16 ГБ оперативной памяти и 16 ядрами процессора.

Я что-нибудь упустил? Не могу понять, почему у меня низкая производительность на Amazon?

1 2

1 ответ:

Некоторые вопросы, которые помогут вам настроить производительность Hadoop:

  • Как выглядит использование IO в этих экземплярах? Возможно, большие экземпляры не являются правильным балансом CPU / Disk / Memory для работы.
  • Как хранятся ваши файлы? Это один файл или много небольших файлов? Hadoop не так горяч со многими небольшими файлами, даже если они комбинируются
  • Сколько редукторов вы запустили? Вы хотите иметь около 0.9*totalReduceCapacity как идеал
  • Насколько искривлен ваш данные? Если есть много записей с одним и тем же ключом, они все будут идти в один и тот же редуктор, и у вас будет O(n*n) верхняя граница в этом редукторе, если вы не будете осторожны.

Sql-сервер может быть хорош с 40-миллиметровыми записями, но подождите, пока у вас не будет 2-миллиметровых записей, и посмотрите, как это делается. Скорее всего, он просто сломается. Я бы рассматривал hive скорее как умную оболочку для Map Reduce, а не альтернативу реальной базе данных.

Также из опыта я думаю, что имея 15 c1.медиумы могли бы работать так же хорошо, как большие машины, если не лучше. большие машины не имеют правильного баланса процессора/памяти честно говоря.