java mapreduce编程实例_我写了一段初始化的代码test1.java 想在mapreduce程序mr.java中使用它 该怎么使用呢...

展开全部

一、 首先要知道此前提e68a84e8a2ad3231313335323631343130323136353331333337386562   转载

若在windows的Eclipse工程中直接启动mapreduc程序,需要先把hadoop集群的配置目录下的xml都拷贝到src目录下,让程序自动读取集群的地址后去进行分布式运行(您也可以自己写java代码去设置job的configuration属性)。

若不拷贝,工程中bin目录没有完整的xml配置文件,则windows执行的mapreduce程序全部通过本机的jvm执行,作业名也是带有“local"字眼的作业,如 job_local2062122004_0001。 这不是真正的分布式运行mapreduce程序。

估计得研究org.apache.hadoop.conf.Configuration的源码,反正xml配置文件会影响执行mapreduce使用的文件系统是本机的windows文件系统还是远程的hdfs系统; 还有影响执行mapreduce的mapper和reducer的是本机的jvm还是集群里面机器的jvm

二、 本文的结论

第一点就是: windows上执行mapreduce,必须打jar包到所有slave节点才能正确分布式运行mapreduce程序。(我有个需求是要windows上触发一个mapreduce分布式运行)

第二点就是: Linux上,只需拷贝jar文件到集群master上,执行命令hadoop jarPackage.jar MainClassName即可分布式运行mapreduce程序。

第三点就是:  推荐使用附一,实现了自动打jar包并上传,分布式执行的mapreduce程序。

附一、 推荐使用此方法:实现了自动打jar包并上传,分布式执行的mapreduce程序:

请先参考博文五篇:

Hadoop作业提交分析(一)~~(五)

引用博文的附件中EJob.java到你的工程中,然后main中添加如下方法和代码。public static File createPack() throws IOException {

File jarFile = EJob.createTempJar("bin");

ClassLoader classLoader = EJob.getClassLoader();

Thread.currentThread().setContextClassLoader(classLoader);

return jarFile;

}

在作业启动代码中使用打包:

Job job = Job.getInstance(conf, "testAnaAction");

添加:

String jarPath = createPack().getPath();

job.setJar(jarPath);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值