2014-05-21 4 views
0

에있는 파일에 .gz로드하는 동안 나는 HDFS에서에서 .gz 파일의 큰 숫자를 가지고 있고이 데이터를 처리하는 PigStorage를 사용하여로드하려고 나는 다음과 같은 예외를오류 돼지 스크립트

자바를 얻고있다. io.EOFException : 예기치 않은 입력 스트림의 끝 org.apache.hadoop.io.compress.DecompressorStream.decompress (DecompressorStream.java:137) at org.apache.hadoop.io.compress.DecompressorStream.read (DecompressorStream. java : 77) at java.io.InputStream.read (InputStream.java:85) at org.apache.hadoop.util.LineReader.readDefaultLine (LineReader.java:205)org.apache.hadoop.util.LineReader.readLine (LineReader.java:169) at org.apache.hadoop.mapreduce.lib.input.LineRecordReader.nextKeyValue (LineRecordReader.java:139) at org.apache. pig.builtin.TextLoader.getNext (TextLoader.java:55) at org.apache.pig.backend.hadoop.executionengine.mapRedordLayer.PigRecordReader.nextKeyValue (PigRecordReader.java:194) at org.apache.hadoop.mapred .MapTask $ NewTrackingRecordReader.nextKeyValue (MapTask.java:530) at org.apache.hadoop.mapreduce.MapContext.nextKeyValue (MapContext.java:67) at org.apache.hadoop.mapreduce.Mapper.run (Mapper. java : 144) at org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java:763) at org.apache.hadoop.mapred.MapTask.r un (MapTask.java:363) at org.apache.hadoop.mapred.Child $ 4.run (Child.java:255) at java.security.AccessController.doPrivileged (네이티브 메소드) javax.security.auth. Subject.doAs (Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1232) at org.apache.hadoop.mapred.Child.main (Child.java:249)

일부 파일이 손상되었을 수 있습니다.

돼지는 손상된 파일을 건너 뛸 수있는 어떤 종류의 오류 처리 기능을 가지고 있습니다. 다음은 사용중인 샘플 코드입니다.

cal = load '$inputdir/CAL/*/*/*/*/*/*/*.gz' USING PigStorage('\t'); 
+0

이 문제를 해결해야만했고이 문제를 해결하는 방법은 먼저 사전 프로세스에서 손상된 모든 파일을 제거하고 좋은 파일을 매퍼에게 공급하는 것이 었습니다. 불행히도 PIG는 손상되었으므로 사전 프로세스를 작성하거나 Java 매퍼에서 처리해야합니다. –

답변

0

아마도 손상된 파일과 관련이 있습니다.

mapred.max.map.failures.percent 설정 (또는 mapred.max.reduce.failures.percent하지만이 것은 귀하의 사례와 관련이 없습니다)을 무시해도 실패한 비율을 제어 할 수 있습니다.

단일 매퍼가 여러 개의 gz 파일을 읽을 수 있으므로 매퍼가 손상된 손상된 파일을 읽을 수 있으므로 파일도 건너 뛰게됩니다.