【问题标题】:hadoop fs -ls results in "no such file or directory"hadoop fs -ls 导致“没有这样的文件或目录”
【发布时间】:2015-03-30 05:53:08
【问题描述】:

我已经为 10 节点集群安装并配置了 Hadoop 2.5.2。 1 充当主节点,其他节点充当从节点。

我在执行 hadoop fs 命令时遇到问题。 hadoop fs -ls 命令在 HDFS URI 上运行良好。在没有 HDFS URI 的情况下使用时,它会给出消息“ls: `.': No such file or directory”

ubuntu@101-master:~$ hadoop fs -ls
15/01/30 17:03:49 WARN util.NativeCodeLoader: Unable to load native-hadoop 
ibrary for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory
ubuntu@101-master:~$ 

然而,使用 HDFS URI 执行相同的命令

ubuntu@101-master:~$ hadoop fs -ls hdfs://101-master:50000/
15/01/30 17:14:31 WARN util.NativeCodeLoader: Unable to load native-hadoop      
library for your platform... using builtin-java classes where applicable
Found 3 items
drwxr-xr-x   - ubuntu supergroup          0 2015-01-28 12:07 hdfs://101-master:50000/hvision-data
-rw-r--r--   2 ubuntu supergroup   15512587 2015-01-28 11:50 hdfs://101-master:50000/testimage.seq
 drwxr-xr-x   - ubuntu supergroup          0 2015-01-30 17:03 hdfs://101-master:50000/wrodcount-in
 ubuntu@101-master:~$ 

由于这种行为,我在 MapReduce 程序中遇到异常。 jarlib 指的是 HDFS 文件位置,而我希望 jarlib 指的是存储在 Hadoop 节点上的本地文件系统中的 jar 文件。

【问题讨论】:

    标签: hadoop uri hdfs


    【解决方案1】:

    Hadoop 中的用户目录是(在 HDFS 中)

    /user/<your operational system user>
    

    如果您收到此错误消息,可能是因为您尚未在 HDFS 中创建用户目录。

    使用

    hadoop fs -mkdir -p /user/<current o.p. user directory>
    

    要查看您当前的操作系统用户是什么,请使用:

    id -un
    

    hadoop fs -ls 它应该开始工作了...

    【讨论】:

      【解决方案2】:

      这与用户缺少主目录有关。一旦我在 hdfs 下为登录用户创建了主目录,它就像一个魅力..

      hdfs dfs -mkdir /user
      
      hdfs dfs -mkdir /user/{loggedin user}
      
      hdfs dfs -ls
      

      这个方法解决了我的问题。

      【讨论】:

        【解决方案3】:

        您看到的行为是预期的,让我解释一下您在使用hadoop fs 命令时发生了什么。

        命令的语法是这样的:hadoop fs -ls [path]

        默认情况下,当上述命令不指定[path]时,hadoop会在hdfs中将路径扩展为/home/[username];其中[username] 被替换为执行命令的linux 用户名。

        所以,当你执行这个命令时:

        ubuntu@xad101-master:~$ hadoop fs -ls
        

        您看到错误的原因是 ls: '.': No such file or directory,因为 hadoop 正在寻找此路径 /home/ubuntu,似乎此路径在 hdfs 中不存在。

        这个命令的原因:

        ubuntu@101-master:~$ hadoop fs -ls hdfs://101-master:50000/
        

        正在工作,因为您已明确指定 [path] 并且是 hdfs 的根。你也可以这样做:

        ubuntu@101-master:~$ hadoop fs -ls /
        

        它会自动被评估为 hdfs 的根目录。

        希望,这可以清除您在执行 hadoop fs -ls 命令时看到的行为。

        因此,如果您想指定本地文件系统路径,请使用file:/// url 方案。

        【讨论】:

          【解决方案4】:

          WARN util.NativeCodeLoader: 无法为您加载 native-hadoop 库 平台...在适用的情况下使用内置 java 类

          这个错误将在 .bashrc 文件中使用这个命令来消除:

          export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=/usr/local/hadoop/lib/native"
          
          ------------------------------------------------------
          /usr/local/hadoop is location where hadoop is install
          -------------------------------------------------------
          

          【讨论】:

            【解决方案5】:

            这里有几件事在起作用;基于“jarlib 指的是 HDFS 文件位置”,听起来您确实将 HDFS 路径设置为fs.default.name,这确实是典型的设置。因此,当您键入hadoop fs -ls 时,这确实是在尝试查看 HDFS 内部,但它正在查看您的 current working directory,它应该类似于 hdfs://101-master:50000/user/ubuntu。不幸的是,错误消息有些令人困惑,因为它没有告诉您 . 被解释为完整路径。如果你 hadoop fs -mkdir /user/ubuntu 然后 hadoop fs -ls 应该开始工作。

            这个问题与你的“jarlib”问题无关;每当您想引用显式存储在本地文件系统中的文件,但路径通过 Hadoop 的 Path 解析时,您只需添加 file:/// 即可强制 Hadoop 引用本地文件系统。例如:

            hadoop fs -ls file:///tmp
            

            尝试将您的 jar 文件路径作为填充 file:///path/to/your/jarfile 传递,它应该可以工作。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-02-10
              • 1970-01-01
              • 2013-03-31
              • 2019-09-06
              • 1970-01-01
              相关资源
              最近更新 更多