问题一:表头

WARN mapred.LocalJobRunner: job_local 1060669736_0001

java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1

2024-01-03 21:39:40,671 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.

这个警告信息表示在执行Hadoop作业时,没有正确解析命令行选项。为了解决这个问题,需要实现Tool接口并使用ToolRunner来执行应用程序。

2024-01-03 21:39:41,462 WARN mapred.LocalJobRunner: job_local 1060669736_0001

java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1

这个异常表示在执行Hadoop作业时,数组索引越界。

数据集中包含表头:

解决办法:将表的第一列删除,重新上传数据,执行成功。

问题二:数据集问题

WARN mapred.LocalJobRunner: job_local1053007145_0001
java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:492)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:552)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
    at MapReduce.Map_vegetable.map(Map_vegetable.java:24)
    at MapReduce.Map_vegetable.map(Map_vegetable.java:9)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:799)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:271)
    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:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

数据集中有空格或与Mapper函数处理识别数组分隔符时导致的溢出错误,例如下图数据第三行多了一个“,”导致数据处理到第三行时出现报错。原因是在执行MapReduce作业时,数组索引越界。

通过打印i我们可以发现数据集具体问题所在位置:

执行第三行时报错:

仔细检查数据集第三行数据多了一个“,”导致数组索引越界:

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐