Apache Drill: как решить - RESOURCE ERROR: один или несколько узлов исчерпали память во время выполнения запроса? - PullRequest
0 голосов
/ 24 октября 2018

Я использую Apache Drill версию 1.14 в windows системе и запускаю Drill с помощью команды:

sqlline.bat -u "jdbc:drill:zk=local"

Я пытаюсь execute a join query на двух compressedи archived CSV файлы.

Запрос:

SELECT  *  FROM dfs.`C:\Users\admin\Desktop\DRILL_FILES\csvFileParquet\TBL_MOREDATA-20180924181406.tar.gz` AS Table0 INNER JOIN dfs.`C:\Users\admin\Desktop\DRILL_FILES\csvFileParquet\TBL_MOREDATA1-20180924181406.tar.gz` AS Table1  ON  Table0.columns[0]=Table1.columns[0]

Но из-за нехватки памяти произошла ошибка:

org.apache.drill.common.exceptions.UserRemoteException: RESOURCE ERROR: One or more nodes ran out of memory while executing the query. Unable to allocate buffer of size 131072 (rounded from 86104) due to memory limit (630194176). Current allocation: 630108434 Fragment 0:0 [Error Id: 585c0644-5fd5-446e-b9b3-d48e0771eb2a on DESKTOP-SM3E3KM:31010]

Чтобы устранить проблему, я попытался обновить файл config\drill-env.sh, нопроблема остается той же, и похоже, что обновление файла сценария не отражает изменения, потому что я пытаюсь увеличить ПРЯМОЙ ПАМЯТЬ за пределы системной памяти (ОЗУ), каждый раз, когда сверление запускается мирно.Даже не жалуясь, что вы превысили память, поэтому, похоже, изменения не отражают.

export DRILLBIT_MAX_PROC_MEM=12G
export DRILL_HEAP=2G
export DRILL_MAX_DIRECT_MEMORY=10G

, тогда как основная память моей системы составляет всего 8 ГБ.

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

alter session set `planner.enable_hashagg` = false;  
alter session set `planner.enable_hashjoin` = false;
alter session set planner.width.max_per_node=3; 
alter system set planner.width.max_per_query = 100;

1 Ответ

0 голосов
/ 24 октября 2018

На основе doc Drill поддерживает только чтение сжатых файлов, но не архивирование.Вы можете создать билет Jira для его реализации.Детализация возвращает нечитаемые данные для первой строки в случае чтения архивированного сжатого файла CSV.Таким образом, вы можете использовать offset 1.

Drill использует прямую память для хранения партий.Таким образом, для операций JOIN требуется больше прямой памяти.Уменьшение параллелизма может привести к меньшему потреблению памяти:
установить planner.width.max_per_node (и дополнительно planner.width.max_per_query в 1.
Отключить использование оператора HashJoin: planner.enable_hashjoin.
Подробнее см. В Документация по детализации.
Также рассмотрите возможность включения опции planner.memory.enable_memory_estimation.

Чтобы проверить, применяются ли ваши конфиги из drill-env.sh, выполните следующий запрос:

select * from sys.memory;
...