我正在尝试使用hadoop流,其中我有一个java类用作映射器。为了简化问题,我们假设java代码如下:
import java.io.* ;
class Test {
public static void main(String args[]) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input ;
while ((input = br.readLine()) != null) {
System.out.println(input) ;
}
} catch (IOException io) {
io.printStackTrace() ;
}
}
}
我可以将其编译为“javac Test.java”,并从命令行运行它,如下所示:
[abhattac@eat1-hcl4014 java]$ cat a.dat
abc
[abhattac@eat1-hcl4014 java]$ cat a.dat | java Test
abc
[abhattac@eat1-hcl4014 java]
让我们假设我在HDFS中有一个文件:a.dat
[abhattac@eat1-hcl4014 java]$ hadoop fs -cat /user/abhattac/a.dat
Abc
[abhattac@eat1-hcl4014 java]$ jar cvf Test.jar Test.class
added manifest
adding: Test.class(in = 769) (out= 485)(deflated 36%)
[abhattac@eat1-hcl4014 java]$
现在我尝试在hadoop流中使用(Test.java)作为映射器。我为[1]-mapper命令行选项提供了什么。它应该像下面这样吗?[2]-file命令行选项。我需要制作一个jar文件Test.class?如果是这种情况,我需要包含MANIFEST.MF文件来指示主类吗?
我试了所有这些选项,但似乎都不起作用。任何帮助都将不胜感激。
hadoop jar /导出/应用程序/hadoop/最新/贡献/流/hadoop-流-1.2.1.45.jar -文件测试.jar映射器“java测试” -输入/用户/abhattac/a.dat -输出 /用户/abhattac/output
上面的命令不起作用。任务日志中的错误消息为:
stderr日志
Exception in thread "main" java.lang.NoClassDefFoundError: Test
Caused by: java.lang.ClassNotFoundException: Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
由于hadoop streaming只是通过stdin将工作堆积到命令行可执行文件中,所以您可以像在本地一样在Test.class上运行“java Test”。没必要打包到罐子里。
我自己使用您的代码成功运行了这个:
hadoop jar hadoop-streaming.jar -file Test.class -mapper 'java Test' -input /input -output /output
SelimN是对的,这是一种非常奇怪的方式,因为你也可以编写一个本地java映射器。
当您想使用脚本语言(如bash或python)而不是使用Java时,通常会使用流。
我想通过管道传输我的hadoop流作业。例如,我运行了一个命令hadoop jarhadoop-streaming.jar-mappermap1.pyreducer.py-inputxx输出 /output1 但是我想使用第一步的输出作为第二步mapduce作业的输入,而不存储在hdfs中,也许输出为标准输出。有没有像linux管道一样的东西?比如hadoop jarhadoop-streamin
目的 这篇文档的目的是帮助你快速完成单机上的Hadoop安装与使用以便你对Hadoop分布式文件系统(HDFS)和Map-Reduce框架有所体会,比如在HDFS上运行示例程序或简单作业等。 先决条件 支持平台 GNU/Linux是产品开发和运行的平台。 Hadoop已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证。 Win32平台是作为开发平台支持的。由于分布式操作尚未在Wi
目的 这篇文档的目的是帮助你快速完成单机上的Hadoop安装与使用以便你对Hadoop分布式文件系统(HDFS)和Map-Reduce框架有所体会,比如在HDFS上运行示例程序或简单作业等。 先决条件 支持平台 GNU/Linux是产品开发和运行的平台。 Hadoop已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证。 Win32平台是作为开发平台支持的。由于分布式操作尚未在Wi
我已经在单节点集群上安装了Hadoop-2.4.0。在启动dfs和yarn并执行jps之后,我将运行以下服务。 当我尝试执行以下命令时,我得到了一个错误
如何从java文件运行hadoop命令下面: hadoop jar'/home/ashish/desktop/hadoop_basics/wordcount_program/WordCount.jar'WordCount/wordcounttutorial/input/wordcounttutorial/output 提前谢了。