我試圖使用map/reduce
來處理大量的二進制數據。該應用程序的特點如下:記錄數量可能很大,因此我並不想將每條記錄作爲單獨的文件存儲在HDFS
(我打算將它們全部連接成單個二進制序列文件),並且每條記錄都是一個大的連貫的(即不可分裂的)斑點,大小在一個到幾百MB之間。記錄將被C++可執行文件使用和處理。如果不是記錄的大小,Hadoop Pipes API可以:但是這似乎是基於將輸入映射/減少任務作爲連續的字節塊傳遞的,這在這種情況下是不切實際的。Hadoop Pipes:如何通過大數據記錄來映射/減少任務
我不確定最好的方法來做到這一點。是否有任何緩衝接口允許每個M/R任務以可管理的塊抽取多個數據塊?否則,我正在考慮通過API傳遞文件偏移量,並在C++端從HDFS中傳輸原始數據。
我想從任何類似嘗試任何人的任何意見 - 我對hadoop很新。
謝謝。關於非本地HDFS讀取 - 是否沒有辦法定義自定義輸入格式,該格式可以理解記錄實際上是指向HDFS中包含實際數據的文件名的指針,並且可以提供有關數據局部性的所需信息? (在我看來,處理文件名列表必須是一個相對常見的用例 - 我很驚訝沒有更好的支持......) – 2010-10-27 09:06:46
我沒有看到一個簡單的方法來做到這一點。當您編寫HDFS文件時,它們會遍佈各處的節點,因此不能保證所有在一個輸入中命名的文件都在同一個數據節點上。 – 2010-10-27 16:03:54
非常感謝Spike-這對我來說是一個非常有幫助的討論。最後一個快速問題 - 我從上面瞭解到,由於來自一個輸入分割的所有數據都會映射到一個映射,因此如果輸入分割在HDFS中包含多個文件名,則定義數據局部性是個問題。但是如果每個輸入分割都被限制爲只包含一個文件名呢?難道你不能把輸入分割的數據局部性的缺省定義覆蓋爲所引用的文件的缺省定義嗎?還是有一個原因,這將是一個壞主意? – 2010-10-29 07:51:03