2014-12-18 3 views
0

mapreduce를 통해 개별적으로 실행하면 csv 파일을 읽을 수 있습니다. 내가 파일의 폴더를 갖는 n 개에서 실행할 때 작업이 다음 오류를 보여주는 100 % 실패 맵리 듀스 :많은 csv 파일을 읽는 동안 mapreduce가 실패합니다.

INFO mapreduce.Job: map 99% reduce 0% 
INFO mapred.Task: Task:attempt_local1889843460_0001_m_000190_0 is done. And is in the process of committing 
INFO mapred.LocalJobRunner: map 
INFO mapred.Task: Task 'attempt_local1889843460_0001_m_000190_0' done. 
INFO mapred.LocalJobRunner: Finishing task: attempt_local1889843460_0001_m_000190_0 
INFO mapred.LocalJobRunner: map task executor complete. 
WARN mapred.LocalJobRunner: job_local1889843460_0001 
java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 6 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522) 
Caused by: java.lang.ArrayIndexOutOfBoundsException: 6 
    at com.calsoftlabs.mr.analytics.common.ClientTrafficRecordReader.nextKeyValue(ClientTrafficRecordReader.java:49) 
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:533) 
    at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80) 
    at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91) 
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144) 
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340) 
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

가 친절하게 제안한다.

답변

1

몇 가지 :

1) 항상 매퍼의지도에서 로직 랩() 메소드를 (그리고 감속기의가 (감소) 메소드) 시도-catch 블록에서 이렇게 이런 일 후 전체 작업을 날려하지 않습니다 Out of the water

2) catch 블록에서 잘못된 입력 키/값을 오류와 함께 기록하거나 개발 목적으로 정보를 콘솔에 쓸 수 있습니다. 작업을 디버깅하는 경우 catch 블록의 첫 번째 줄에 중단 점을 설정할 수 있습니다.

190 개의 작업이있는 것처럼 보입니다. 아마도 작은 파일이 많을 것입니다. 내 생각 엔 수동 파일을 실행하지 않은 파일 중 하나가 문제를 일으키는 것입니다.

+0

나는 try-catch 지점에 전적으로 동의합니다. 내가 전에 해왔 던 문제는 "하드 코딩"입니다. 어떻게 선을 파싱합니까? (나는 선험적으로 3 개의 열이 있다는 것을 알고 있습니다.) 그런 다음 한 파일에 마지막 행에 외모가있는 새 행 문자가있는 경우 해당 행에 3 열 양식이없는 경우 문제가 발생합니다. try-catch는이를 수정합니다. 이것은 미묘한, 잡기 어렵고 문제를 일으킬 수있는 파일 간의 차이에 대한 많은 가능성 중 하나 일뿐입니다. – TravisJ

+0

csv 파일은 우리가 MR 작업에 공급하는 우리에 의해 생성되기 때문에 그 문제가 없습니다. 마찬가지로 이전에 개별적으로 모든 파일을 잘하고 심지어 입력으로 2 파일을주고 실행했다. 하지만 내가 전체 디렉터리를 제공하면 MR 작업이 실패합니다. 나는 다른 문제를 생각하고 있지만 어떻게 해결할 수 있는지 제안 해주십시오. – Raghuveer

관련 문제