2016-11-08 61 views
0

通常,hadoop輸入分割大小定義了處理數據的映射器(容器)的數量。可以使mapreudce輸入拆分大小大於容器或tasktracker jvm堆大小嗎?

例如,如果文件爲2GB(塊大小爲1GB,則使用2個塊來存儲此文件),則該文件將存儲在2個HDFS塊中。但是,如果我將輸入拆分大小指定爲2GB,則將分配1個映射器來處理此文件。如果我沒有指定分割大小,那麼將分配兩個映射器(每個塊1個映射器)。

現在的問題是 - 如果我的映射器jvm堆大小隻有1GB,而我使用輸入拆分大小爲2GB?我的映射器JVM會耗盡內存嗎?總是有輸入分割大小等於或小於映射器jvm堆大小的好習慣嗎?

回答

0

一個輸入拆分通常會有多個記錄。您的映射器一次只能獲取一條記錄。因此,只要您的記錄中包含的鍵或值不超過您的堆大小限制,您應該沒問題。讓我們說如果你的值是一個超過堆大小的字符串/文本,那麼當映射器執行時你肯定會看到OutOfMemory錯誤。