如何在hadoop-2.6.0上编译运行自己编写的java代码?

如何在hadoop-2.6.0上编译运行自己编写的java代码?,第1张

在不使用eclipse情况使java程序在hadoop 2.2中运行的完整过程。整燃陪并个过程中其实分为java程序的编译,生成jar包,运行测试。\x0d\x0a这三个步骤运用的命令都比较简单,主要的还是如乱盯何找到hadoop 2.2提供给java程序用来编译的jar包。具体可以查看皮迹:\x0d\x0aHADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib目录\x0d\x0a下面会通过一个在hadoop中创建一个目录的JAVA例子来进行演示\x0d\x0a具体代码如下:\x0d\x0a\x0d\x0apackage com.wan.demo\x0d\x0a\x0d\x0aimport java.io.IOException\x0d\x0aimport org.apache.hadoop.conf.Configuration\x0d\x0aimport org.apache.hadoop.fs.FileSystem\x0d\x0aimport org.apache.hadoop.fs.Path\x0d\x0a\x0d\x0apublic class HADemo {\x0d\x0a\x0d\x0apublic static void main(String[] args) {\x0d\x0a// TODO Auto-generated method stub\x0d\x0amkdir(args[0])\x0d\x0a}\x0d\x0a\x0d\x0apublic static void mkdir(String dir){\x0d\x0aConfiguration configuration=new Configuration()\x0d\x0aFileSystem fs\x0d\x0atry {\x0d\x0afs = FileSystem.get(configuration)\x0d\x0afs.mkdirs(new Path(dir))\x0d\x0afs.close()\x0d\x0a} catch (IOException e) {\x0d\x0a// TODO Auto-generated catch block\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a把HADemo.java文件拷贝到linux环境中\x0d\x0a配置HADOOP_HOME/bin到环境中,启动集群,进入HADemo.java文件目录中\x0d\x0a注:下面的lib目录里面的文件由HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/ webhdfs/WEB-INF/lib目录中获取,下面做的目的是为了缩减命令长度\x0d\x0a1.编译java\x0d\x0a# mkdir class\x0d\x0a#Javac -classpath .:lib/hadoop-common-2.2.0.jar:lib/hadoop-annotations-2.2.0.jar -d class HADemo.java\x0d\x0a2.生成jar包\x0d\x0a#jar -cvf hademo.jar -C class/ .\x0d\x0aadded manifest\x0d\x0aadding: com/(in = 0) (out= 0)(stored 0%)\x0d\x0aadding: com/wan/(in = 0) (out= 0)(stored 0%)\x0d\x0aadding: com/wan/demo/(in = 0) (out= 0)(stored 0%)\x0d\x0aadding: com/wan/demo/HADemo.class(in = 844) (out= 520)(deflated 38%)\x0d\x0a3.测试运行\x0d\x0a#hadoop jar hademo.jar com.wan.demo.HADemo /test\x0d\x0a检测:\x0d\x0a#hadoop fs -ls /\x0d\x0a \x0d\x0a结束!

第一种:原生态运行jar包

1,利用eclipse编写Map-Reduce方法,一般引入Hadoop-core-1.1.2.jar。注意这里eclipse里没有安装hadoop的插件,只是引入其匝包,该eclipse可以安装在windows或者linux中,如果是在windows中安装的,且在其虚拟机安装的linux,可以通过共享文件夹来实现传递。

2,编写要测试的数据,如命名为tempdata

3,利用eclipse的export来打包已编写好的,在利用eclipse打包jar的时候,只需要选择src即可,一般只打包程序文件,并且需要选择main class,将该jar放到如/home/hadoop/docum/Test.jar

4,将要分析的数据传到hdfs上

hadoop fs -put /home/hadoop/myhadoopdata/tempdata ./testdata/

5,开始执行jar

hadoop jar /home/hadoop/Docum/Test.jar /user/hadoop/temperatur output

这是一种利用jar来运行的。

这里Test.jar在本地,jar没必要上传到hdfs上

参数依次为

本地mapred程序,hdfs的测试数据即输入文件,输出文件夹。

hadoop jar /home/hadoop/Temperature.jar inputpath outputpath

注意:这里可以不需要指定类的名称,而输出的文件夹outputpath不能事先已经存在。

第二种:伪分布式下运行WordCount

1,拷贝源代码

cp /usr/local/hadoop1.1.2/src/examples/org/apache/hadoop/examples/WordCount.java ~/ygch/hadoop/

2,编译源代码,放到指定的文件夹如这里的class下

javac

-classpath /usr/local/hadoop1.1.2/hadoop-core1.1.2.jar:

/usr/local/hadoop1.1.2/lib/commons-cli-1.2.jarWordCount.java -d class,

利用-classpath选项指定WordCount需要的jar包。hadoop目录下存放jar包的位置有两个:根目录和/lib目录。然后我们可以通过jar tvf *.jar查看jar包内容,进而可以知道WordCount需要的是哪几个jar包。

-d选项指定生成颤含丛的类文件的位置,在编译的时候这个选项必须重新指定,不能让class文件生成在当前目录下。

3,将class文件打包成一个jar包:

jar cvf WordCount.jar -C classes/ .

注意不要忘记最后有一个点.,这个点点必须和前面要有空格,否则jar命令报错。该点指示jar命令的文件列表,表示指定目录下的所有文件。

4,生成input文件:

由于运行hadoop时指定的输入文件只能是HDFS文件系统中的文件,所以我们必须将要进行wordcount的文件从本地文件系统拷贝到HDFS文件系统中。

hadoop fs -mkdir input

hadoop fs -put testfile input

5. 运行jar包:

hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output

在运行命令中由于WordCount.java中包括package信息,所以我们在指定类时要包含package的完整信息。

6. 查看结果

在hadoop程序运行完后,结果会放在output目录下,该目录是自老悄动生成的。查看命令为:

hadoop fs -cat output/part-r-00000

使用-cat或者-text都行

第三种Hadoop直接执行Class文件

可以事先在eclipse中编译好class,然后直接利用hadoop来执行该class文件

在Hadoop集群中运行作业的茄樱时候,必须要将程序打包为jar文件。

在Hadoop本地和伪分布中可以运行jar文件,也可以直接运行class文件,注意直接运行class文件,必须是没有map和reducer的,直接获取FileSystem来进行 *** 作。

如果类有包名,拷贝的时候也要将其包名拷贝,然后


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12264506.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存