预测Hadoop Job最终执行时间

由于某项工作需要预测MapReduce Job最终执行结果,预测方法需要有Job提交时系统的一些特征,所以需要修改Hadoop源码,获取系统特征,重点修改了JobSubmitter.java。
(1)获取系统中正在运行的Job数量,及Task数量

 JobStatus jobStatus[] =cluster.getAllJobStatuses();
      for(int i=0;i<jobStatus.length;i++){
        if (jobStatus[i].getState()== JobStatus.State.RUNNING){
          Job tmpJob = cluster.getJob(jobStatus[i].getJobID());
          int tmpReduce = tmpJob.getTaskReports(TaskType.MAP).length;
          int tmpMap = tmpJob.getTaskReports(TaskType.REDUCE).length;
          numoftasks = numoftasks + tmpMap + tmpReduce;
          numofjobs++;
        }
      }

(2)获取Job配置信息

int numOfMap = conf.getInt(MRJobConfig.NUM_MAPS,1);
      int numOfReducer = conf.getInt(MRJobConfig.NUM_REDUCES,1);

将获取的的特征值,通过Restful服务传给服务器端进行预测。

(3)批量打包Hadoop Jar文件
以WordCount为例:

cd WordCountJar//wordcount.java所在路径
num=11 //需要打包的wordcount.java个数
name=WordCount
tmp=hadoop-2.6.0/share/hadoop //本机hadoop的安装路径
for((a=1;a<num;a++))
do
  rm "$name".java 
  cp "$a".java "$name".java
  javac -classpath "$tmp"/common/hadoop-common-2.6.0.jar:"$tmp"/common/lib/commons-cli-1.2.jar:"$tmp"/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar:./WordCountJar "$name".java
  jar -cvf "$a".jar ./"$name".class 
done

注意:如果某个Job中含有多个java文件,则需要在编译器中首先编译成class文件,然后将class文件放入主类所在目录下(即WordCountJar)。然后将class文件添加到jar语句的后面即可。jar -cvf "$a".jar ./"$name".class ./WordCountMap.class ./WordCountReduce.class

(4)并行运行多个Hadoop Jar 文件
只需在命令后面添加&转到后台运行即可

bin/hadoop jar ../jar/TopNJar/1.jar TopN /input/topn/[1-9] /output/topn/1 & 
bin/hadoop jar ../jar/TopNJar/2.jar TopN /input/topn/[1-9] /output/topn/2 & 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值