如何在两个 MapReduce 作业之间传递变量

2024-01-04

我已经链接了两个 Map reduce 作业。 Job1 将只有一个减速器,我正在计算一个浮点值。我想在 Job2 的减速器中使用这个值。这是我的主要方法设置。

public static String GlobalVriable;
public static void main(String[] args) throws Exception {

        int runs = 0;
        for (; runs < 10; runs++) {
            String inputPath = "part-r-000" + nf.format(runs);
            String outputPath = "part-r-000" + nf.format(runs + 1);
            MyProgram.MR1(inputPath);
            MyProgram.MR2(inputPath, outputPath);
        }
    }

    public static void MR1(String inputPath)
            throws IOException, InterruptedException, ClassNotFoundException {

        Configuration conf = new Configuration();
        conf.set("var1","");
        Job job = new Job(conf, "This is job1");
        job.setJarByClass(MyProgram.class);
        job.setMapperClass(MyMapper1.class);
        job.setReducerClass(MyReduce1.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(FloatWritable.class);
        FileInputFormat.addInputPath(job, new Path(inputPath));
        job.waitForCompletion(true);
        GlobalVriable = conf.get("var1"); // I am getting NULL here
    }

    public static void MR2(String inputPath, String outputPath)
            throws IOException, InterruptedException, ClassNotFoundException {

        Configuration conf = new Configuration();
        Job job = new Job(conf, "This is job2");
        ...
    }

    public static class MyReduce1 extends
        Reducer<Text, FloatWritable, Text, FloatWritable> {

    public void reduce(Text key, Iterable<FloatWritable> values, Context context)
            throws IOException, InterruptedException {

        float s = 0;
        for (FloatWritable val : values) {
            s += val.get();
        }

        String sum = Float.toString(s);
        context.getConfiguration().set("var1", sum);
    }
}

正如您所看到的,我需要多次迭代整个程序。我的 Job1 正在根据输入计算单个数字。因为它只是一个数字和很多迭代,所以我不想将其写入 HDFS 并从中读取。有没有办法共享 Myreducer1 中计算的值并在 Myreducer2 中使用它。

更新:我尝试使用conf.set 和conf.get 传递值。该值没有被传递。


以下是如何通过计数器传回浮点值......

首先,在第一个化简器中,通过乘以 1000(例如,为了保持 3 位精度)将 float 值转换为 long,并将结果放入计数器中:

public void cleanup(Context context) {

    long result = (long) (floatValue * 1000);
    context.getCounter("Result","Result").increment(result); 

}

在驱动程序类中,检索长整型值并将其转换回浮点数:

public static void MR1(String inputPath)
        throws IOException, InterruptedException, ClassNotFoundException {

    Configuration conf = new Configuration();
    Job job = new Job(conf, "This is job1");
    job.setJarByClass(MyProgram.class);
    job.setMapperClass(MyMapper1.class);
    job.setReducerClass(MyReduce1.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(FloatWritable.class);
    FileInputFormat.addInputPath(job, new Path(inputPath));
    job.waitForCompletion(true);

    long result = job.getCounters().findCounter("Result","Result").getValue();
    float value = ((float)result) / 1000;

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在两个 MapReduce 作业之间传递变量 的相关文章

随机推荐

  • HTTPError:HTTP 错误 503:服务不可用 goslate 语言检测请求:Python

    我刚刚开始使用 Python 中的 goslate 库来检测文本中单词的语言 但在测试 7 8 个输入后 我给出的输入包含用两种语言 阿拉伯语和英语 编写的单词 之后 它开始给我错误 Traceback most recent call l
  • 在 Facebook 墙和 Facebook 好友墙上发布图片

    我对 API 的问题感到非常厌倦 比如 Facebook Graph API 天气 API 等 我在我的项目中使用了这两个 API 用于 Facebook 的 Graph API 和用于天气的 Google 天气 API 但现在项目完成时
  • 我可以将 PowerShell“Start-Job”设置为低优先级吗?

    我想降低我开始的工作的优先级开始工作 https learn microsoft com en us powershell module microsoft powershell core start job view powershell
  • Java:使用 Collat​​orKey 对集合进行排序

    我想要实现的是按字符串值对对象集合进行排序 但是 以依赖于语言环境的方式使用整理器 由于性能原因 我不想使用 Collat orcompare 方法 如下代码所示 而是使用 Collat ionKey 类 因为 java API 声明使用
  • 子视图显示在父 UIView 的边界之外

    我有一个包含另一个子视图的 UIView 子视图的框架位于超级视图的边界之外 但是当我运行应用程序时 整个子视图是可见的 例子 Super view Subview
  • Android O 中的通知徽章

    我正在使用 Android Oreo SDK 使用 Google Nexus 5x 进行测试 我无法在主屏幕的应用程序图标中找到通知徽章 即使我收到来自应用程序的通知 并且应用程序快捷方式未显示数字 以下是代码片段 final Notifi
  • 根据路径方向更改 Google 地图标记方向

    我想知道是否可以根据地图上绘制的路径更改标记方向 这是一个例子 正如您所看到的 标记是一辆汽车 带有前保险杠和尾灯 我想将汽车定向到路径行驶的方向 在本例中将汽车定向为向右约 45 度 我在用着DirectionsService绘制路径 我
  • 如果是index.php,则显示“this”,如果不是,则显示“this”

    迫切希望有人可以提供帮助 我是php新手 我尝试通过教程自学 但我到处搜索都无济于事 基本上我正在寻找实现一个 如果index php页面 显示foo 如果不在index php页面上 则显示bar 有任何想法吗 我希望我能很好地解释这一点
  • 错误:Apache 意外关闭错误消息

    我刚刚使用此指南将 XAMPP 的 PHP 版本从 PHP 7 1 7 升级到 PHP 7 2 0article https www techflirt com how to upgrade php in xampp 然后我尝试重新启动 X
  • 控制器可以进行数据库查询(MySQL)吗?如果是,什么时候?

    我正在阅读大量有关 MVC 的教程 所以我的问题是 一个完美的 PHP MVC 框架可以在控制器中进行数据库查询吗 据我了解 最舒服的方法是将所有数据库查询放在模型中 对吧 如果我有 POST 或 smth 我只需将该 POST 传递给 M
  • npm 开始在 node.js 中给出错误

    我对 Node js 和 mongodb 完全陌生 我正在使用以下链接 http cwbuecheler com web tutorials 2013 node express mongo http cwbuecheler com web
  • Cython:内存视图的大小属性

    我在 Cython 中使用了很多 3D 内存视图 例如 cython declare a double 1 a np empty 10 20 30 dtype double 我经常想循环遍历所有元素a 我可以使用像这样的三重循环来做到这一点
  • Javascript IE 错误:“目标”为 null 或不是对象

    document onkeydown function event var tagName event target tagName if tagName INPUT tagName TEXTAREA event alt event con
  • 带有改造的自动完成文本视图

    我正在使用一个实现AutoCompleteTextView其中建议是从 webapi 获取并根据用户输入显示的 我正在使用改造客户端进行网络连接 我有两个疑问 1 我不希望为每个键入的字符发送请求 仅当用户按住 5 秒时才发送请求 我怎样才
  • 后台并发复制GC释放 - Flutter

    在我的 Flutter 日志中 我不断收到以下消息 只是有一些不同的数字 Background concurrent copying GC freed 153040 3MB AllocSpace objects 12 4MB LOS obj
  • 从缓存加载网页视图

    我需要当可以访问互联网时从互联网加载 mWebview 当它不可用时 它需要从缓存加载它 我有一些东西 但它根本不加载网站 请帮我 权限 ive 已添加 android permission INTERNET android permiss
  • 为 url 编码西里尔字母的最快方法

    如果您将以下链接复制到浏览器中 http be wikipedia org wiki 它将显示 Wiki 文章 但是 一旦您想要将该链接 或任何其他包含西里尔字母符号的链接 从浏览器 URL 复制到记事本中 您将得到如下内容 http be
  • 詹金斯管道:无法将构建参数传递给共享库变量

    基本上我无法将构建属性传递给 Library var 调用而不需要额外的废话 jenkinsfile 相关块 tc test repo test1 folder test2 submodules true refs params GitCh
  • Ruby before_validation 触发无限循环回调

    产品模型有一个属性 1 如果 attribute 1 需要重新计算 则 before validation 将调用 它给予SystemStackError stack level too deep因为self save 触发before v
  • 如何在两个 MapReduce 作业之间传递变量

    我已经链接了两个 Map reduce 作业 Job1 将只有一个减速器 我正在计算一个浮点值 我想在 Job2 的减速器中使用这个值 这是我的主要方法设置 public static String GlobalVriable public