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


    在伪分布式下,按照下面两个博客,分别以命令行方式和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,首先需要创建用户目录
     
    bin/hdfs dfs?-mkdir?-p?/user/hadoop
    接着将etc/hadoop中的文件作为输入文件复制到分布式文件系统中,即将/usr/local/hadoop/etc/hadoop复制到分布式文件系统中的/user/hadoop/input中。上一步已创建了用户目录 /user/hadoop ,因此命令中就可以使用相对目录如 input,其对应的绝对路径就是 /user/hadoop/input:
     
    bin/hdfs dfs?-mkdir input
    bin/hdfs dfs?-put etc/hadoop/*.xml input
    复制完成后,可以通过如下命令查看文件列表:
     
    bin/hdfs dfs?-ls input
    伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹删掉以及运行结果来验证这一点)。
     
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output?'dfs[a-z.]+'
    查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
     
    bin/hdfs dfs?-cat output/*
    也可以将运行结果取回到本地:
     
    rm?-R?./output
    bin/hdfs dfs?-get output output?# 将 HDFS 上的 output 文件夹拷贝到本机
    cat?./output/*
    结果如下,注意到刚才我们已经更改了配置文件,所以运行结果不同。
     
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pHvu0Lb-1662109834353)(http://cdn.powerxing.com/imgs/install-hadoop-17.png)]Hadoop伪分布式运行grep结果
     
    Hadoop运行程序时,默认输出目录不能存在,因此再次运行需要执行如下命令删除 output文件夹:
     
    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文件夹下。
     
    本文转自:https://blog.csdn.net/m0_67401746/article/details/126667233
  • 相关阅读:
    32-Ubuntu-用户权限-03-修改文件权限
    31-Ubuntu-用户权限-02-ls输出信息介绍
    hdu2084 数塔
    hdu 1058 humble number
    HDU_2050 折线分割平面
    HDU_1030 Delta-wave 常数时间
    HDU_1021 Fibonacci Again 一些推论
    Gated Recurrent Unit(GRU)
    循环神经网络模型
    Bellman-Ford algorithm
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/16845280.html
Copyright © 2020-2023  润新知