При запуске в кластере сообщалось о следующей ошибке: Ошибка: ошибка при обработке оператора: FAILED: ошибка выполнения, код возврата 2 из org.apache.hadoop.hive.ql.exec.mr.MapRedTask (state=08S01,code=) 2)
Затем я проверил логи пряжи по идентификатору задания и обнаружил следующую ошибку: FATAL [main] org.apache.hadoop.mapred.YarnChild: ошибка при запуске дочернего элемента: java.lang.OutOfMemoryError: превышен предел служебных данных GC
Оказывается, память переполнилась, поскольку объем данных был слишком большим, что привело к нехватке памяти на этапе сопоставления. На данный момент добавьте оператор для установки параметров в операторе SQL.
set mapreduce.map.memory.mb=10150;
set mapreduce.map.java.opts=-Xmx6144m;
Конечно, такая ситуация может возникнуть и на этапе сокращения.
set mapreduce.reduce.memory.mb=10150;
set mapreduce.reduce.java.opts=-Xmx8120m;
Значение параметра регулируется самостоятельно, просто установите его в соответствии со своими потребностями.
Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. GC overhead limit exceeded
Обычно карте не хватает памяти при чтении данных из среза, поэтому:
1. Увеличить количество редукторов 2. Группировка по асимметрии данных 3. Используйте большие очереди
set mapreduce.job.queuename=hive;
set mapred.reduce.tasks=300;
set hive.optimize.skewjoin = true;
Ошибка выполнения Hive org.apache.hadoop.yarn.Exceptions.YarnRuntimeException: java.lang.InterruptedException: сон прерван
Журнал ошибок выглядит следующим образом: (Должны быть случаи, когда информация об ошибке неточна и не может точно определить место возникновения проблемы)
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.lang.InterruptedException: sleep interrupted
at org.apache.hadoop.mapred.ClientServiceDelegate.invoke(ClientServiceDelegate.java:348)
at org.apache.hadoop.mapred.ClientServiceDelegate.getJobStatus(ClientServiceDelegate.java:428)
at org.apache.hadoop.mapred.YARNRunner.getJobStatus(YARNRunner.java:568)
at org.apache.hadoop.mapreduce.Job$1.run(Job.java:323)
at org.apache.hadoop.mapreduce.Job$1.run(Job.java:320)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.Job.updateStatus(Job.java:320)
at org.apache.hadoop.mapreduce.Job.getJobState(Job.java:352)
at org.apache.hadoop.mapred.JobClient$NetworkedJob.getJobState(JobClient.java:300)
at org.apache.hadoop.hive.ql.exec.mr.HadoopJobExecHelper.progress(HadoopJobExecHelper.java:244)
at org.apache.hadoop.hive.ql.exec.mr.HadoopJobExecHelper.progress(HadoopJobExecHelper.java:549)
at org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:438)
at org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:137)
at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:160)
at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:88)
at org.apache.hadoop.hive.ql.exec.TaskRunner.run(TaskRunner.java:75)
Caused by: java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at org.apache.hadoop.mapred.ClientServiceDelegate.invoke(ClientServiceDelegate.java:345)
... 17 more
Total MapReduce CPU Time Spent: -2 msec
Job Submission failed with exception 'org.apache.hadoop.yarn.exceptions.YarnRuntimeException(java.lang.InterruptedException: sleep interrupted)'
Или следующим образом:
2021-10-31 09:00:11,340 [Thread-72] ERROR com.hadoop.compression.lzo.GPLNativeCodeLoader - Could not load native gpl library
java.lang.UnsatisfiedLinkError: /home/pirate/dev/disk-5/tmp/yarn-local/usercache/pirate/appcache/application_1635150008466_34289/container_1635150008466_34289_01_000001/tmp/unpacked-3959672880919352106-libgplcompression.so: /home/pirate/dev/disk-5/tmp/yarn-local/usercache/pirate/appcache/application_1635150008466_34289/container_1635150008466_34289_01_000001/tmp/unpacked-3959672880919352106-libgplcompression.so: failed to map segment from shared object: Operation not permitted
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
at com.hadoop.compression.lzo.GPLNativeCodeLoader.<clinit>(GPLNativeCodeLoader.java:51)
at com.hadoop.compression.lzo.LzoCodec.<clinit>(LzoCodec.java:71)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:2134)
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2099)
at org.apache.hadoop.io.compress.CompressionCodecFactory.getCodecClasses(CompressionCodecFactory.java:132)
at org.apache.hadoop.io.compress.CompressionCodecFactory.<init>(CompressionCodecFactory.java:179)
at org.apache.hadoop.mapred.lib.CombineFileInputFormat.isSplitable(CombineFileInputFormat.java:159)
at org.apache.hadoop.mapred.lib.CombineFileInputFormat.isSplitable(CombineFileInputFormat.java:151)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getMoreSplits(CombineFileInputFormat.java:283)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:239)
at org.apache.hadoop.mapred.lib.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:75)
at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getSplits(HadoopShimsSecure.java:309)
at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getCombineSplits(CombineHiveInputFormat.java:470)
at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getSplits(CombineHiveInputFormat.java:571)
at org.apache.hadoop.mapreduce.JobSubmitter.writeOldSplits(JobSubmitter.java:328)
at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:320)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:575)
at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:570)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:570)
at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:561)
at org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:432)
at org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:137)
at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:160)
at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:88)
at org.apache.hadoop.hive.ql.exec.TaskRunner.run(TaskRunner.java:75)
2021-10-31 09:00:11,341 [Thread-72] ERROR com.hadoop.compression.lzo.LzoCodec - Cannot load native-lzo without native-hadoop
Проверив скрипт hive, мы обнаружили, что параметры оптимизации, указанные Hive, следующие:
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapred.output.compression.type=BLOCK;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partition=true;
set hive.auto.convert.join=true;
set mapreduce.map.memory.mb=40960;
set mapreduce.reduce.memory.mb=40960;
set mapred.child.java.opts=-Xmx1536m;
set mapreduce.job.reduce.slowstart.completedmaps=0.8;
set hive.exec.parallel=true;
Учтите, что это может быть вызвано слишком большой конфигурацией параметра mapreduce.map.memory.mb или mapreduce.reduce.memory.mb. Эти два параметра представляют размер памяти, который необходимо применить к контейнеру пряжи. Найдите пряжу Hadoop. -site.xml файл конфигурации:
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>30720</value>
</property>
Поэтому я скорректировал вышеуказанные параметры в пределах этого диапазона параметров, повторно отправил сценарий и обнаружил, что сценарий был выполнен успешно;
Подведите итог: Настройка параметра переполнения кучи JVM на этапе Mapper/Reducer В настоящее время MapReduce в основном управляет памятью через два групповых параметра: (увеличьте следующие параметры)
Maper:
mapreduce.map.java.opts=-Xmx2048m (параметр по умолчанию, указывающий память кучи jvm, обратите внимание, что это Mapreduce, а не Mapred)
mapreduce.map.memory.mb=2304 (память контейнера)
Reducer:
mapreduce.reduce.java.opts=-=-Xmx2048m (параметр по умолчанию, указывающий память кучи jvm)
mapreduce.reduce.memory.mb=2304 (память контейнера)
Примечание. Поскольку в режиме контейнера пряжи задача карты/сокращения выполняется в контейнере, размер упомянутого выше файла mapreduce.map(reduce).memory.mb больше, чем размер файла mapreduce.map(reduce).java. значение опций. mapreduce.{map|reduce}.java.opts может установить максимальное использование кучи JVM через Xmx. Обычно оно устанавливается в 0,75 раза больше, чем Memory.mb, поскольку необходимо зарезервировать некоторое пространство для кода Java и т. д.
Ссылка: https://blog.csdn.net/random0815/article/details/84944815. https://blog.csdn.net/qq_35896718/article/details/127783938 https://blog.51cto.com/u_15127593/4522219