原生态在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
原生态在Hadoop上运行Java程序的更多相关文章
- Android驱动入门-在Android系统上运行JAVA程序
在linux上运行java程序,直接用javac编译,再用java运行就行了.但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的. 如果想在Android上运行Hello wo ...
- 在hadoop上运行java文件
hadoop 2.x版本 编译:javac -d . -classpath /usr/lib/hadoop/hadoop-common-2.2.0.2.0.6.0-102.jar TestGetPat ...
- 腾讯云上运行java程序过程
1: 购买服务器(腾讯云,阿里云等) 2:安装centos操作系统: 3:安装jdkhttp://www.cnblogs.com/Amos-Turing/p/7403696.html 4:安装数据库( ...
- 在Android上运行Java和C程序
在linux上运行java程序,直接用javac编译,再用java启动虚拟机运行就行了.但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的.下面介绍Android上运行Hell ...
- 在Hadoop上运行基于RMM中文分词算法的MapReduce程序
原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...
- win10在html上运行java的applet程序
Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同. 含有Applet的网页的HTML文件代码中部带有 和 ...
- hadoop上的C++程序开发
hadoop可以用C++开发,命令运行方式为pipes,例子:hadoop pipes -conf job_config.xml -input input/myfile.txt -output out ...
- windows批处理运行java程序
明确需求 今天你编了一个java swing版照片查看器,想让计算机上的所有照片默认打开方式都改成你的照片查看器. 使用工具软件 很多工具软件都是不把jre打包到exe中的,这就是说打包之后的exe只 ...
- 利用Mahout实现在Hadoop上运行K-Means算法
利用Mahout实现在Hadoop上运行K-Means算法 一.介绍Mahout Mahout是Apache下的开源机器学习软件包,目前实现的机器学习算法主要包含有协同过滤/推荐引擎,聚类和分类三个部 ...
随机推荐
- springboot中对yaml文件的解析
一.YAML是“YAML不是一种标记语言”的外语缩写 (见前方参考资料原文内容):但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名.它是一种直观的能够被电脑识别的数据序列化 ...
- 【UVA】11825 Hackers' Crackdown(状压dp)
题目 传送门:QWQ 分析 $ n<= 16 $ 显然是状压 然后搞一搞(靠着蓝书yy一下) 代码 #include <bits/stdc++.h> using namespace ...
- HttpContext.Current并非无处不在
阅读目录 开始 无处不在的HttpContext HttpContext.Current到底保存在哪里? HttpContext并非无处不在! 如何获取文件绝对路径? 异步调用中如何访问HttpCon ...
- crs_register/crs_unregister 注册与移除RAC服务 --zhuanzai
crs_register命令主要是将资源注册到CRS.该方法通常结合crs_stat -p 或者crs_profile先创建配置文件.同时crs_register也具有更新CRS的功能.本文将描述cr ...
- [Python] numpy.Matrix
import numpy as np np.matrix('1, 2; 3, 4') #1, 2 #3, 4 np.matrix([[1,2],[3,4]]) #1, 2 #3, 4
- delete,truncate,drop的区别
操作 删除对象 表和索引的空间 是否回滚 时间 delete table和view的数据,可以使用where精确删除,删除会触发触发器 表或索引的空间不变化 是dml,可以rollback回滚 最慢 ...
- Python-第三方库requests
Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得 ...
- uwsgi的python2+3多版本共存实操使用virtualenv
1首先,机器需要有python2和python3的可执行环境.确保pip和pip3命令可用.原理就是在哪个环境下安装uwsgi.uwsgi启动的时候,就用的哪个python版本 2安装virtuale ...
- 679. 24 Game
▶ 给出四个整数,求他们是否能加减乘除括号拼凑成 24 ● 代码,11 ms,正向枚举,推广性很强(nums 可以改为任意长度,也不限于拼凑 24 这个和),缺点是只能判定是否有解,不方便输出不重复的 ...
- 建设银行网上银行MD5withRSA php版
1. 首先通过java程序将建设银行的公钥串转成pem格式并写入文件 SignTest.java是运行程序, RSASig.java是建设银行签名算法类, bcprov-jdk15-145.jar是P ...