Hadoop流程記錄如何跨塊邊界分割?根據 Hadoop - The Definitive GuideFileInputFormats定義的邏輯記錄通常不適合HDFS塊。例如,TextInputFormat的邏輯記錄是行,它們將經常跨越HDFS邊界。這與你的程序的功能沒有關系 - 例如,線路不會丟失或損壞 - 但它值得了解,因為它確實意味著數據本地映射(即,與它們在同一主機上運行的映射)輸入數據)將執行一些遠程讀取。這導致的輕微開銷通常不顯著。假設記錄行分為兩個塊(b1和b2)。處理第一個塊(b1)的映射器將注意到最后一行沒有EOL分隔符,并從下一個數據塊中取出剩余的行(b2)。映射器如何處理第二個塊(b2)如何確定第一個記錄是不完整的并且應該從塊(b2)中的第二個記錄開始處理?
3 回答
斯蒂芬大帝
TA貢獻1827條經驗 獲得超8個贊
我認為如下:InputFormat負責將數據拆分為邏輯拆分,同時考慮到數據的性質。
沒有什么可以阻止它這樣做,雖然它可以為作業增加顯著的延遲 - 圍繞所需的分割大小邊界的所有邏輯和讀取都將在jobtracker中發生。
最簡單的記錄感知輸入格式是TextInputFormat。它的工作原理如下(據我從代碼中理解) - 輸入格式按大小創建拆分,無論行如何,但LineRecordReader始終:
a)跳過拆分中的第一行(或部分),如果不是第一次分割
b)在分割的邊界之后讀取一行(如果數據可用,那么它不是最后一次分割)。
添加回答
舉報
0/150
提交
取消
