2013-03-14 107 views
2

在Hadoop Reducer中,我希望在特定條件下創建併發布新密鑰,並且我希望確保這些密鑰是唯一的。如何在Hadoop Reducer中創建新的唯一密鑰

因爲我想要的僞代碼是這樣:

@Override 
protected void reduce(WritableComparable key, Iterable<Writable> values, Context context) 
         throws IOException, InterruptedException { 
    // do stuff: 
    // ... 
    // write original key: 
    context.write(key, data); 
    // write extra key: 
    if (someConditionIsMet) { 
     WritableComparable extraKey = createNewKey() 
     context.write(extraKey, moreData); 
    } 
} 

所以我現在有兩個問題:

  1. 是否有可能在所有發出超過一個不同的密鑰在減少( )?我知道鑰匙不會被使用,但這對我來說是好的。
  2. 額外的關鍵在所有減速器中必須是唯一的 - 這既是出於應用原因,也是因爲我認爲它會違反縮減階段的合同。 什麼是生成跨減速器(可能跨作業?)唯一的密鑰的好方法?

    可能獲取縮減器/作業ID並將其併入密鑰生成?

回答

2
  1. 是的,你可以輸出任意數字鍵
  2. 您可以將任務嘗試的信息到你的鑰匙,使其工作唯一的(跨減速,甚至處理推測執行,如果你想)。您可以從減速機的Context.getTaskAttemptID()方法中獲取該信息,然後用TaskAttemptID.getTaskID().getId()
拉出減速機ID號