Проблемы с производительностью Redshift Spectrum

Я использую спектр Redhshift. Я создал внешнюю таблицу и загрузил файл данных csv на S3 с примерно 5,5 миллионами записей. Если запустить запрос к этой внешней таблице, это займет ~ 15 секунд, тогда как если я запустил тот же запрос на Amazon redshift, я получил тот же результат через ~ 2 секунды. Что может быть причиной такого отставания в производительности, когда AWS утверждает, что это очень высокопроизводительная платформа. Пожалуйста, предложите решение для той же производительности с использованием спектра.


person Pratik Rawlekar    schedule 06.07.2017    source источник
comment
У меня нет большого опыта работы с Redshift Spectrum, но это кажется вполне разумным? Разница в том, что Redshift поддерживается инстансами или жесткими дисками EBS, а Spectrum работает поверх S3. Я не ожидал, что они будут сопоставимы. Spectrm разработан для аналитики PB и выше, что даже близко не было бы возможно в Redshift или Hadoop.   -  person Henry    schedule 06.07.2017
comment
Redshift не использует EBS, это фактически хранилище экземпляров. Я знаю, что локальное хранилище, которое они используют, трудно определить количественно, но вот это, другими словами: если у вас есть активный кластер хранилища данных Single Node XL с 2 ТБ хранилища локальных экземпляров из aws.amazon.com/redshift/faqs   -  person John    schedule 03.01.2021


Ответы (4)


Для оптимизации производительности посмотрите чтобы понять ваш запрос.

На данный момент лучшая производительность - это если у вас не один файл CSV, а несколько. Обычно можно сказать, что вы получаете отличную производительность, если количество файлов в запросе хотя бы примерно на порядок больше, чем количество узлов вашего кластера.

Кроме того, если вы используете файлы Parquet, вы получаете преимущество столбчатого формата на S3, а не чтение CSV, который будет читать весь файл из S3, что также снижает ваши затраты.

Вы можете использовать сценарий < / a> для преобразования данных в Parquet:

person grundprinzip    schedule 06.07.2017

Ответ с форума AWS следующим образом:

Я понимаю, что у вас такой же запрос выполняется на Redshift и Redshift Spectrum. Однако результаты разные: один запуск за 2 секунды, другой - примерно за 15 секунд.

Прежде всего, мы должны согласиться с тем, что и Redshift, и Spectrum - это разные сервисы, разработанные по-разному для разных целей. Их внутренняя структура сильно отличается друг от друга, в то время как Redshift полагается на хранилище EBS, Spectrum работает напрямую с S3. Запросы Redshift Spectrum используют массивный параллелизм для очень быстрого выполнения с большими наборами данных. Большая часть обработки происходит на уровне Redshift Spectrum, и большая часть данных остается в Amazon S3.

Spectrum также предназначен для работы с петабайтами структурированных и полуструктурированных данных из файлов в Amazon S3 без необходимости загружать данные в таблицы Amazon Redshift, в то время как Redshift предлагает вам возможность хранить данные эффективно и с высокой степенью оптимизации. ключей распределения и сортировки.

AWS не рекламирует Spectrum как более быструю альтернативу Redshift. Мы предлагаем Amazon Redshift Spectrum в качестве дополнительного решения для обеспечения доступа к данным, хранящимся в Amazon S3, без необходимости загружать их в Redshift (аналогично Amazon Athena).

Что касается производительности запросов, к сожалению, мы не можем гарантировать улучшение производительности, поскольку слой Redshift Spectrum создает планы запросов, полностью отличные от тех, которые создаются интерпретатором ядра СУБД Redshift. Этой конкретной причины было бы достаточно, чтобы препятствовать любому сравнению производительности запросов между этими сервисами, поскольку это несправедливо ни к одной из них.

Что касается вашего вопроса об узлах на лету, Spectrum добавляет их в зависимости от требований ваших запросов, Redshift Spectrum потенциально может использовать тысячи экземпляров, чтобы воспользоваться преимуществами массовой параллельной обработки. Однако не существует каких-либо конкретных критериев, вызывающих такое поведение, учитывая, что, следуя лучшим практикам о том, как улучшить производительность запросов [1] и как создавать файлы данных для запросов [2], вы потенциально можете улучшить общие показатели Spectrum. представление.

Напоследок я хотел бы указать на некоторую интересную документацию, чтобы немного подробнее разъяснить вам, как добиться лучших улучшений производительности. См. Ссылки в конце!

person Pratik Rawlekar    schedule 05.04.2018
comment
Ссылки в конце? Spectrum использует хранилище экземпляров, а не EBS. Диски фиксированного размера, локальное внутреннее хранилище, дублированные данные между вычислительными узлами и активный кластер хранилища данных Single Node XL с 2 ТБ хранилища локальных экземпляров, от aws.amazon.com/redshift/faqs - person John; 07.01.2021

Таких результатов следовало ожидать. Вся причина использования Amazon Redshift заключается в том, что он хранит данные с высокой степенью оптимизации для обеспечения быстрых запросов. Данные, хранящиеся за пределами Redshift, не будут работать так быстро.

Amazon Redshift Spectrum предназначен для предоставления доступа к данным, хранящимся в Amazon S3, без необходимости загружать их в Redshift (аналогично Amazon Athena), но не дает никаких гарантий производительности.

person John Rotenstein    schedule 07.07.2017

Я несколько поздно на это отвечу. По состоянию на февраль 2018 г. AWS поддерживает запросы AWS Spectrum к файлам в столбчатых форматах, таких как Parquet, ORC и т. Д. В вашем случае вы сохраняете файл как .CSV. CSV основан на строках, что приводит к извлечению всей строки для любого запрошенного поля. Я предлагаю вам преобразовать файлы из .csv в формат Parquet перед запросом. Это, безусловно, приведет к гораздо более высокой производительности. Подробная информация из AWS: Amazon Redshift Spectrum

person Pravs_thedataguy    schedule 12.02.2018