2012-01-14 42 views
0

我有5個圖像文件(每個圖像文件小於5MB)。將包含不同格式數據的兩個文件傳遞給映射器

ImageDir/Image1 = {ImageID1 <image in binary form>} 
... 
ImageDir/Image5 = {ImageID5 <image in binary form>} 

有是也與圖像相關的一些文本數據,

ImageData/Image1_data = {ImageID1 <text data>} 
... 
ImageData/Image5_data = {ImageID5 <text data>} 

我想每一個映像及其文本數據去一個映射。我如何實現這一目標?我知道每個圖像都會映射到一個映射器,但是如何確保不同形式的映像文本數據也映射到同一個映射器。

回答

0
  1. 最簡單的方法是使用腳本以自動方式將圖像和相關數據組合成單個文件(gz,tar等)並讓映射程序處理它。

  2. AFAIK,Hadoop OOB不支持這一點。所以,需要對custom InputFormat進行編碼。不推薦這種方法,因爲圖像和相關數據可能位於不同節點上,並且在作業執行期間會有大量數據混洗。

+0

我覺得,我收拾IMAGE_FILE和相關數據在一個單一的tar文件,要麼壓縮,或設置isSplitable第一種情況下()返回假的,我會寫我自己的InputFormat和RecordReader? – sunillp 2012-01-15 06:19:44

+0

基本上假設我有.tar.gz文件,然後(1)MR將自動解壓縮該文件,然後將其提供給RecordReader。 (2)將RecordReader解壓文件,然後讀取每個文件內容並將其轉換爲鍵/值對。對於數據,我可以將Key用作ImageData,將Value用作Actual_Data,對於Image I,可以將Key用作ImageContents,將Value用作Actual_Image_Contents。然後映射器將不得不解釋這些鍵和相關的值。這是正確的嗎?有沒有處理.tar或.zip文件的InputFormat/RecordReader的例子。將使用Hadoop存檔(.har)簡化工作嗎? – sunillp 2012-01-15 06:30:01

+0

StackOverflow不是一個學習東西的論壇。閱讀Hadoop上的一些文章,如果可能的話,購買一本書,在單個節點上嘗試Hadoop,然後在集羣上嘗試問題。 「我想再次告訴你,這不是一個學習東西的論壇。」花費一些努力,然後提出問題。 – 2012-01-15 08:32:04