這是我想要做的。現在我有一些文本文件是這樣的:Hadoop:我如何爲每個值賦予一個全球唯一的ID號碼作爲Mapper中的關鍵字?
<page>
<url>xxx.example.com</url>
<title>xxx</title>
<content>abcdef</content>
</page>
<page>
<url>yyy.example.com</url>
<title>yyy</title>
<content>abcdef</content>
</page>
...
我想讀的映射文件分割,並將其轉換爲鍵值對,其中每個值是一個<page
>標籤的內容。
我的問題是關於關鍵。我可以使用網址作爲鍵,因爲它們是全球唯一的。但是,由於我的工作環境,我想要生成一個全球唯一編號作爲每個鍵值對的關鍵字。我知道這與Hadoop的水平可伸縮性有某些關係。但是有沒有解決辦法?
@ThomasJungblut每個任務的塊ID應該是更好的選擇,因爲作業可以容忍散列中的少數衝突。在爲每個映射器任務分配ID塊之後應該做什麼? – Denzel
我會先將task_id和計算的ID偏移量放到配置中,以便每個任務都可以獲取它的起始ID,然後開始遞增。您需要事先知道映射器的數量,以及大塊中有多少條記錄,這不是不可能解決的,但卻很笨拙。 –
@ThomasJungblut是的。解決這個問題很笨拙。如果我使用諸如時間(毫秒)之類的東西來保持密鑰的唯一性,該怎麼辦?與網址哈希相比,它可以減少衝突嗎? – Denzel