用户登录
用户注册

分享至

java调用mapreduce

  • 作者: 放屁用手抠
  • 来源: 51数据库
  • 2020-10-02
一、 首先要知道此前提 ? 转载
  若在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);



  在
mapreduce
实例化test1呗

再看看别人怎么说的。
软件
前端设计
程序设计
Java相关