当前位置: 首页 > 知识库问答 >
问题:

Hadoop-Map减少任务和静态变量

贺博厚
2023-03-14

我刚开始处理一些Hadoop/HBase MapReduce作业(使用cloudera),我有以下问题:

我的问题是:我不明白其他节点上的Map和Reduce任务是如何看到那个静态变量的。是否存在允许节点共享jvm或静态变量的“Hadoop魔术”?这怎么能起作用呢?我必须在一个类上做这件事,我不知道在一个非单节点集群中这是怎么行的。谢谢你

共有1个答案

朱翔
2023-03-14

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

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

// 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),但我有以下问题: 假设我们有一个带有主要和静态viariable的java类。该类定义与Mapper和Reducer任务相对应的内部类。在启动作业之前,主程序初始化静态变量。在Mapper类中读取此变量。然后使用群集上的“ hadoop jar”启动该类。 我的问题:我看不到其他节点上的Map和

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

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

  • 问题内容: 我已经定义了一个对象并声明了一个静态变量。在该方法中,当我尝试打印实例和类变量时,两者都打印相同的值。 不是实例变量吗?它应该打印0而不是50吗? 问题答案: 不,只有一个变量-您尚未声明任何实例变量。 不幸的是,Java允许您访问静态成员,就像通过相关类型的引用访问静态成员一样。这是IMO的设计缺陷,某些IDE(例如Eclipse)允许您将其标记为警告或错误- 但这是语言的一部分。您

  • 静态变量 PHP中局部变量分配在zend_execute_data结构上,每次执行zend_op_array都会生成一个新的zend_execute_data,局部变量在执行之初分配,然后在执行结束时释放,这是局部变量的生命周期,而局部变量中有一种特殊的类型:静态变量,它们不会在函数执行完后释放,当程序执行离开函数域时静态变量的值被保留下来,下次执行时仍然可以使用之前的值。 PHP中的静态变量通过

  • 本文向大家介绍PHP静态成员变量和非静态成员变量详解,包括了PHP静态成员变量和非静态成员变量详解的使用技巧和注意事项,需要的朋友参考一下 数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于