所以,我是Hadoop的新手,我对hadoop如何处理Reducer或Mapper类的实现属性有个疑问。在Hadoop中映射和减少class属性
从我的理解,reducer的每个实例将在不同的JVM中执行,然后,它们之间没有共享内存。问题是,如果所有reducer都试图访问它,Hadoop如何处理对reducer函数外部定义的属性的并发访问。更多的是,如果我尝试在reducer中实例化一个变量会发生什么。根据我对并行编程的理解,如果这种操作不是在关键区域或原子变量上进行的,则会存在竞争条件。
简单例子:如果有使用相同的文字作为值不同的减速
public class SequenceBuilderRed extends Reducer<Text, Text, Text, IntWritable>
{
private HashMap<String,myClass> myHashMap;
protected void setup(Reducer<Text,Text,Text,IntWritable>.Context context) throws IOException, Interrupted Exception
{
myHashMap=new HashMap<String,myClass>();
}
protected void reduce(Text key Iterable<Text> values, Reducer <Text,Text,Text,IntWritable>.Context context) throws IOException, InterruptedException
{
for(Text value:values)
{
if(!myHashMap.containsKey(value.toString())
{
myClass newObject = new myClass();
myHashMap.put(value.toString(),newObject);
}
}
}
}
会发生在这种情况下怎么办?
谢谢!
那么,如果我尝试从清理和设置阶段访问属性会发生什么?这些阶段对于整个地图来说都不是独一无二的,还是减少了? – 2014-12-05 07:21:52
每个Mapper/Reducer JVM调用调用一次'setup()'和'cleanup()'方法。 MapReduce框架保证它在初始化map()''reduce()'方法调用在打开数据库连接,构建集合,打开文件有用之前调用'setup()'方法;同样''cleanup()'保证在所有关键字被调用后,由Mapper/Reducer处理值用于关闭连接。 – Ashrith 2014-12-05 07:39:36
那么如果我尝试在清理中打印它,那么在reducer中修改的属性会发生什么情况? – 2014-12-05 07:45:19