分享

MapReduce程序在应用中怎么执行呢?

chenhaoyes 发表于 2014-8-20 20:01:33 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 19587
编写的mr程序能够正常运行了,但都是通过 hadoop命令执行,或者在Eclipse执行,真正作为应用时,应该不是按照这种方式来执行程序吧。
就好像Java中 写J2SE时,一个类只要有main()方法就可以执行,但在J2EE中,还需要web容器装载Java Web项目。请问下,MapReduce有没有类型的做法?

已有(5)人评论

跳转到指定楼层
desehawk 发表于 2014-8-20 21:49:54
完全可以的,只要你打包正确,环境一致没有问题的。经常遇到的问题,比如找不到类,为什么找不到类,是因为环境变了,类不在原先的位置了,所以classpath需要配置,它们之间有些小区别,这个需要经验积累,但是大部分都是一样的。
下面一些例子你可以参考一下:

hadoop编程:解决eclipse能运行,打包放到集群上ClassNotFoundException:经验总结


hadoop运行报错: java.lang.ClassNotFoundException解决方法


[Hadoop]cannot find hadoop configurations in classpath

回复

使用道具 举报

howtodown 发表于 2014-8-20 21:54:52
集群上执行
使用Hadoop jar命令
具体参考下面
hadoop集群,如何运行Java jar包---如何运行mapreduce程序



Eclipse运行时这样的:run as application或则run as hadoop



详细参考下面

hadoop开发方式总结及操作指导


搭建Eclipse下运行Mapreduce代码的环境

回复

使用道具 举报

pig2 发表于 2014-8-20 22:33:19
本帖最后由 pig2 于 2014-8-20 22:35 编辑
你想的有点复杂了,mapreduce的本质是Java程序,mapreduce可以看做是Java的一个框架。但是Java的框架有很多,比如Struts、Hibernate和Spring。所以Hadoop也是一种框架,mapreduce可以理解为分布式、计算框架
也就把它认为是j2se,它同样有一个main()入口的。
回复

使用道具 举报

chenhaoyes 发表于 2014-8-21 11:32:26
pig2 发表于 2014-8-20 22:33
本帖最后由 pig2 于 2014-8-20 22:35 编辑
你想的有点复杂了,mapreduce的本质是Java程序,mapreduce可以 ...

理解你说的了,但还有点疑问,比如我们在Eclipse上编写好程序之后,下一步就是需要将这个项目打包,放到真正的Hadoop服务器上执行,但是数据源可能是周期性变化的,Hadoop有实现定时执行任务的解决办法么?不会每次都需要手工去输入hadoop jar xxx  去执行程序吧?
回复

使用道具 举报

pig2 发表于 2014-8-21 11:42:03
chenhaoyes 发表于 2014-8-21 11:32
理解你说的了,但还有点疑问,比如我们在Eclipse上编写好程序之后,下一步就是需要将这个项目打包,放到 ...
你会写Linux脚本就可以。

参考如下:

用crontab每天定时执行mapreduce,结果发现hadoop作业一起无法正常运行,脚本正常执行,如下:

# vi /etc/crontab


  1. 30 6  * * * hadoop sh /home/hadoop/test.sh
复制代码

test.sh 内容如下:
  1. hadoop fs -rmr output1
  2. hadoop jar /home/hadoop/contrib/streaming/hadoop-streaming-0.20.2+737.jar \
  3.     -mapper /home/hadoop/map -reducer /home/hadoop/reduce \
  4.     -file /home/hadoop/map -file /home/hadoop/reduce \
  5.     -input test/*.txt -output output1
复制代码








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条