如何使用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集群?
- Apache Hadoop setXIncludeAware UnsupportedOperationException
- 即使在命令行上告知-D mapred.reduce.tasks = 0之后,hadoop也会减少任务运行
- 使用Java API从Hive获取表属性
- 启动Hadoop集群时出错
- 即使Hadoop正在运行,Hadoop也没有在作业跟踪器中显示我的工作
- hadoop – map reduce任务和静态变量
- 从windows eclipse运行Mapreduce(yarn)时出错
- 保存Hadoop中的Mapper输出的位置?
- 为什么检查hadoop中是否存在文件会导致NullPointerException?