Задача индексирования druid завершается с ошибкой OutOfMemory
Я создал кластер друидов и отправил задание на индексирование. Похоже, что происходит перекос редуктора, и зацикливание задач индексирования уменьшается на 99 %. это терпит неудачу с ошибкой ниже.
2018-03-27T21:14:30,349 INFO [task-runner-0-priority-0] org.apache.hadoop.mapreduce.Job - map 100% reduce 96%
2018-03-27T21:14:33,353 INFO [task-runner-0-priority-0] org.apache.hadoop.mapreduce.Job - map 100% reduce 97%
2018-03-27T21:15:18,418 INFO [task-runner-0-priority-0] org.apache.hadoop.mapreduce.Job - map 100% reduce 98%
2018-03-27T21:26:05,358 INFO [task-runner-0-priority-0] org.apache.hadoop.mapreduce.Job - map 100% reduce 99%
2018-03-27T21:37:04,261 INFO [task-runner-0-priority-0] org.apache.hadoop.mapreduce.Job - map 100% reduce 100%
2018-03-27T21:42:34,690 INFO [task-runner-0-priority-0] org.apache.hadoop.mapreduce.Job - Task Id : attempt_1522166154803_0010_r_000001_3, Status : FAILED
Container [pid=111411,containerID=container_1522166154803_0010_01_000388] is running beyond physical memory limits. Current usage: 7.9 GB of 7.4 GB physical memory used; 10.8 GB of 36.9 GB virtual memory used. Killing container.
Dump of the process-tree for container_1522166154803_0010_01_000388 :
|- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
|- 111411 111408 111411 111411 (bash) 1 2 115810304 696 /bin/bash -c /usr/lib/jvm/java-openjdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx6042m -Ddruid.storage.bucket=dish-druid-storage -Ddruid.storage.baseKey=druid/segments -Ddruid.s3.accessKey=AKIAIWKEBEEH6Y5LNU7Q -Ddruid.s3.secretKey=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 -Ddruid.storage.type=s3 -Djava.io.tmpdir=/mnt/yarn/usercache/hadoop/appcache/application_1522166154803_0010/container_1522166154803_0010_01_000388/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/containers/application_1522166154803_0010/container_1522166154803_0010_01_000388 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.root.logfile=syslog -Dyarn.app.mapreduce.shuffle.logger=INFO,shuffleCLA -Dyarn.app.mapreduce.shuffle.logfile=syslog.shuffle -Dyarn.app.mapreduce.shuffle.log.filesize=0 -Dyarn.app.mapreduce.shuffle.log.backups=0 org.apache.hadoop.mapred.YarnChild 10.176.225.139 35084 attempt_1522166154803_0010_r_000001_3 388 1>/var/log/hadoop-yarn/containers/application_1522166154803_0010/container_1522166154803_0010_01_000388/stdout 2>/var/log/hadoop-yarn/containers/application_1522166154803_0010/container_1522166154803_0010_01_000388/stderr
|- 111591 111411 111411 111411 (java) 323692 28249 11526840320 2058251 /usr/lib/jvm/java-openjdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx6042m -Ddruid.storage.bucket=dish-druid-storage -Ddruid.storage.baseKey=druid/segments -Ddruid.s3.accessKey=AKIAIWKEBEEH6Y5LNU7Q -Ddruid.s3.secretKey=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 -Ddruid.storage.type=s3 -Djava.io.tmpdir=/mnt/yarn/usercache/hadoop/appcache/application_1522166154803_0010/container_1522166154803_0010_01_000388/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/containers/application_1522166154803_0010/container_1522166154803_0010_01_000388 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.root.logfile=syslog -Dyarn.app.mapreduce.shuffle.logger=INFO,shuffleCLA -Dyarn.app.mapreduce.shuffle.logfile=syslog.shuffle -Dyarn.app.mapreduce.shuffle.log.filesize=0 -Dyarn.app.mapreduce.shuffle.log.backups=0 org.apache.hadoop.mapred.YarnChild 10.176.225.139 35084 attempt_1522166154803_0010_r_000001_3 388
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Я проверил мой yarn-site.xml и ниже моя конфигурация.
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>241664</value>
</property>
Ниже моя конфигурация индекса. Данные, которые я пытаюсь загрузить, предназначены только для дня 2018-04-04.
{
"type" : "index_hadoop",
"spec" : {
"dataSchema" : {
"dataSource" : "viewership",
"parser" : {
"type" : "hadoopyString",
"parseSpec" : {
"format" : "json",
"timestampSpec" : {
"column" : "event_date",
"format" : "auto"
},
"dimensionsSpec" : {
"dimensions": ["network_group","show_name","time_of_day","viewing_type","core_latino","dma_name","legacy_unit","presence_of_kids","head_of_hhold_age","prin","sys","tenure_years","vip_w_dvr","vip_wo_dvr","network_rank","needs_based_segment","hopper","core_english","star_status","day_of_week"],
"dimensionExclusions" : [],
"spatialDimensions" : []
}
}
},
"metricsSpec" : [
{
"type" : "count",
"name" : "count"
},
{
"type" : "longSum",
"name" : "time_watched",
"fieldName" : "time_watched"
},
{
"type" : "cardinality",
"name" : "distinct_accounts",
"fields" : [ "account_id" ]
}
],
"granularitySpec" : {
"type" : "uniform",
"segmentGranularity" : "DAY",
"queryGranularity" : "NONE",
"intervals" : [ "2017-04-03/2017-04-16" ]
}
},
"ioConfig" : {
"type" : "hadoop",
"inputSpec" : {
"type" : "static",
"paths" : "/user/hadoop/"
}
},
"tuningConfig": {
"type": "hadoop",
"partitionsSpec": {
"type": "hashed",
"targetPartitionSize": 4000000,
"assumeGrouped": true
},
"useCombiner": true,
"buildV9Directly": true,
"numBackgroundPersistThreads": 1
}
},
"hadoopDependencyCoordinates": ["org.apache.hadoop:hadoop-client:2.7.3", "org.apache.hadoop:hadoop-aws:2.7.3", "com.hadoop.gplcompression:hadoop-lzo:0.4.19"]
}
2 ответа
Я также столкнулся с той же проблемой в мои первые дни с Друидом М.Р. Джобом.
Свойство, установленное в (yarn.scheduler.maximum-alloc-mb: 241664), означает максимальный размер контейнера, который может быть выделен. Но здесь проблема заключается в том, какой размер контейнера карты / редуктора выделяется. Проверьте наличие свойств по умолчанию в mapreduce.map.memory.mb / mapreduce.reduce.memory.mb. Вы также должны настроить размер разделения, чтобы контролировать размер блока, обрабатываемого каждым контейнером.
Я использовал следующие "jobProperties" в Druid Index Job Json:
"jobProperties":{
"mapreduce.map.memory.mb" : "8192",
"mapreduce.reduce.memory.mb" : "18288",
"mapreduce.input.fileinputformat.split.minsize" : "125829120",
"mapreduce.input.fileinputformat.split.maxsize" : "268435456"
}
Либо вам нужно увеличить память или дать ей виртуальную память. ИЛИ лучший подход был бы -
Вы можете создать несколько заданий на загрузку, каждая с меньшей гранулярностью сегмента, например, на уровне дня
"intervals" : [ "2017-04-03/2017-04-04" ]
и так далее.