2017-02-09 111 views
1

談到大數據,說我們有一個非常大的文件(GB的)說,我們知道HDFS以分散的方式是在塊存儲文件,考慮塊大小的說128 MB,有一種可能性,即某些塊將是這樣的:實現輸入拆分(HADOOP)

塊1

_______________

這是第一行。

這是第二行。

這是第三行。

這是第四行。

這是線

塊2

_________________

5。

這是第六行。

這是第七行。

這是第八行。

這是第九行。

這是第十行。

我知道輸入拆分的概念,以及它是一個邏輯邊界而不是物理邊界,但我從未見過它的實現。當然,我已經閱讀過描述哪些方法應該被覆蓋的文章等。但是我的第一個疑問是,這個部門真的有可能像這裏一半的記錄和一半的記錄?

如果是有關於其實施的任何想法?

回答

1

這裏有很好的解釋。

https://hadoopi.wordpress.com/2013/05/27/understand-recordreader-inputsplit/ 

和這裏

https://github.com/apache/hadoop/blob/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/LineRecordReader.java#L243 
+0

非常有幫助。謝謝 ! – User9523

1

這種情況是可能的,當達到塊大小和它創造下一個塊。 您可以通過將塊大小設置爲4 KB來模擬這種情況,並將您的內容放到DFS中。在那裏你可以看到兩個塊之間的最後一行分割。 而這本身就是輸入分割的一個很好的例子。當進程發生時,控制器將訪問塊2以獲得塊1中的未完成行的未決數據。當塊中的最後一個記錄不完整時,輸入分割包括下一個塊的位置信息和字節偏移的完成記錄所需的數據。

+0

其實我試過模擬這種情況,我把塊大小設置爲4kb,並上傳了一個大小爲4.7kb的文件。我只是創建了一個map-reduce代碼,沒有減速器,只是一個映射器,它會拋出偏移鍵和記錄的值。現在,作業計數器將輸入分割顯示爲2,但映射器輸出成爲與輸入分割數量相矛盾的單個文件。有可能這些情況是由框架自動處理的嗎? (Hadoop v2.7.1) – User9523