Hadoop:没有这样的文件或目录

时间:2015-10-22 04:04:42

标签: hadoop putty

所以我是Hadoop和命令行的新手,尽管我之前做过一些编程(作为学生)。我试图在学校机器上运行Putty的一些简单程序(教程的一部分)。

我之前已经让Hadoop命令工作并运行一个不同的简单程序就好了,但我坚持使用这个。 不,这不是功课。只是一个了解Hadoop命令的教程。

说明如下:

/ *

测试代码

我们执行符合典型UNIX风格管道的本地测试,我们的测试将采用以下形式:

猫|地图|排序|降低 它模拟了流式传输时Hadoop将执行的相同管道,尽管是以非分布式方式。您必须确保文件mapper.py和reducer.py具有执行权限:

chmod u + x mapper.py chmod u + x reducer.py

尝试以下命令并解释结果(提示:在终端窗口中键入man sort以查找有关sort命令的更多信息):

回声“这是一个测试,这应该计算单词的数量”| ./mapper.py | sort -k1,1 | ./reducer.py

* /

运行“hdfs dfs -ls / user / $ USER会产生以下结果:

找到6项 drwxr-xr-x - s1353460 s1353460 0 2015-10-20 10:51 / user / s1353460 / QuasiMonteCarlo_1445334654365_163883167 drwxr-xr-x - s1353460 s1353460 0 2015-10-20 10:51 / user / s1353460 / data -rw-r - r-- 3 s1353460 s1353460 360 2015-10-20 12:13 /user/s1353460/mapper.py -rw-r - r-- 3 s1353460 s1353460 15346 2015-10-20 11:11 / user / s1353460 / part-r-00000 -rw-r - r - 2 s1353460 s1353460 728 2015-10-21 10:21 /user/s1353460/reducer.py drwxr-xr-x - s1353460 s1353460 0 2015-10-16 14:38 / user / s1353460 / source

但运行“echo”这是一个测试,这应该计算单词的数量“| /user/$USER/mapper.py | sort -k1,1 | /user/$USER/reducer.py”返回错误:

-bash:/user/s1353460/reducer.py:没有这样的文件或目录 -bash:/user/s1353460/mapper.py:没有这样的文件或目录

这看起来很奇怪,因为正好在那个位置上列出了。 知道这里可能会发生什么吗?

2 个答案:

答案 0 :(得分:1)

  

但是运行" echo"这是一个测试,这应该计算单词的数量" | /user/$USER/mapper.py | sort -k1,1 | /user/$USER/reducer.py"返回错误:

     

-bash:/user/s1353460/reducer.py:没有这样的文件或目录-bash:/user/s1353460/mapper.py:没有这样的文件或目录

您已创建 mapper.py & HDFS 上的 reducer.py 。运行此命令时,它会搜索本地文件系统上的 mapper.py reducer.py ,而不是 HDFS

解决此问题:

  1. 确保 your local file system 上存在/ user / s1353460 /。如果没有,请创建相同内容,然后复制或创建 mapper.py & / user / s1353460 /

  2. 中的 reducer.py
  3. 确保 mapper.py 具有执行权限 chmod +x /user/s1353460/mapper.py

  4. 确保 reducer.py 具有执行权限 chmod +x /user/s1353460/reducer.py

  5. 运行 echo "this is a test and this should count the number of words" | /user/s1353460/mapper.py | sort -k1,1 | /user/s1353460/reducer.py 这次应该没有任何错误。

  6. 在Hadoop集群上运行Python MapReduce作业:

    hduser@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-*streaming*.jar \
    -file /user/s1353460/mapper.py    -mapper /user/s1353460/mapper.py \
    -file /user/s1353460/reducer.py   -reducer /user/s1353460/reducer.py \
    -input <hdfs-input-path> -output <hdfs-output-path>
    

    假设: Hadoop 安装在 /usr/local/hadoop 中。适当改变路径。

答案 1 :(得分:0)

基本上,使用echo,您在本地测试文件而根本不接触HDFS。 HDFS是一个文件系统抽象......但这是另一个主题。

如果mapper.py或reducer.py不在您当前的目录中,那么无论它们是否位于相同路径的HDFS中,您都会遇到上述问题。

要使用带有hadoop流的本地python文件,您需要使用流式传输jar(其位置取决于您的安装),请参阅this post here