问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Hadoop任务分配,怎么确保每个机器1个MAP,不重复?

发布网友 发布时间:2022-05-06 06:08

我来回答

3个回答

懂视网 时间:2022-05-06 10:29

代码里面按行读取:

 @Override
 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  FileSystem fs = FileSystem.get(context.getConfiguration());
  for (FileStatus status : fs.listStatus(new Path(value.toString()))) {
  // process file
  }
 }

都不能满足需求,还是自己实现一个 OneMapOneDirectoryInputFormat 吧,也很简单:

import java.io.IOException;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.CombineFileSplit;
/**
 * 一个map处理一个目录的数据
 */
public abstract class OneMapOneDirectoryInputFormat extends CombineFileInputFormat {
 private static final Log LOG = LogFactory.getLog(OneMapOneDirectoryInputFormat.class);
 @Override
 protected boolean isSplitable(JobContext context, Path file) {
 return false;
 }
 @Override
 public List getSplits(JobContext job) throws IOException {
 // get all the files in input path
 List stats = listStatus(job);
 List splits = new ArrayList();
 if (stats.size() == 0) {
  return splits;
 }
 LOG.info("fileNums=" + stats.size());
 Map> map = new HashMap>();
 for (FileStatus stat : stats) {
  String directory = stat.getPath().getParent().toString();
  if (map.containsKey(directory)) {
  map.get(directory).add(stat);
  } else {
  List fileList = new ArrayList();
  fileList.add(stat);
  map.put(directory, fileList);
  }
 }
 // 设置inputSplit
 long currentLen = 0;
 List pathLst = new ArrayList();
 List offsetLst = new ArrayList();
 List lengthLst = new ArrayList();
 Iterator itr = map.keySet().iterator();
 while (itr.hasNext()) {
  String dir = itr.next();
  List fileList = map.get(dir);
  for (int i = 0; i < fileList.size(); i++) {
  FileStatus stat = fileList.get(i);
  pathLst.add(stat.getPath());
  offsetLst.add(0L);
  lengthLst.add(stat.getLen());
  currentLen += stat.getLen();
  }
  Path[] pathArray = new Path[pathLst.size()];
  CombineFileSplit thissplit = new CombineFileSplit(pathLst.toArray(pathArray),
   getLongArray(offsetLst), getLongArray(lengthLst), new String[0]);
  LOG.info("combineFileSplit(" + splits.size() + ") fileNum(" + pathLst.size()
   + ") length(" + currentLen + ")");
  for (int i = 0; i < pathArray.length; i++) {
  LOG.info(" -> path[" + i + "]=" + pathArray[i].toString());
  }
  splits.add(thissplit);
  pathLst.clear();
  offsetLst.clear();
  lengthLst.clear();
  currentLen = 0;
 }
 return splits;
 }
 private long[] getLongArray(List lst) {
 long[] rst = new long[lst.size()];
 for (int i = 0; i < lst.size(); i++) {
  rst[i] = lst.get(i);
 }
 return rst;
 }
}

这个InputFormat的具体使用方法就不说了。其实与“一个Hadoop程序的优化过程 – 根据文件实际大小实现CombineFileInputFormat”中的MultiFileInputFormat比较类似。

热心网友 时间:2022-05-06 07:37

如果是固定5台机器,每个作业固定5个map任务,那把参数maprece.tasktracker.map.tasks.maximum设成1应该就能保证每个机器刚好一个了。同时把推测性执行关了:mapred.map.tasks.speculative.execution设为false追问mapred.map.tasks.speculative.executio 已经关闭。
maprece.tasktracker.map.tasks.maximum 是可以在jobs里面设置的变量么?
不行啊
Rack-local map tasks=26
Data-local map tasks=13
可以看到Rack-local map tasks的值不是0.

追答我的假设是“固定5台机器,每个作业固定5个map任务”,能再说一下你的配置么?
maprece.tasktracker.map.tasks.maximum要在配置文件里设置,启动Hadoop以后再在job里设置没有用。

热心网友 时间:2022-05-06 08:55

。。。。。。。
你把5台机器的数据上传到机器上,执行mapreudce。

顺便问一下,你是单独执行map? 很诡异啊追问数据量很大,并且这些数据还提供给以前的程序使用。不能转移的。
是很诡异,基本只有MAP在跑。没有reudce什么事情。
并且MAP还和机器有关系。
A的MAP只能在A机器上跑。
现在HADOOP,它让A的MAP跑到了B上。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何批量导出全部微信好友微信号?快速导出微信联系人 交强险什么价格 命运冠位指定必练五星英灵是什么 命运冠位指定必练五星英灵推荐 自制豆沙馅能保存多久 红豆沙馅怎么保存 我高三,从现在到高考分数从350提到500多,有可能吗?我是文科生 高三350分还有5个月能提多少分 文科复读350多分可以提高多少 钱钟书-谈艺录-读本目录 送茶叶都有什么讲究呢? 中国文化送礼茶叶有什么讲究茶叶送礼有什么讲究和注意事项 我想在小县城开家茶餐厅 主要针对年轻人和学生 开个茶餐厅,请问需要准备哪些设备? 茶餐厅的利润一般控制在多少 一般开一个茶餐厅需要什么费用,费用高吗?加盟好还是自己开好呢? 开一家小规模的茶餐厅需要什么?具体哪些证件? 开家茶餐厅需要多少钱?需要注意什么? 谁有为职场加分的超强ppt设计素材 开一间100平方左右的茶餐厅需要投资多少钱? 想开家茶餐厅,茶餐厅投资怎样 开个茶餐厅得多少钱?? 在三线城市开家类似茶餐厅的店怎么样 在惠州开家茶餐厅需要多少钱? 我想开个茶餐厅得多少钱 白居易的《新栽梅》 柳宗元的《早梅》 张道洽《瓶梅》的赏析 开一家80平方的茶餐厅要多少钱 想开一间小型茶餐厅10万左右 求助详细资料 谢谢!! 在一个普通的小县城开个茶餐厅能赚钱吗?麻烦大家给分析的具体点。预期投资在10万左右。 全民k歌招募歌神签约是什么 跑步机的电控保险在哪里? 怎样训练哈士奇 怎么办理助学贷款啊? 企业期末所有者权益总额等于什么 会计中权益总额是什么 权益总额怎么算 权益总额包括什么 企业期末所有者权益总额等于什么? 权益总额是什么?如果资产增加,负债也增加,权益总额会增加吗? 权益总额是等于负债加所有者权益吗 权益总额怎么算出来? 什么是权益总额,权益总额都包括哪些??? 资产总额=权益总额=债权人权益+所有者权益 hadoop map任务怎么一次读取一整块数据而非一次读取一行数据 微信好友的照片怎么下载到自已手机上 .test 格式是什么样的文件 java 如何使用@test 刚打完苹果肌可以低头拖地吗 打完苹果肌可以戴眼镜吗 打完苹果肌可以吃减肥药吗 哈士奇怎么训练? 成年哈士奇怎么训练