在Hadoop中,考慮到一個場景,如果一個bigfile已經加載到hdfs文件系統中,使用hdfs dfs put或hdfs dfs CopyFromLocal命令,bigfile將被分割成塊(64 MB )。Hadoop:爲什麼在RecordReader實現中使用FileSplit
在這種情況下,當必須創建customRecordReader來讀取bigfile時,請說明使用FileSplit的原因,當文件加載過程中已經分割bigfile並且以分割塊的形式提供時。
在Hadoop中,考慮到一個場景,如果一個bigfile已經加載到hdfs文件系統中,使用hdfs dfs put或hdfs dfs CopyFromLocal命令,bigfile將被分割成塊(64 MB )。Hadoop:爲什麼在RecordReader實現中使用FileSplit
在這種情況下,當必須創建customRecordReader來讀取bigfile時,請說明使用FileSplit的原因,當文件加載過程中已經分割bigfile並且以分割塊的形式提供時。
HDFS將文件分塊存儲,並可根據實際文件大小將數據分成多個塊。 因此,如果你正在編寫一個customRecordReader,那麼你將不得不告訴你的記錄閱讀器在哪裏開始和停止閱讀塊,以便你可以處理數據。從每個塊的開始讀取數據或在每個塊的末尾停止讀取可能會給您的映射器提供不完整的記錄。
請解釋使用FileSplit的原因,當大文件在文件加載過程中已經被拆分並且以拆分塊的形式提供時。
我想你可能會對FileSplit
究竟是什麼感到困惑。假設您的bigfile爲128MB
,並且您的塊大小爲64MB
。 bigfile將佔用兩個區塊。你已經知道了。在MapReduce中處理文件時,您還將(通常)獲得兩個FileSplit
。每個FileSplit
都映射到之前加載的塊。請注意0類不包含任何文件的實際數據。它只是指向文件內的數據的指針。
您正在比較蘋果和橘子。 FileSplit
的全名是org.apache.hadoop.mapred.FileSplit
,重點在mapred
。是一個MapReduce conspet,而不是一個文件系統。 FileSplit
僅僅是一個InputSplit
的專業化:
InputSplit表示數據由個人映射器進行處理。
您不必要地加入HDFS概念,如塊。 MapReduce與HDFS無關(它們有協同作用,是真的)。 MapReduce可以在許多其他文件系統上運行,例如本地原始數據,S3,Azure blob等。
從您的角度來看,FileSplit是否恰好與HDFS塊一致是純粹的巧合(不是巧合,因爲工作是拆分以利用HDFS塊的局部性,但這是一個細節)。
是的,懷疑是出於混亂。非常感謝 !!。不清楚InputSplit或FileSplit與輸入文件中要處理的字節範圍無關。 – datarockz2