如何使用Java类运行Hadoop?

我正在关注Hadoop这本书:权威指南 。

我在例3-1中感到困惑。

有一个Java源文件URLCat.java。 我使用javac将其编译为URLCat.class,然后使用jar将其包装到jar中。

书上说要用

 % hadoop URLCat hdfs://localhost/user/tom/quangle.txt 

运行它。 我尝试了很多不同的方法,比如

 % hadoop jar URLCat.jar ....... 

但没有奏效。 我有这样的错误:

线程“main”中的exceptionjava.lang.ClassNotFoundException:hdfs:// localhost / user / username / quangle / txt

这是什么原因,我该怎么做?

命令的语法有点不同:

 hadoop fs -cat hdfs:///user/tom/quangle.txt 

在你的道路上有你的家吗? 你能不用任何参数调用hadoop吗?

这很简单:

 [me@myhost ~]$ hadoop jar RunJar jarFile [mainClass] args... 

所以,你想要的是hadoop jar yourJar.jar your.class.with.Main [any args]

当然你可以使用猫,但那种不是重点(即你正在学习,而不只是试图让它工作)。

根据本书,您需要设置HADOOP_CLASSPATH环境变量。 就我而言,使用本书中的构建示例,我的所有类都位于: / media / data / hadefguide / book / build / classes

这是一个例子:

 hduser@MuleBox ~ $ export HADOOP_CLASSPATH= hduser@MuleBox ~ $ hadoop URLCat hdfs://localhost/user/hduser/quangle.txt Exception in thread "main" java.lang.NoClassDefFoundError: URLCat Caused by: java.lang.ClassNotFoundException: URLCat 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) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) Could not find the main class: URLCat. Program will exit. hduser@MuleBox ~ $ export HADOOP_CLASSPATH=/media/data/hadefguide/book/build/classes hduser@MuleBox ~ $ hadoop URLCat hdfs://localhost/user/hduser/quangle.txt On the top of the Crumpetty Tree The Quangle Wangle sat, But his face you could not see, On account of his Beaver Hat. 

要使hadoop URLCat命令工作,您需要将jar(URLCat.jar)放在类路径中。 你可以把它放在hadoop的lib / dir中。

要运行hadoop jar URLCat.jar,您需要创建一个将在其中定义Main类的jar,否则它会认为命令行上的下一个参数是类名。 您可以尝试的是hadoop jar URLCat.jar URLCat hdfs:// …

我是根据本网站上的帮助和hadoop教程做到的。

 mkdir urlcat_classes
javac -classpath /usr/lib/hadoop/hadoop-0.20.2-cdh3u1-core.jar -d urlcat_classes URLCat.java
jar -cvf urlcat.jar -C urlcat_classes .
hadoop jar urlcat.jar no.gnome.URLCat hdfs://localhost/user/claus/sample.txt

no.gnome is from 'package no.gnome;' in URLCat.java.

问候
克劳斯

第1步:编译Java程序:

javac URLCat.java -classpath $ HADOOP_HOME / share / hadoop / common / hadoop-common-2.7.0.jar

第2步:创建jar文件:

jar cvf URLCat.jar URLCat.class

第3步:执行程序:(提及你的hdfs文件位置)

hadoop jar URLCat.jar URLCat hdfs:// localhost:9000 / pcode / wcinput.txt

转到已编译的.class文件所在的目录。

使用包括包名称的完整类名(在运行hadoop URLCat hdfs://localhost/user/tom/quangle.txt 时,请参阅从命令行执行Java程序时获取“错误名称”NoClassDefFoundError以获取完整类名或运行作业的目录) hadoop URLCat hdfs://localhost/user/tom/quangle.txt

在我的例子中, URLCat.java位于com.tom.app ,因此hadoop命令是hadoop com.tom.app.URLCat hdfs://localhost/user/tom/quangle.txt

现在还不确定答案有多有用。 我今天遇到了同样的问题,事实上正在研究同一本书中的一个例子(Hadoop权威指南)我能够按如下方式执行示例程序:

  • 编写您的Java代码并将其另存为.java文件

  • 使用以下代码编译java程序:

     javac -classpath   
  • 创建一个包含类文件的jar文件:

     jar cvf   
  • 使用hadoop命令行执行jar文件:

     hadoop jar    

    例如

     hadoop jar FileSystemCat.jar FileSystemCat hdfs://localhost/user/root/MyFiles/meet_a_seer.txt 

希望能帮助到你

我们可以通过hdfs api访问HDFS。 我对它的理解是你可以使用hdfs api联系运行dfs的hadoop集群并从中获取数据。

为什么我们需要以hadoop jar URLCat.jar的forms调用该命令

为什么不只是java URLCat

为什么客户端必须安装hadoop然后联系hadoop集群?