【问题标题】:mapreduce fails while reading large number of csv files读取大量 csv 文件时,mapreduce 失败
【发布时间】:2014-12-18 14:31:33
【问题描述】:

如果我通过 mapreduce 单独运行 csv 文件,我可以读取它们。但是,当我从具有 n 个文件的文件夹运行时,mapreduce 作业以 100% 失败,显示以下错误:

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)

请推荐。

【问题讨论】:

    标签: csv hadoop mapreduce


    【解决方案1】:

    几件事:

    1) 始终将 mapper 的 map() 方法(和 reducer 的 reduce() 方法)中的逻辑包装在 try-catch 块中,这样这样的事情就不会把整个工作搞砸

    2) 在 catch 块中,您可以将无效的输入键/值与错误一起记录,或者出于开发目的,只需将信息写入控制台。如果您正在调试作业,则可以在 catch 块的第一行设置断点。

    看起来你有 190 个任务,这可能意味着你有那么多小文件。我的猜测是后来的文件之一——你没有手动运行过的文件——导致了问题

    【讨论】:

    • 我完全同意 try-catch 的观点。我之前遇到的一个问题是“硬编码”我如何解析一行(我知道先验有 3 列,等等)。然后,如果一个文件末尾有一个无关的换行符(该行没有 3 列形式),我会遇到问题。 try-catch 解决了这个问题。这只是可能导致问题的文件之间细微的、难以捕捉的差异的众多可能性之一。
    • 我没有这个问题,因为 csv 文件是由我们生成的,我们将这些文件提供给 MR 工作。如前所述,所有文件都运行良好,或者即使我提供 2 个文件作为输入。但是当我给整个目录 MR 作业失败时。我认为这是一个不同的问题,但请建议我如何解决它。
    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2012-10-22
    • 2022-12-31
    • 1970-01-01
    相关资源
    最近更新 更多