Конфигурация Presto

Когда я настраиваю кластер Presto и пытаюсь настроить производительность, мне интересно, есть ли более подробное руководство по настройке Presto, например как я могу контролировать, сколько ядер ЦП может использовать рабочий Presto. И это хорошая практика, если я запускаю несколько presto worker на одном сервере (в этом случае мне не нужен выделенный сервер для запуска координатора)?

Кроме того, я не совсем понимаю аргумент task.max-memory. Будет ли presto worker запускать несколько задач для одного запроса? Если да, может быть, я могу использовать task.max-memory вместе с аргументом -Xmx JVM для управления уровнем параллелизма?

Заранее спасибо.


person Rui Li    schedule 18.11.2013    source источник


Ответы (3)


Presto - это многопоточная программа на Java, которая прилагает все усилия, чтобы использовать все доступные ресурсы ЦП при обработке запроса (при условии, что входная таблица достаточно велика, чтобы гарантировать такой параллелизм). Вы можете искусственно ограничить количество ресурсов ЦП, которые Presto использует на уровне операционной системы, используя контрольные группы, привязку ЦП и т. Д.

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

Мы используем выделенного координатора в наших развертываниях с более чем 50 машинами, потому что мы обнаружили, что наличие запросов процесса координатора замедлит его, пока он выполняет работу по координации запросов, что отрицательно сказывается на общей производительности запросов. Для небольших кластеров выделение машины для координации, вероятно, будет пустой тратой ресурсов. Вам нужно будет провести несколько экспериментов с настройкой вашего кластера и рабочей нагрузкой, чтобы определить, какой способ лучше всего подходит для вашей среды.

Вы можете сделать так, чтобы один процесс Presto действовал и как координатор, и как рабочий, что может быть полезно для крошечных кластеров или в целях тестирования. Для этого добавьте это в файл etc/config.properties:

coordinator=true
node-scheduler.include-coordinator=true

Ваша идея запустить специальный процесс-координатор на машине, совместно используемой с рабочим процессом, интересна. Например, на машине с 16 процессорами вы можете использовать контрольные группы или привязку к процессору, чтобы выделить 2 ядра процессу координатора и ограничить рабочий процесс 14 ядрами. Мы никогда этого не пробовали, но это может быть хорошим вариантом для небольших кластеров.

Задача - это этап в плане запроса, который выполняется на работнике (интерфейс командной строки показывает список этапов во время выполнения запроса). Для такого запроса, как SELECT COUNT(*) FROM t, будет задача для каждой работы, которая выполняет сканирование таблицы и частичное агрегирование, и еще одна задача для одного рабочего для окончательной агрегации. Более сложные запросы, содержащие соединения, подзапросы и т. Д., Могут привести к выполнению нескольких задач на каждом рабочем узле для одного запроса.

person David Phillips    schedule 18.11.2013
comment
Спасибо за ответ Дэвид, очень информативно. На самом деле я хочу использовать несколько воркеров из-за этой проблемы issues.apache.org/jira/ просмотреть / HDFS-5276. Мы впервые столкнулись с этой проблемой с Spark, который также использует многопоточную модель. В любом случае, я думаю, что было бы лучше сделать доступное количество ядер настраиваемым. Что касается задачи, сколько задач рабочий начинает обрабатывать запрос? Если мне не нужно выполнять несколько запросов одновременно, могу ли я установить task.max-memory так же, как Xmx? - person Rui Li; 18.11.2013
comment
Интересно, спасибо за этот вопрос. Мы не видели этого в наших тестах, но обычно мы используем версию Hadoop для Facebook, которая могла бы это исправить. Если это окажется проблемой для Presto, мы будем работать над этим со своей стороны, вместо того, чтобы заставлять каждого конечного пользователя выполнять хаки, например запускать несколько рабочих процессов на одной машине. Наша философия для Presto заключается в том, что все должно работать в максимально возможной степени, чтобы вам не приходилось беспокоиться о подобных деталях при запуске Presto. - person David Phillips; 19.11.2013
comment
Задача имени в Presto используется иначе, чем в таких системах, как Hadoop. Например, при запуске SELECT COUNT(*) FROM t координатор сначала создаст задачи для рабочих для этапа сканирования таблицы, а затем назначит разбиения задаче для выполнения. Задача - это контейнер для работы. Таким образом, на каждом этапе запроса у рабочего всегда есть только одна задача. Количество потоков, используемых для одновременного выполнения разделений, контролируется task.shard.max-threads, но вам не нужно его менять. - person David Phillips; 19.11.2013
comment
В настоящее время Presto не имеет ограничений на количество одновременных запросов. Иногда мы видим десятки или сотни одновременных запросов в производственной среде без каких-либо проблем. Контроль количества процессоров, используемых для программы Java, лучше всего оставить операционной системе, учитывая, что ОС отвечает за планирование всех потоков. Невозможно сделать это из JVM. - person David Phillips; 19.11.2013
comment
Большое спасибо за помощь :) - person Rui Li; 19.11.2013
comment
привет, когда я выполняю какой-либо запрос с помощью Presto, я обнаружил это исключение в журнале координатора: ContinuousTaskInfoFetcher-20131121_021432_00008_jyezc.2.1-3017 com.facebook.presto.server.HttpRemoteTask Ошибка обновления задачи 20131121.S021432_00008_jimezeoutc.2: ConnectionTopyoutc.2 /192.168.150.108:3264 истекло время ожидания. Есть предложения, что может быть не так или как я могу увеличить время ожидания соединения? - person Rui Li; 26.11.2013
comment
Комментарии Stack Overflow для этого не подходят. Задайте этот вопрос в списке рассылки: groups.google.com/group/presto-users - person David Phillips; 28.11.2013

-Xmx должен быть больше, чем task.max-memory, или, по крайней мере, равен. в противном случае вы, скорее всего, столкнетесь с проблемой OOM, как я уже испытывал раньше. а также, начиная с Presto-0.113, они изменили способ, которым Presto управляет памятью запросов и соответствующими конфигурациями. перейдите по этой ссылке: https://prestodb.io/docs/current/installation/deployment.html

person linehrr    schedule 09.11.2016

Что касается вашего вопроса относительно "многих ядер ЦП, которые может использовать работник Presto", я думаю, что он контролируется параметром task.concurrency, который по умолчанию равен 16

person piggybox    schedule 09.12.2017