Hadoop错误2_Hadoop伪分布式下,运行WordCount时,Input path does not exist错误原因

本文介绍在Hadoop伪分布式环境下运行WordCount程序时遇到的错误,并提供详细的解决方案,包括配置core-site.xml文件、创建及上传输入文件到HDFS等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在伪分布式下,按照下面两个博客,分别以命令行方式和Eclipse执行WordCount程序时,都会出现同样的错误,

(Eclipse:http://blog.csdn.net/wang_zhenwei/article/details/47422775)

(命令行方式:http://blog.csdn.net/wang_zhenwei/article/details/47439623)

错误描述为:

Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/hadoop/input

即在路径hdfs://localhost:9000/user/hadoop/input下,找不到input文件,

回顾最开始时,Hadoop伪分布式环境的安装教程,里面有对hdfs://localhost:9000/的相关操作,

(伪分布式配置:http://blog.csdn.net/wang_zhenwei/article/details/47043603)

这是伪分布式环境配置时的相关操作,



操作一:

修改配置文件 core-site.xml 为如下所示(vim /usr/local/hadoop/etc/hadoop/core-site.xml):

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

原文件中的内容为 (vim /usr/local/hadoop/etc/hadoop/core-site.xml):

<configuration>

</configuration>
分析说明一:

如果将core-site.xml文件变动为原来的内容,则程序将不再去hdfs://localhost:9000下寻找input文件,而是在当前目录下寻找input文件,程序能够正常运行。



操作二:

上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要创建用户目录

 
 
  1. bin/hdfs dfs -mkdir -p /user/hadoop

接着将 etc/hadoop 中的文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。上一步已创建了用户目录 /user/hadoop ,因此命令中就可以使用相对目录如 input,其对应的绝对路径就是 /user/hadoop/input:

 
 
  1. bin/hdfs dfs -mkdir input
  2. bin/hdfs dfs -put etc/hadoop/*.xml input

复制完成后,可以通过如下命令查看文件列表:

 
 
  1. bin/hdfs dfs -ls input

伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹删掉以及运行结果来验证这一点)。

 
 
  1. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

查看运行结果的命令(查看的是位于 HDFS 中的输出结果):

 
 
  1. bin/hdfs dfs -cat output/*

也可以将运行结果取回到本地:

 
 
  1. rm -R ./output
  2. bin/hdfs dfs -get output output # 将 HDFS 上的 output 文件夹拷贝到本机
  3. cat ./output/*

结果如下,注意到刚才我们已经更改了配置文件,所以运行结果不同。

Hadoop伪分布式运行grep结果Hadoop伪分布式运行grep结果

Hadoop运行程序时,默认输出目录不能存在,因此再次运行需要执行如下命令删除 output文件夹:

 
 
  1. bin/hdfs dfs -rm -r /user/hadoop/output # 删除 output 文件夹
 

分析说明二:


在进行伪分布式环境配置时,作者已经进行了一次实例测试,


第一条命令是,

bin/hdfs dfs -mkdir -p /user/hadoop

当时是在/usr/local/hadoop路径下操作的,

目的是使用dfs指令建立一个新的路径/user/hadoop


第二条和第三条命令是,

bin/hdfs dfs -mkdir input

bin/hdfs dfs -put etc/hadoop/*.xml input

当时的默认路径是/usr/hadoop,操作的意思是在此路径下再建立一个input文件夹,作为输入文件夹使用,

然后,向input文件夹拷贝文件,这条指令也可以换成其它的,比如bin/hdfs dfs -put input/* input,(在/usr/local/hadoop/路径下,已经建立好input文件夹的情况)。


然后,执行命令:

/usr/local/hadoop/bin/hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output

此时,将不会报错,可以正常执行,


在Eclipse中执行WordCount程序,也可以执行成功,


继续使用命令查看结果,可以查看到,

拷贝到本机,完全按照上述指令,不能执行成功,原因是相对路径已经发生变化,


最后一条命令,删除已经产生的output文件夹,

bin/hdfs dfs -rm -r /user/hadoop/output 


说明,按照这种方法解决问题时,最开始的两个博客,要想执行成功,要将input文件夹拷贝到/user/hadoop文件夹下。

<think>好的,我现在需要解决用户提到的Hadoop运行WordCount找不到JAR文件的问题。首先,用户提供的引用信息里有几个关键点需要梳理。引用[1]提到运行hadoop jar命令进程无法继续,可能和JAR路径有关。引用[2]展示了正确的命令示例,但用户可能没有正确指定路径。引用[3]指出JAR文件位于/opt/module/hadoop-3.1.3/share/hadoop/mapreduce目录下,可能需要确认该路径是否存在。 首先,我应该检查用户是否正确输入了JAR文件的路径。常见错误是相对路径和绝对路径的问题。比如,如果用户在当前目录下没有该文件,使用相对路径就会出错。需要建议用户使用绝对路径,如引用[3]中的路径。同,用户可能未正确安装Hadoop或者文件被移动,需要确认文件是否存在。 接下来,用户可能需要配置Hadoop的环境变量,比如HADOOP_HOME,这样可以通过变量来引用JAR文件的位置,避免手动输入长路径。另外,检查文件权限也是必要的,确保用户有权限执行该JAR文件。 另外,引用[3]提到使用sz命令下载文件到本地,但用户可能在本地运行Hadoop命令路径错误,导致找不到JAR文件。需要提醒用户如果在本地运行,确保文件路径正确,或者在Hadoop集群中正确上传文件。 可能的解决方案步骤包括:确认JAR文件路径、使用绝对路径运行命令、检查环境变量配置、验证文件权限、检查Hadoop安装完整性。同,用户可能需要根据他们的实际安装目录调整路径,比如Hadoop版本是否为3.1.3,安装路径是否一致。 最后,生成相关问题,帮助用户进一步排查问题,比如权限问题、环境变量配置或其他常见错误。</think>### Hadoop运行WordCountJAR文件未找到的解决方案 #### 1. **确认JAR文件路径** - **默认安装路径**:Hadoop示例JAR文件通常位于安装目录的`share/hadoop/mapreduce`子目录下。例如: $$ \text{/opt/module/hadoop-3.1.3/share/hadoop/mapreduce} $$ 通过命令`ls`检查是否存在文件`hadoop-mapreduce-examples-3.1.3.jar`[^3]。 - **若文件缺失**:需重新安装Hadoop或从其他节点复制文件。 #### 2. **使用绝对路径运行命令** - **错误命令示例**: ```bash hadoop jar hadoop-mapreduce-examples-3.1.3.jar wordcount ... # 未指定完整路径,可能导致文件未找到 ``` - **正确命令格式**: ```bash hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output ``` 通过绝对路径明确指向JAR文件位置[^2][^3]。 #### 3. **配置环境变量简化操作** - 在`~/.bashrc`中添加Hadoop路径: ```bash export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin ``` - 更新后执行`source ~/.bashrc`,之后可通过相对路径调用JAR: ```bash hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount ... ``` #### 4. **验证文件权限** - 执行`ls -l`检查JAR文件权限: ```bash -rw-r--r-- 1 hadoop hadoop 12345678 Jan 1 00:00 hadoop-mapreduce-examples-3.1.3.jar ``` - 若无可执行权限,运行`chmod +x hadoop-mapreduce-examples-3.1.3.jar`。 #### 5. **检查Hadoop安装完整性** - 如果文件路径正确但依然报错,可能是Hadoop安装不完整。建议重新解压安装包并核对文件结构。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值