设为首页 收藏本站
查看: 1064|回复: 0

[经验分享] 原生态在hadoop上运行java程序

[复制链接]

尚未签到

发表于 2018-10-31 12:26:21 | 显示全部楼层 |阅读模式
第一种:原生态运行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>  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>  利用-classpath选项指定WordCount需要的jar包。hadoop目录下存放jar包的位置有两个:根目录和/lib目录。然后我们可以通过jar tvf  *.jar查看jar包内容,进而可以知道WordCount需要的是哪几个jar包。
  -d选项指定生成的类文件的位置,在编译的时候这个选项必须重新指定,不能让class文件生成在当前目录下。
  3,class文件打包成一个jar包:

  jar cvf WordCount.jar -C>  注意不要忘记最后有一个点.,这个点点必须和前面要有空格,否则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命令后可以不用加根路径。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628970-1-1.html 上篇帖子: VMware在vSphere产品中加入对Hadoop的支持 下篇帖子: cloudera hadoop的lib/native/下没有库文件的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表