系统:win11专业版
jdk版本:1.8
hadoop版本3.1.0
代码太简单了就不放上来了
运行一个最简单的wordcount,本以为不会出现问题的谁知道一运行就直接报错。
现在看一下报错信息
2023-05-17 16:18:36,000 WARN [org.apache.hadoop.metrics2.impl.MetricsConfig] - Cannot locate configuration: tried hadoop-metrics2-jobtracker.properties,hadoop-metrics2.properties
2023-05-17 16:18:36,052 INFO [org.apache.hadoop.metrics2.impl.MetricsSystemImpl] - Scheduled Metric snapshot period at 10 second(s).
2023-05-17 16:18:36,052 INFO [org.apache.hadoop.metrics2.impl.MetricsSystemImpl] - JobTracker metrics system started
2023-05-17 16:18:36,398 WARN [org.apache.hadoop.mapreduce.JobResourceUploader] - Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
2023-05-17 16:18:36,417 WARN [org.apache.hadoop.mapreduce.JobResourceUploader] - No job jar file set. User classes may not be found. See Job or Job#setJar(String).
2023-05-17 16:18:36,445 INFO [org.apache.hadoop.mapreduce.lib.input.FileInputFormat] - Total input files to process : 1
2023-05-17 16:18:36,476 INFO [org.apache.hadoop.mapreduce.JobSubmitter] - number of splits:1
2023-05-17 16:18:36,564 INFO [org.apache.hadoop.mapreduce.JobSubmitter] - Submitting tokens for job: job_local1282501214_0001
2023-05-17 16:18:36,565 INFO [org.apache.hadoop.mapreduce.JobSubmitter] - Executing with tokens: []
2023-05-17 16:18:36,604 INFO [org.apache.hadoop.mapreduce.JobSubmitter] - Cleaning up the staging area file:/tmp/hadoop/mapred/staging/1282501214/.staging/job_local1282501214_0001
Exception in thread "main" java.lang.IllegalArgumentException: Can not create a Path from an empty string
at org.apache.hadoop.fs.Path.checkPathArg(Path.java:172)
at org.apache.hadoop.fs.Path.<init>(Path.java:184)
at org.apache.hadoop.fs.Path.<init>(Path.java:129)
at org.apache.hadoop.mapred.LocalJobRunner$Job.<init>(LocalJobRunner.java:166)
at org.apache.hadoop.mapred.LocalJobRunner.submitJob(LocalJobRunner.java:794)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:251)
at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1571)
at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1568)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1878)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1568)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1589)
at com.atguigu.mapreduce.wordcount.MyDriver.main(MyDriver.java:27)
- 一个警告指示找不到Hadoop的配置文件
hadoop-metrics2-jobtracker.properties
和hadoop-metrics2.properties
。 - 一个信息消息表示指定的度量快照周期为10秒,并且JobTracker度量系统已启动。
- 一个警告指出尚未执行Hadoop命令行选项解析,并建议实现Tool接口并使用ToolRunner来解决此问题。
- 另一个警告提醒没有设置作业的jar文件,这可能导致无法找到用户类。它建议使用Job或Job#setJar(String)方法来设置作业的jar文件。
- 一个信息消息显示要处理的总输入文件数为1。
- 作业提交过程的信息接着显示,包括分片数和使用的令牌。
- 在作业提交过程中发生了错误,导致程序的执行停止。错误信息指示由于传递了空字符串参数而无法创建Path对象。
- 应该是file:/tmp/hadoop/mapred/staging/1282501214/.staging/job_local1282501214_0001 这里出现了问题,去目录检查
那么原因确定可能是出现中文导致的,而这个中文正好是之前改过的本地用户名。
经过排查发现是因为之前把本地用户改正中文导致的,希望大家引以为戒!!!解决办法右键此电脑->管理–>将本地用户修改成英文
再次运行
成功!
Tips:如果想深入了解的话可以去看一下job提交的源码。不过hadoopjob提交的源码太复杂了就不放在这里面说明了。
//获取job的路径
Path submitJobFile = JobSubmissionFiles.getJobConfPath(submitJobDir);
应该是这里出了问题。