所以我对hadoop和命令行是全新的,尽管我以前做过一些编程(作为一个学生)。我试图运行几个简单的程序(教程的一部分)从腻子上的学校机器。
我已经得到了hadoop命令工作之前,运行一个不同的简单程序刚刚好,但我坚持这一个。不,这不是家庭作业。只是一个学习hadoop命令的教程。
说明如下:
/*
测试代码
我们执行符合典型unix样式管道的本地测试,我们的测试将采用以下形式:
cat | map | sort | reduce模拟hadoop在流式处理时执行的相同管道,尽管是以非分布式方式。必须确保文件mapper.py和reducer.py具有执行权限:
chmod u+xMap器.py chmod u+x还原器.py
尝试以下命令并解释结果(提示:在终端窗口中键入man sort以了解有关sort命令的更多信息):
echo“这是一个测试,应该计算字数”|./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\u 1445334654365\u 163883167 drwxr-xr-x-s1353460 s1353460 0 2015-10-20 10:51/user/s1353460/data-rw-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条答案
按热度按时间yb3bgrhw1#
基本上,使用echo,您可以在本地测试文件,而完全不接触hdfs。hdfs是一个文件系统抽象。。。但这是另一个主题。
如果mapper.py或reducer.py不在当前目录中,则无论它们是否位于同一路径的hdfs中,都会出现上述问题。
要在hadoop流媒体中使用本地python文件,您需要使用流媒体jar(其位置取决于您的安装),请参阅本文。
ruoxqz4g2#
但是运行“echo”这是一个测试,它应该计算“|/user/$user/mapper.py | sort-k1,1 |/user/$user/reducer.py”返回错误的字数:
-bash:/user/s1353460/reducer.py:没有这样的文件或目录-bash:/user/s1353460/mapper.py:没有这样的文件或目录
您已创建
mapper.py
&reducer.py
在hdfs上。运行此命令时,它将搜索mapper.py
以及reducer.py
在本地文件系统上而不是在HDFS
.要解决此问题,请执行以下操作:
确保/user/s1353460/存在于
your local file system
. 如果没有,创建相同的,然后复制或创建mapper.py
&reducer.py
in/user/s1353460/确保
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作业,请执行以下操作:
假设:
Hadoop
安装在/usr/local/hadoop
. 适当地改变路径。