[HADOOP] Hadoop 유출 실패
HADOOPHadoop 유출 실패
저는 현재 Hadoop 0.21.0, 985326 및 6 개의 작업자 노드와 헤드 노드 클러스터를 사용하는 프로젝트 작업을하고 있습니다. 일반 mapreduce 작업을 제출하는 것은 실패하지만, 나는 그 이유를 모른다. 아무도이 예외를 전에 보았습니까?
org.apache.hadoop.mapred.Child: Exception running child : java.io.IOException: Spill failed
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.checkSpillException(MapTask.java:1379)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.access$200(MapTask.java:711)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer$Buffer.write(MapTask.java:1193)
at java.io.DataOutputStream.write(DataOutputStream.java:90)
at org.apache.hadoop.io.Text.write(Text.java:290)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:100)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:84)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:967)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:583)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:92)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:111)
at be.ac.ua.comp.ronny.riki.invertedindex.FilteredInvertedIndexBuilder$Map.map(FilteredInvertedIndexBuilder.java:113)
at be.ac.ua.comp.ronny.riki.invertedindex.FilteredInvertedIndexBuilder$Map.map(FilteredInvertedIndexBuilder.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:652)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:328)
at org.apache.hadoop.mapred.Child$4.run(Child.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:742)
at org.apache.hadoop.mapred.Child.main(Child.java:211)
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>()
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:123)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:68)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:44)
at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKeyValue(ReduceContextImpl.java:145)
at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKey(ReduceContextImpl.java:121)
at org.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.nextKey(WrappedReducer.java:291)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:168)
at org.apache.hadoop.mapred.Task$NewCombinerRunner.combine(Task.java:1432)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1457)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.access$600(MapTask.java:711)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer$SpillThread.run(MapTask.java:1349)
Caused by: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>()
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
... 10 more
현재이 오류가 사라지기를 바라는 일부 구성 매개 변수를 실험 중이지만 지금까지는 실패했습니다. 내가 조정하는 구성 매개 변수는 다음과 같습니다.
아무도 왜 위의 예외가 발생하는지 설명 할 수 있습니까? 어떻게 피하는가? 또는 hadoop 유출 작업이 의미하는 바는 간단한 설명입니까?
해결법
-
==============================
1.모든 문제가 해결되었습니다.
모든 문제가 해결되었습니다.
Map-Reduce 직렬화 연산은 org.apache.hadoop.io.ArrayWritable에 대한 기본 생성자를 필요로합니다. Hadoops 구현은 ArrayWritable에 대한 기본 생성자를 제공하지 않습니다. 그래서 java.lang.NoSuchMethodException : org.apache.hadoop.io.ArrayWritable ()이 발생하여 이상한 유출 예외가 발생했습니다.
간단한 래퍼가 ArrayWritable을 정말로 쓰기 가능하게 만들고 그것을 고쳤습니다! Hadoop이 이것을 제공하지 않았다는 이상한 점.
-
==============================
2.이 문제는 내지도 작업 중 하나의 출력이 탭 문자 ( "\ t") 또는 개행 문자 ( "\ r"또는 "\ n")를 생성 할 때 나에게 떠오른다. Hadoop은이 우물을 처리하지 못하고 실패한다. 이 Python 코드를 사용하여이 문제를 해결할 수있었습니다.
이 문제는 내지도 작업 중 하나의 출력이 탭 문자 ( "\ t") 또는 개행 문자 ( "\ r"또는 "\ n")를 생성 할 때 나에게 떠오른다. Hadoop은이 우물을 처리하지 못하고 실패한다. 이 Python 코드를 사용하여이 문제를 해결할 수있었습니다.
if "\t" in output: output = output.replace("\t", "") if "\r" in output: output = output.replace("\r", "") if "\n" in output: output = output.replace("\n", "")
앱을 위해 다른 작업을해야 할 수도 있습니다.
from https://stackoverflow.com/questions/4233214/hadoop-spill-failure by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 초기 작업이 어떤 자원도 수락하지 않았습니다. 작업자가 등록되어 충분한 자원을 보유하고 있는지 확인하려면 클러스터 UI를 확인하십시오 (0) | 2019.07.28 |
---|---|
[HADOOP] Apache 하이브 오류이 버전의 hadoop에서 지원되지 않는 자격 증명 병합 (0) | 2019.07.28 |
[HADOOP] 돼지 라틴어를 사용하여 열을 "업데이트하는 방법" (0) | 2019.07.27 |
[HADOOP] Hadoop : core-site.xml에서 기본 FileSystem을 HDFS로 설정할 수 없습니다. (0) | 2019.07.27 |
[HADOOP] Hadoop 매퍼가 여러 개의 키를 출력 할 수 있습니까? (0) | 2019.07.27 |