当前位置: 首页 > 面试题库 >

hadoop-映射减少任务和静态变量

勾俊
2023-03-14
问题内容

我刚刚开始使用hadoop / hbase MapReduce工作(使用cloudera),但我有以下问题:

假设我们有一个带有主要和静态viariable的java类。该类定义与Mapper和Reducer任务相对应的内部类。在启动作业之前,主程序初始化静态变量。在Mapper类中读取此变量。然后使用群集上的“
hadoop jar”启动该类。

我的问题:我看不到其他节点上的Map和Reduce任务如何看到该静态变量。是否有任何允许节点共享jvm或静态变量的“
hadoop魔术”?这怎么工作?我必须在一个类上这样做,而我无法弄清楚在非单节点群集中怎么做。谢谢


问题答案:

在分布式Hadoop集群中,每个Map /
Reduce任务都在其自己的单独JVM中运行。因此,无法在运行在不同JVM(甚至不同节点)上的不同类实例之间共享静态变量。

但是,如果要在任务之间共享一些不可变的数据,则可以使用Configuration类:

// driver code
Configuration config = Configuration.create();
config.setLong("foo.bar.somelong",1337);
...

// mapper code
public class SomeMapper ... {
    private long someLong = 0;
    public void setup(Context context) {
        Configuration config = context.getConfiguration();
        someLong = config.getLong("foo.bar.somelong");
    }
}


 类似资料:
  • 我刚开始处理一些Hadoop/HBase MapReduce作业(使用cloudera),我有以下问题: 我的问题是:我不明白其他节点上的Map和Reduce任务是如何看到那个静态变量的。是否存在允许节点共享jvm或静态变量的“Hadoop魔术”?这怎么能起作用呢?我必须在一个类上做这件事,我不知道在一个非单节点集群中这是怎么行的。谢谢你

  • 我在一个大约50个节点的集群上运行2.2.0上的hadoop,我的工作是64个map任务和20个reduce任务。map在大约30分钟内完成,然后所有reduce任务都在运行,但是我发现一个奇怪的日志是这样的:

  • 我是hadoop的新手,我阅读了许多hadoop mapreduce和hdfs的页面,但仍然无法明确一个概念。 也许这个问题是愚蠢的或不寻常的,如果真是如此的话。我的问题是,假设我在hadoop中为一个大小为1GB的文件创建了一个单词计数程序,其中map函数将把每一行作为输入,输出作为键值对,reduce函数将输入作为键值,并简单地迭代列表,计算单词进入该文件的总次数。 现在我的问题是,因为这个文

  • 我在1.1GB文件上运行Hadoop MapReduce多次,使用不同数量的映射器和化简器(例如,1个映射器和1个化简器,1个映射器和2个化简器,1个映射器和4个化简器,...) Hadoop安装在具有超线程的四核机器上。 以下是按最短执行时间排序的前 5 个结果: 1 - 8 个化简器和 1 - 8 个映射器的结果:列 = 映射器行数 = 化简器数 (1)当我有8个映射器时,程序运行速度似乎稍快

  • 问题内容: 我的问题对于HADOOP用户而言似乎很愚蠢。但是我对在地图减少问题中使用泛型感到困惑,例如“ WORD COUNT”。 我知道,泛型被基本用于类型转换和类型安全。但是我不能在这里将这个概念联系起来。 在字数问题上, 请任何人在这里让我明白泛型的使用 。如果我在问这个问题时犯了任何错误,请纠正我。 现在,我了解将泛型用于键值对(KEY IN,VALUE IN,KEY OUT,VALUE

  • 我在单个节点上使用hadoop 1.0.1,并尝试使用python 2.7流式传输制表符分隔的文件。我可以让Michael Noll的字数计数脚本使用hadoop/python运行,但无法让这个极其简单的映射器和减速器工作,只是复制文件。这是映射器: 这是减速器: 以下是输入文件的一部分: mapper和reducer在linux中运行良好: 但在我修改映射器和reducer之后,将输入文件移动到