Google DataProc Hive и Presto запрос не работает - PullRequest
1 голос
/ 03 мая 2019

У меня есть кластер Google DataProc с Presto, установленным в качестве дополнительного компонента. Я создаю внешнюю таблицу в Hive, и ее размер составляет ~ 1 ГБ. В то время как таблица может быть запрошена (например, оператор groupby, отдельный и т. Д. Успешны), у меня есть проблемы с выполнением простого select * from tableA с Hive и Presto:

  1. Для Hive, если я вошел в мастер-узел кластера и запустил запрос из командной строки Hive, он завершился успешно. Однако, когда я запускаю следующую команду с моего локального компьютера:

gcloud dataproc jobs submit hive --cluster $CLUSTER_NAME --region $REGION --execute "SELECT * FROM tableA;"

Я получаю следующую ошибку:

Исключение в потоке "main" java.lang.OutOfMemoryError: пространство кучи Java ОШИБКА: (gcloud.dataproc.jobs.submit.hive) Задание [3e165c0edcda4e35ad0d5f62b77725bc] вошло в состояние [ОШИБКА] во время ожидания [ВЫПОЛНЕНО].

Хотя я обновил конфигурации в mapred-site.xml как:

mapreduce.map.memory.mb=9000;
mapreduce.map.java.opts=-Xmx7000m;
mapreduce.reduce.memory.mb=9000;
mapreduce.reduce.java.opts=-Xmx7000m;
  1. Для Presto аналогично работают такие операторы, как groupBy и отдельная работа. Тем не менее, для select * from tableA, каждый раз он просто висит вечно со скоростью около 60% до истечения времени ожидания. И независимо от того, запускаюсь ли я с локального компьютера или с главного узла кластера, у меня возникает одна и та же проблема.

Я не понимаю, почему такая маленькая внешняя таблица может иметь такую ​​проблему. Любая помощь приветствуется, спасибо!

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Двоичный файл CLI Presto /usr/bin/presto указывает встроенный аргумент jvm -Xmx (он использует некоторые приемы для начальной загрузки себя как двоичного файла java); к сожалению, этот -Xmx обычно не выбирается из /opt/presto-server/etc/jvm.config, как настройки для фактического presto-server.

В вашем случае, если вы выбираете все из паркетного стола 1G, вы, вероятно, на самом деле имеете дело с чем-то вроде несжатого текста 6G, и вы пытаетесь передать все это на консольный вывод. Это, вероятно, также не будет работать с отправкой заданий в Dataproc, потому что потоковый вывод предназначен для распечатки удобочитаемых объемов данных и значительно замедлит при работе с не человеческими объемами данных. .

Если вы все еще хотите попробовать сделать это с CLI, вы можете запустить:

sudo sed -i "s/Xmx1G/Xmx5G/" /usr/bin/presto

Чтобы изменить настройки jvm для интерфейса командной строки на главном устройстве, прежде чем запускать его резервное копирование. Возможно, вы захотите затем направить вывод в локальный файл вместо потоковой передачи на консоль, потому что вы не сможете прочитать 6G текста, передаваемого через экран.

1 голос
/ 04 мая 2019

Думаю, проблема в том, что вывод gcloud dataproc jobs submit hive --cluster $CLUSTER_NAME --region $REGION --execute "SELECT * FROM tableA;" проходил через сервер Dataproc, который OOMed.Чтобы избежать этого, вы можете запрашивать данные из кластера напрямую, не проходя через сервер.

Попробуйте выполнить Руководство по Dataproc Presto - запросы CLI Presto , запустите эти команды с локального компьютера:

gcloud compute ssh <master-node> \
    --project=${PROJECT} \
    --zone=${ZONE} \
    -- -D 1080 -N
./presto-cli \
    --server <master-node>:8080 \
    --socks-proxy localhost:1080 \
    --catalog hive \
    --schema default
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...