当前位置:首页 > 行业动态 > 正文

如何通过设置任务优先级来优化mapreduce yarn包中提交的MapReduce作业效率?

在YARN(Yet Another Resource Negotiator)环境中提交MapReduce任务时,可以通过设置任务的优先级来影响其在资源分配和调度过程中的优先级,以下是如何在提交MapReduce任务时设置任务优先级的详细步骤:

如何通过设置任务优先级来优化mapreduce yarn包中提交的MapReduce作业效率?  第1张

步骤 1: 创建并配置MapReduce作业配置文件

需要创建或修改MapReduce作业的配置文件(通常是mapredsite.xml),以设置优先级相关的参数。

<property>
  <name>yarn.app.mapreduce.am.staging目录</name>
  <value>/app/staging</value>
</property>
<property>
  <name>yarn.app.mapreduce.am.resource manager.maxappattempts</name>
  <value>10</value>
</property>
<property>
  <name>yarn.app.mapreduce.am.resource manager.maxappfailures</name>
  <value>5</value>
</property>

步骤 2: 设置任务优先级

在YARN中,可以通过设置yarn.scheduler.minimumallocationmbyarn.scheduler.maximumallocationmb来控制任务的最小和最大内存分配,这些参数可以用来间接设置任务的优先级。

<property>
  <name>yarn.scheduler.minimumallocationmb</name>
  <value>1024</value>
</property>
<property>
  <name>yarn.scheduler.maximumallocationmb</name>
  <value>4096</value>
</property>

步骤 3: 使用作业提交命令设置优先级

在提交作业时,可以使用priority参数来直接设置作业的优先级,YARN中的优先级范围是从0(最低)到7(最高)。

hadoop jar yourjob.jar priority HIGH

示例代码

以下是一个示例代码,展示如何在Java中设置MapReduce作业的优先级:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class YourJob {
  public static class TokenizerMapper
       extends Mapper<Object, Text, Text, IntWritable>{
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();
    public void map(Object key, Text value, Context context) 
        throws IOException, InterruptedException {
      // 处理输入数据
    }
    public void reduce(Text key, Iterable<IntWritable> values, 
                       Context context) throws IOException, InterruptedException {
      // 处理输出结果
    }
  }
  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "your job name");
    job.setJarByClass(YourJob.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(YourJob.class);
    job.setReducerClass(YourJob.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    // 设置作业优先级
    job.setPriority(Job.Priority.HIGH);
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

在这个示例中,通过job.setPriority(Job.Priority.HIGH);设置了作业的优先级为高。

通过以上步骤,你可以在提交MapReduce任务时设置任务的优先级,从而影响其在YARN资源分配和调度过程中的行为。

0