原生态在Hadoop上运行Java程序

第一种:原生态运行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来进行操作。
如果类有包名,拷贝的时候也要将其包名拷贝,然后
hadoopwhut/structfile/SequenceFileWriteDemo numbers.seq

利用Hadoop命令和Java命令都可以执行class文件,前者可以将Hadoop库文件路径加入到类路径中来,同时也能获取Hadoop的配置文件。
一般都需要提前设置一个HADOOP_CLASSPATH环境变量用于添加应用程序类的路径,注意这里的路径是用户本地的文件路径,不是hdfs中的路径。

具体的如下:
export  HADOOP_CLASSPATH=/home/hadoop/hadoopclass
hadoop FileSystemCat hdfs://localhost:9000/user/hadoop/inputdata/iodata.txt
也可以直接在IDE中将hadoop的jar加入classpath中,然后直接run

第四种 Hadoop与eclipse环境的搭建
hadoop jar 运行的实质是:
1.利用hadoop这个脚本启动一个jvm进程;
2.jvm进程去运行org.apache.hadoop.util.RunJar这个java类;
3.org.apache.hadoop.util.RunJar解压Temperature.jar
到hadoop.tmp.dir/hadoop-unjar*/目录下;
4.org.apache.hadoop.util.RunJar动态的加载并运行MainClass或参数中指定的Class;
5.MainClass或参数中指定的Class中设定Job的各项属性
6.提交job到JobTracker上并监视运行情况

执行hadoop jar的时候,jar不需要放到hdfs中,一般hadoop是到本地中寻找jar的,如果用户此时在jar目录下,可以直接写jar名。

对于输入文件夹和输出文件夹也不需要写上hadoop的内置路径名,默认是在/user/hadoop/这个目录下的,hadoop命令后可以不用加根路径。

相关阅读:

HDFS的安装和部署 http://www.linuxidc.com/Linux/2013-06/86599.htm

HDFS上块恢复机制 http://www.linuxidc.com/Linux/2013-05/84199.htm

将本地文件拷到HDFS中 http://www.linuxidc.com/Linux/2013-05/83866.htm

用Sqoop进行MySQL和HDFS系统间的数据互导 http://www.linuxidc.com/Linux/2013-04/83447.htm

时间: 2024-08-02 07:30:22

原生态在Hadoop上运行Java程序的相关文章

在hadoop上运行java文件

hadoop 2.x版本 编译:javac -d . -classpath /usr/lib/hadoop/hadoop-common-2.2.0.2.0.6.0-102.jar TestGetPathMark.java 在com的同级目录上建立manifest.mf 在里面写上Main-Class: com.test.path.mark.TestGetPathMark d打包:然后保存并执行jar -cvfm test.jar manifest.mf com/ 然后执行hadoop jar t

腾讯云上运行java程序过程

1: 购买服务器(腾讯云,阿里云等) 2:安装centos操作系统: 3:安装jdkhttp://www.cnblogs.com/Amos-Turing/p/7403696.html 4:安装数据库(postgresql)http://www.cnblogs.com/Amos-Turing/p/6625663.html 数据安装完,防火墙启动,数据库服务启动,等: 在设置一下/var/lib/pgsql/9.5/data 下的postgres.conf文件 如果不设置会遇到如下问题,创建数据库的

在Android上运行Java和C程序

在linux上运行java程序,直接用javac编译,再用java启动虚拟机运行就行了.但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的.下面介绍Android上运行Hello world! 一.单个java文件编译运行 1.在Ubuntu虚拟机上将Hello.java编译成Hello.class文件 2.在Ubuntu上的Android编译环境下生成Hello.jar文件 # dx --dex --output=Hello.jar Hello.class 注意这里的d

在Hadoop上运行基于RMM中文分词算法的MapReduce程序

原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词算法的MapReduce程序 23条回复 我知道这个文章标题很“学术”化,很俗,让人看起来是一篇很牛B或者很装逼的论文!其实不然,只是一份普通的实验报告,同时本文也不对RMM中文分词算法进行研究.这个实验报告是我做高性能计算课程的实验里提交的.所以,下面的内容是从我的实验报告里摘录出来的,当作是我学

用Eclipse编写运行Java程序

1.选择一个空的文件夹,作为workspace工作空间,用来存放你以后用eclipse写的Java程序. 2.新建java项目:File->new->java project 3.完成创建后,在src上单击鼠标右键 new->class 4.这时候就可以在主窗体编写代码了 5.按run  as   java  application,即可运行. 用Eclipse编写运行Java程序,布布扣,bubuko.com

Java 命令行运行java程序,出现“找不到或无法加载主类 ”的注意事项

引用:http://blog.chinaunix.net/uid-27106528-id-5209914.html 要在CMD命令行中使用java 运行java程序,关于出现 “找不到或无法加载主类 ”错误的解决办法,   网络上基本都是在说关于"classpath"路径的配置问题,要加入 ” .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;“    前面加入”.;",表面要在当前目录下面寻找类.       如果你试过了

JAVA设置环境变量和在DOS下运行java程序

在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http://blog.sina.com.cn/s/blog_639403840100i5rt.html 下面先来了解一下什么是dos吧 dos 我们使用计算机接触最频繁的就是DOS.DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”,顾名思义,DOS主要是一种面向磁盘的系统软

使用命令行运行Java程序

我现在身边有好多人在学习java,只要一提到学习java语言,我们马上想到的工具是eclipse,MyEclipse,NetBeans等等. 也许是我们用惯了vc,对集成开发环境有太多的依赖.但是,我个人觉得,对于一个开发人员有必要熟悉各种开发工具,更要尝试最原始的开发工具,即命令行. 同时我还发现用命令行更对java的语法有更深刻的理解,而不是仅仅停留在背诵记忆的层次上. 我们先介绍一下常用的命令: ①cd命令---切换目录:   e.g. cd src ②javac命令---编译java源程

notepad++通过cmd运行java程序

notepad++运行java程序方法主要有下面两个: 通过插件NppExec运行(自行百度“notepad++运行java”) 通过运行 调用cmd编译执行java程序(下面详细讲解) 点击上面工具栏的运行 然后 左键点击运行(或者按F5) 在运行窗口中输入 cmd /k javac "$(FULL_CURRENT_PATH)" & echo 编译成功! & PAUSE & EXIT 然后点击保存后输入一个名字,并可以创建快捷键.完成后点OK 重复上面的步骤,