我仍然是hadoop
新手,我试图让这个例子工作。
我能够设置hadoop并运行wordcount
mapreduce
示例,一切都很好。但是,当我使用hadoop 2.6.0
对windows 7
运行hadoop
streaming command
时,我遇到了java.lang.IllegalArgumentException: Invalid DFS directory name
异常
这是我的命令:
hadoop jar %HADOOP_PREFIX%sharehadooptoolslibhadoop-streaming-2.6.0.jar -mapper mapper.php -reducer reducer.php -input input/* -output output
如果我从所述文件夹运行命令d:hadoop
则显示的错误变为:
java.lang.IllegalArgumentException: Invalid DFS directory name /d:/hadoop
输出目录是在显示错误和作业失败之前创建的。
我尝试搜索命令来设置分布式文件的位置,但没有找到类似的东西。
任何建议将不胜感激。
输入和输出路径应该是hdfs
路径,而不是local filesytem
路径。您正在提供输入路径作为d:/hadoop
这是local filesystem
您必须在hdfs
中找到路径(它们通常驻留在/user/<hadoop username>
(
假设您的hadoop user
是Ahmed
,应用以下命令应该为您提供hdfs
主页中的所有目录和文件
hadoop dfs -ls
相当于
hadoop dfs -ls /user/Ahmed/
因此,跟踪hdfs文件位置并将其传递给-input argument
(假设/user/Ahmed/input
是路径(
hadoop jar %HADOOP_PREFIX%sharehadooptoolslibhadoop-streaming-2.6.0.jar -mapper mapper.php -reducer reducer.php -input /user/Ahmed/input
感谢 Ramesh,我注意到我的 hdfs 命令在当前目录上运行,而不是在 hdfs 位置上运行。所以像"hdfs dfs -ls/"这样的命令,其中列出了我所在的目录,而不是 hadoop分布式文件系统上的目录。
事实证明这是配置问题。我必须确保 fs.defaultFS 在核心站点.xml和 hdfs-site 中设置正确.xml