我正在关注这本书Hadoop: the definitive Guide。
我对示例3-1感到困惑。
有一个Java源文件URLCat.java。
我使用javac
将其编译为URLCat.class,然后使用jar
将其包装到jar中。
这本书说要用
% hadoop URLCat hdfs://localhost/user/tom/quangle.txt
运行它。我尝试了很多不同的方法,比如
% hadoop jar URLCat.jar .......
但没有奏效。我有这样的错误:
线程“main”中的异常java.lang.ClassNotFoundException:hdfs:// localhost / user / username / quangle / txt
这是什么原因,我该怎么做?
答案 0 :(得分:4)
这很简单:
[me@myhost ~]$ hadoop jar
RunJar jarFile [mainClass] args...
那么,你想要的是hadoop jar yourJar.jar your.class.with.Main [any args]
答案 1 :(得分:3)
当然你可以使用猫,但那种不是重点(即你正在学习,而不只是试图让它发挥作用)。
根据本书,您需要设置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.
答案 2 :(得分:0)
答案 3 :(得分:0)
要使hadoop URLCat命令工作,您需要将jar(URLCat.jar)放在类路径中。你可以把它放在hadoop的lib / dir中。
要运行hadoop jar URLCat.jar,你需要创建一个将在其中定义Main类的jar,否则它会认为命令行上的下一个参数是类名。您可以尝试的是hadoop jar URLCat.jar URLCat hdfs:// ...
答案 4 :(得分:0)
我是根据本网站上的帮助和hadoop教程做到的。
mkdir urlcat_classes<br>
javac -classpath /usr/lib/hadoop/hadoop-0.20.2-cdh3u1-core.jar -d urlcat_classes URLCat.java<br>
jar -cvf urlcat.jar -C urlcat_classes .<br>
hadoop jar urlcat.jar no.gnome.URLCat
hdfs://localhost/user/claus/sample.txt<br>
<br>
no.gnome is from 'package no.gnome;' in URLCat.java.<br><br>
问候
克劳斯
答案 5 :(得分:0)
现在还不确定答案有多有用。我今天遇到了同样的问题,事实上正在研究同一本书中的一个例子(Hadoop权威指南) 我能够按如下方式执行示例程序:
编写您的Java代码并将其另存为.java
文件
使用以下命令编译java程序:
javac -classpath <path to hadoop core and commons-cli jar file> <path to your java program file>
创建一个包含类文件的jar文件:
jar cvf <jar file> <class files to add separated by space>
使用hadoop
命令行执行jar文件:
hadoop jar <jar file name> <class name containing your main method> <argument to the main method>
例如
hadoop jar FileSystemCat.jar FileSystemCat hdfs://localhost/user/root/MyFiles/meet_a_seer.txt
希望有所帮助
答案 6 :(得分:0)
第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
答案 7 :(得分:0)
转到已编译的.class
文件所在的目录。
在运行hadoop URLCat hdfs://localhost/user/tom/quangle.txt
时,请使用包括包名称的完整类名(请参阅Receiving "wrong name" NoClassDefFoundError when executing a Java program from the command-line获取完整的班级名称或运行作业的目录)。
就我而言,URLCat.java
位于com.tom.app
,因此hadoop命令为hadoop com.tom.app.URLCat hdfs://localhost/user/tom/quangle.txt
。
答案 8 :(得分:-2)
我们可以通过hdfs api访问HDFS。我对它的理解是你可以使用hdfs api联系运行dfs的hadoop集群并从中获取数据。
为什么我们需要调用命令 hadoop jar URLCat.jar
为什么不呢 java URLCat
为什么客户端必须安装hadoop然后联系hadoop集群?