环境介绍:
hadoop版本:hadoop2.2
Windows版本:win7
首先我们通过插件远程连接:
具体操作可以参考:
新手指导:Windows上使用Eclipse远程连接Hadoop进行程序开发
达到效果如下
下面我们运行mapreduce程序,具体可以参考
通过实例让你真正明白mapreduce---填空式、分布(分割)编程 这里重点说一下遇到的问题,及该如何解决?
遇到问题1:java.lang.ArrayIndexOutOfBoundsException: 0
- 2014-06-29 01:11:09,816 WARN [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
- 2014-06-29 01:11:09,831 ERROR [main] com.mapreduce (mapreduce.java:run(80)) - 0
- java.lang.ArrayIndexOutOfBoundsException: 0
- at .mapreduce.run(mapreduce.java:54)
- at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
- at .mapreduce.main(mapreduce.java:34)
解决:
数组越界,如果有数组,看看是不是超出了范围,最常见的是忘记0元素。
比如args[1],args[2],我们是否忘记了args[0]了那。办法主要是细心
问题2:Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
- 2014-06-29 10:16:25,613 WARN [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
- 2014-06-29 10:16:25,791 ERROR [main] util.Shell (Shell.java:getWinUtilsPath(303)) - Failed to locate the winutils binary in the hadoop binary path
- java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
- at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
- at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
- at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)
- at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
- at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.addInputPath(FileInputFormat.java:467)
- at .mapreduce.run(mapreduce.java:56)
- at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
- at .mapreduce.main(mapreduce.java:36)
- 2014-06-29 10:16:25,810 INFO [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - session.id is deprecated. Instead, use dfs.metrics.session-id
- 2014-06-29 10:16:25,811 INFO [main] jvm.JvmMetrics (JvmMetrics.java:init(76)) - Initializing JVM Metrics with processName=JobTracker, sessionId=
问题3:Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
解决:
上面两个问题是因为缺少组件
winutils.exe下载
winutils.zip
(18.14 KB, 下载次数: 8)
hadoop.dll下载
hadoop.zip
(32.21 KB, 下载次数: 9, 售价: 1 云币)
hadoop-common-2.2.0-bin-master
hadoop-common-2.2.0-bin-master.zip
(273.06 KB, 下载次数: 6, 售价: 2 云币)
步骤:
1.首先将hadoop.dll放到hadoop的bin目录下,如下图所示
2.配置hadoop home及path
path,这里使用的是绝对路径,path里面配置的是hadoop的bin路径。配置完毕,切忌重启机器
如下图所示
错误4:数据类型错误
- 2014-07-01 11:10:46,667 INFO [Thread-4] mapred.LocalJobRunner (LocalJobRunner.java:run(397)) - Map task executor complete.
- 2014-07-01 11:10:46,674 WARN [Thread-4] mapred.LocalJobRunner (LocalJobRunner.java:run(482)) - job_local772026666_0001
- java.lang.Exception: java.io.IOException: Type mismatch in value from map: expected org.apache.hadoop.io.LongWritable, received org.apache.hadoop.io.IntWritable
- at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403)
- Caused by: java.io.IOException: Type mismatch in value from map: expected org.apache.hadoop.io.LongWritable, received org.apache.hadoop.io.IntWritable
- at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1055)
- at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:691)
- at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)
- at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112)
- at .mapreduce$myMapper.map(mapreduce.java:103)
- at .mapreduce$myMapper.map(mapreduce.java:1)
- at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
- at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
- at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
- at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:235)
- at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
- at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
- at java.util.concurrent.FutureTask.run(FutureTask.java:166)
- at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
- at java.lang.Thread.run(Thread.java:722)
- 2014-07-01 11:10:46,922 INFO [main] mapreduce.Job (Job.java:monitorAndPrintJob(1338)) - Job job_local772026666_0001 running in uber mode : false
- 2014-07-01 11:10:46,924 INFO [main] mapreduce.Job (Job.java:monitorAndPrintJob(1345)) - map 0% reduce 0%
- 2014-07-01 11:10:46,926 INFO [main] mapreduce.Job (Job.java:monitorAndPrintJob(1358)) - Job job_local772026666_0001 failed with state FAILED due to: NA
- 2014-07-01 11:10:46,931 INFO [main] mapreduce.Job (Job.java:monitorAndPrintJob(1363)) - Counters: 0
- 解决:
expected org.apache.hadoop.io.LongWritable, received org.apache.hadoop.io.IntWritable,这里传递的参数错误,传递正确的参数就ok了。
错误5:org/apache/commons/io/IOUtils
解决办法:
其实这不应该说是解决办法,应该是i/o的问题。这里多点击了几次,就ok了。如下图所示
|