首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Hadoop中,我如何在运行时发现一个任务是一个缩减程序还是一个合并器?

在Hadoop中,我如何在运行时发现一个任务是一个缩减程序还是一个合并器?
EN

Stack Overflow用户
提问于 2012-08-13 04:47:14
回答 3查看 1.6K关注 0票数 4

如果使用MapReduce执行的操作不是交换式和结合式的,则合并器不能与减法器相同。

例如,在计算平均值时,组合器对键的值求和,减法器对其求和,然后将和除以该键的值的总数。合并器的代码只有很小的修改。如果您可以对组合器和reducer使用相同的类,并且可以轻松地确定当前任务是组合器还是reducer,会发生什么呢?如果它发现它是一个减法器,那么它就将和除以计数。

如下所示:

代码语言:javascript
运行
AI代码解释
复制
protected void reduce(Text keyIn, Iterable<PairWritable> valuesIn,
      Context context)
  throws IOException, InterruptedException {
    double sum = 0.0d;
    long count = 0l;

    for (PairWritable valueIn : valuesIn) {
      sum += valueIn.getSum();
      count += valueIn.getCount();
    }

    if (THIS_IS_A_REDUCER) {
      sum /= count;
    }

    context.write(keyIn, new PairWritable(sum, count));
  }

有可能做到这一点吗?上面的代码THIS_IS_A_REDUCER可以被替换成其他东西吗?

我可以根据任务尝试ID字符串确定任务是映射器还是减法器,但组合器和减法器似乎都有类似的字符串模式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-13 13:25:38

我想您可以询问Context对象并获得任务ID,然后,一旦您有了ID,映射器(包括组合器)的名称中将有一个"m“,而reducer的名称中将有一个"r”。

要获取任务尝试ID,请使用.getTaskAttemptID()。我认为你应该能够使用context.getTaskAttemptID()来使用它,但是我不能测试它来确定。

票数 2
EN

Stack Overflow用户

发布于 2012-10-23 23:21:32

这是一个有缺陷的问题。无论何时您发现需要区分任务调用了哪个reduce()。添加一个组合器。例如,您可以这样写

代码语言:javascript
运行
AI代码解释
复制
public static class Combine extends MapReduceBase implements Reducer<Text, Text, Text, Text> {
public void reduce(Text key, Iterator<Text> message, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {}

public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, Text> {
public void reduce(Text key, Iterator<Text> message, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {}

在main()中,您可以这样写

代码语言:javascript
运行
AI代码解释
复制
conf.setReducerClass(Reduce.class);
conf.setCombinerClass(Combine.class);
票数 3
EN

Stack Overflow用户

发布于 2013-04-10 21:03:53

虽然我知道这个问题已经解决了,但我有另一个解决方案。我所做的就是让我的Combiner成为Reducer的子类。然后,在Reducer代码中,我可以测试我是否是Combiner子类。

这样做的主要好处是我需要在Reducer步骤中修改我的键,但不想在合并步骤中更改它(否则我会应用相同的转换两次)。除此之外,95%的代码是相同的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11928316

复制
相关文章
搞定侧边栏TAB选项卡
竖着排列确实会在网速卡的时候,随机日志,最新日志,热评日志会连在一起显示30篇文章,太不美观了。
空空裤兜
2023/03/03
1.2K0
微信小程序----导航栏选项卡(MUI顶部选项卡)
效果图 WXML <import src="../../template/list.wxml"/> <view class="tui-tabbar-content"> <view class="
Rattenking
2021/02/01
1.7K0
微信小程序----导航栏选项卡(MUI顶部选项卡)
Android应用底部导航栏(选项卡)实例
现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能。 我们先看下该demo实例的框架图: 其
欢醉
2018/01/22
1.5K0
Android应用底部导航栏(选项卡)实例
iOS小技巧·把子视图控制器的视图添加到父视图控制器
把子视图控制器的视图添加到父视图控制器并覆盖 添加子控制器 #pragma mark - 添加子控制器 - (void)addSubControllers{ [self addChildViewController:_childViewController]; [self.view addSubview:_childViewController.view]; [_childViewController.view mas_makeConstraints:^(MASConstraintMaker
陈满iOS
2018/09/10
1K0
如何将WebRTC播放协议添加到EasyCVR?
自2020年浏览器的发展和兼容性发生了变化,WebRTC的延时性、安全性得到了提升和保护,尤其是疫情爆发后,实时视频的需求比之前增长了30倍,这更刺激了WebRTC产品的持续快速发展。因此我们也在EasyGBS、EasyDSS等平台内实现了WebRTC协议的播放。
TSINGSEE青犀视频
2021/11/23
1.6K0
使用SWRevealViewController实现侧滑菜单
结果如图,这里要注意一个问题,就是指向第一个显示ViewController的箭头 指向了SWRevealViewController; 因为我在实际开发中发现不指向这个ViewController 侧滑菜单不出现,不知道是什么原因 
xiangzhihong
2022/11/30
1.1K0
iOS结合导航控制器和标签栏控制器
– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
全栈程序员站长
2022/07/06
6190
在 CentOS 上如何将用户添加到 Sudoers
sudo是一个命令行工具,它被设计为允许用户以其他用户(默认是 root 用户)身份去运行命令。
雪梦科技
2020/05/11
11.7K0
在 CentOS 上如何将用户添加到 Sudoers
在 Debian 中如何将用户添加到 Sudoers
sudo是一个命令行工具,它允许被信任用户以另外一个用户身份运行命令,默认是 root 用户。
雪梦科技
2020/05/11
12.8K0
在 Debian 中如何将用户添加到 Sudoers
在 Ubuntu 中如何将用户添加到 Sudoers
sudo是一个命令行程序,它允许被信任的用户以 root 或者其他用户身份去运行命令。
雪梦科技
2020/05/09
35.2K0
在 Ubuntu 中如何将用户添加到 Sudoers
如何把Sublime Text添加到右键菜单栏
对windows系统来说,由于系统机制的问题,很多问题通过修改注册变文件就可以解决,这个问题也不例外;
萌海无涯
2019/11/11
2.2K0
如何把Sublime Text添加到右键菜单栏
zabbix 5.0如何将esxi6.7添加到监控
今天有个需求,需要将一台esxi 6.7 server添加到我们的zabbix监控服务器上,将我做的操作踩的一点坑写出来
姚华
2022/06/29
1.9K0
zabbix 5.0如何将esxi6.7添加到监控
如何将来自 Chrome 网络选项卡的请求复制到 Postman?
你有没有想过是否有一种快速的方法将端点调用从你的DevTools 网络选项卡复制到Postman中?
点火三周
2022/04/22
3.7K0
iOS开发UI篇--一个侧滑菜单SlidingMenu
侧滑菜单已经成为app一个极常用的设计,不管是事务类,效率类还是生活类app。侧滑菜单因Path 2.0和Facebook为开发者熟知,国内目前也有很多流行app用到了侧滑菜单,比如QQ、网易邮箱、知乎等等。 IOS官方并没有提供类似于侧滑栏之类的组件,所以我们需要自己写一个侧滑栏控件,为了不要重复造轮子,我在github上找到了一个使用简单方便,新手容易入手的侧滑菜单控件,Demo下载地址:这是一个我的iOS交流群:624212887,群文件自行下载,不管你是小白还是大牛热烈欢迎进群 ,分享面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。
楚阳
2018/12/13
1.3K0
如何将用户添加到Linux桌面【Linux-Command line】
我在 useradd command 上发布的文章阐述了对Linux系统用户管理的深层理解。Useradd 是一个命令行工具,但你也可以在Linux上通过图形方式管理用户。这就是本文主旨。
QRosie
2019/11/12
4.9K0
如何将用户添加到Linux桌面【Linux-Command line】
如何将Alexa添加到Raspberry Pi(或任何Linux设备)
我们的Amazon Alexa虚拟设备项目旨在提供将Alexa添加到任何Linux设备(包括Raspberry Pi板等嵌入式系统)的功能。
用户4122690
2020/03/14
1.6K0
如何将Alexa添加到Raspberry Pi(或任何Linux设备)
Cocoa编程中视图控制器与视图类详解
iPhone编程规则是:一个窗口,多个视图。UIView是iPhone屏幕上很多控件的基础类。每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊的UIView)内的众多UIView及其专门化子类构建的。 显示数据的视图: UITextView UILabel UIImageView UIWebView MKMapViews UIScrollView 可选择的视图(以下两个视图类实例都是模态显示的): UIAlertView UIActionSheet  所有控件(控件是将用户触摸转换为回
猿人谷
2018/01/17
5.3K0
Cocoa编程中视图控制器与视图类详解
AI应用:SAP和MapR如何将AI添加到他们的平台
SAP正在将AI嵌入到应用程序中;MapR同样将AI嵌入到其数据平台上。在这两种情况下,AI变得更加普遍,同时也更方便。 有时候,当我们写关于分析、机器学习和AI的时候,提出具体的用例是很有挑战性的。
AiTechYun
2018/03/02
1.9K0
AI应用:SAP和MapR如何将AI添加到他们的平台
Nexus高级配置之如何将本地jar添加到Nexus中
Java后端技术所推送文章,为本人原创、网上收集或其他作者投稿,对于网上收集部分除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,我们会在24小时内删除处理,谢谢!^_^ QQ:1573876303。
Java后端技术
2018/08/09
2.9K0
Nexus高级配置之如何将本地jar添加到Nexus中
点击加载更多

相似问题

SWRevealViewController为frontView隐藏navigationBar

21

frontView在SWRevealViewController中的修改框架

12

SWRevealViewController隐藏选项卡栏控制器

10

SWRevealViewController使侧边栏按钮成为静态按钮&使rearView显示在frontView的顶部

10

当用户在SWRevealViewController中时,frontView停止点击手势

35
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档