![](/img/trans.png)
[英]Hadoop Wordcount Example with multiple files and kill mappers in it
[英]Hadoop mappers: lines vs files
我正在學習Hadoop / mapreduce,並且對拆分映射器的各種可能性有疑問。
在標准的“單詞計數”方案中,每個不同的過程都在唯一的一行上工作,並執行一些基本的數學運算(加法)。 但是,是否有可能使每個進程都在一個唯一的文件上工作? 例如,如果我有500,000個唯一文件,每個文件約為500萬,我可以告訴Hadoop每個進程應該對每個文件執行一些分析,然后對結果分析進行統計(例如,將結果平均起來)嗎?
例如,假設每個文件包含:
{name}
{data1}
{data2}
...
{dataN}
並且我想對此文件執行數學函數以基於{data1, ..., dataN}
來獲取F({name}) = [value1, value2, value3]
,最后,我想找到每個{name}
的所有可能的[value1, value2, value3]
數組的平均值。 在這種情況下,如果我使用Hadoop在每一行上工作,那將無濟於事,因為每個data
必須與一個name
相關聯,因此我想讓Hadoop維護其所使用的name
知識。
如果可能的話,將F
的計算作為“ map”階段,然后將[value1, value2, value3]
數組的平均作為“ reduce”階段嗎?
因此,將問題整合為一個明確的一類:如何讓Hadoop拆分文件而不是行的工作?
我們可以獲取文件名並將其輸出為映射器的輸出鍵。 映射器的輸出值可以是諸如value1,value2,value3等的值。獲取文件名的代碼段如下
InputSplit split = context.getInputSplit();
String fileName = split.getPath().getName();
在化簡器部分中,我們可以按照此處為文件名的鍵進行迭代,並執行必要的操作,例如平均值,總和等。化簡器輸出可以具有文件名和值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.