[После нескольких ответов и комментариев я задал новый вопрос, основанный на полученных здесь знаниях: Недостаточно памяти в Hive / tez с LATERAL VIEW json_tuple]
Один из моих запросов постоянно выдает ошибку:
ERROR : Status: Failed
ERROR : Vertex failed, vertexName=Map 1, vertexId=vertex_1516602562532_3606java.lang.OutOfMemoryError: Java heap space
03, diagnostics=[Task failed, taskId=task_1516602562532_3606java.lang.OutOfMemoryError: Java heap space
03_000001, diagnostics=[TaskAttempt 0 failed, info=[Container container_e113_1516602562532_3606_01_000008 finished with diagnostics set to [Container failed, exitCode=255. Exception from container-launch.
Container id: container_e113_1516602562532_3606_01_000008
Exit code: 255
Stack trace: ExitCodeException exitCode=255:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:933)
at org.apache.hadoop.util.Shell.run(Shell.java:844)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:1123)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:237)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:317)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:83)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Container exited with a non-zero exit code 255
]], TaskAttempt 1 failed, info=[Error: Failure while running task:java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:173)
Ключевое слово здесь, кажется, java.lang.OutOfMemoryError: Java heap space
.
Я огляделся, но ничего из того, что я думал, что понял из Tez, мне не помогает:
- Yarn-site / yarn.nodemanager.resource.memory-mb увеличен до максимума => Я использую всю доступную память
- yarn-site / yarn.scheduler.maximum-allocation-mb: то же, что и yarn.nodemanager.resource.memory-mb
- пряжа-сайт / пряжа.scheduler.minimum-allocation-mb = 1024
- hive-site / hive.tez.container.size = 4096 (кратное yarn.scheduler.minimum-allocation-mb)
В моем запросе 4 маппера, 3 работают очень быстро, 4-й каждый раз умирает. Вот графическое представление запроса Tez:
Из этого изображения:
- таблица контактов имеет 150 млн строк, 283 ГБ данных, сжатых ORC (есть одно большое поле json с боковым просмотром)
- таблица m имеет 1 млн строк, 20 МБ сжатых данных ORC
- таблица c имеет 2k строк, ‹1MB сжатый ORC
- таблица e имеет 800 тыс. строк, 7 ГБ сжатого ORC
- e соединяется ЛЕВОЙ СОЕДИНЕНИЕМ со всеми остальными таблицами
e и contact разделены, и в предложении WHERE выбирается только один раздел.
Таким образом, я попытался увеличить количество карт:
- tez.grouping.max-size: по умолчанию 650 МБ, даже если я уменьшу его до - tez.grouping.min-size (16 МБ), это не имеет значения
- tez.grouping.split-count даже увеличенный до 1000 не имеет значения
- tez.grouping.split-wave 1.7 по умолчанию, даже увеличенный до 5 без разницы
Если это актуально, вот еще несколько настроек памяти:
- mapred-site / mapreduce.map.memory.mb = 1024 (минимальный размер контейнера)
- mapred-site / mapreduce.reduce.memory.mb = 2048 (2 * минимальный размер контейнера)
- mapred-site / mapreduce.map.java.opts = 819 (0,8 * минимальный размер контейнера)
- mapred-site / mapreduce.reduce.java.opts = 1638 (0,8 * mapreduce.reduce.memory.mb)
- mapred-site / yarn.app.mapreduce.am.resource.mb = 2048 (2 * минимальный размер контейнера)
- mapred-site / yarn.app.mapreduce.am.command-opts = 1638 (0,8 * yarn.app.mapreduce.am.resource.mb)
- mapred-site / mapreduce.task.io.sort.mb = 409 (0,4 * минимальный размер контейнера)
Насколько я понимаю, tez может разделить работу на множество нагрузок, что займет много времени, но в конечном итоге завершится. Я ошибаюсь, или есть способ, который я не нашел?
контекст: hdp2.6, 8 узлов данных с оперативной памятью 32 ГБ, запрос с использованием короткого бокового обзора на основе json, запущенного через beeline.