所以我是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:没有这样的文件或目录
这看起来很奇怪,因为正好在那个位置上列出了。 知道这里可能会发生什么吗?
答案 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
。
解决此问题:
确保 your local file system
上存在/ user / s1353460 /。如果没有,请创建相同内容,然后复制或创建 mapper.py
& / user / s1353460 /
reducer.py
确保 mapper.py
具有执行权限 chmod +x /user/s1353460/mapper.py
确保 reducer.py
具有执行权限 chmod +x /user/s1353460/reducer.py
运行 echo "this is a test and this should count the number of words" | /user/s1353460/mapper.py | sort -k1,1 | /user/s1353460/reducer.py
这次应该没有任何错误。
在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。