2016-11-27 156 views
2

我對Hadoop中的塊有一些疑問。我讀過Hadoop使用HDFS,它將創建特定大小的塊。HDFS中Hadoop塊的概念

首先問是塊上的硬盤實際存在類似NTFS即正常的文件系統,我們可以看到在託管的文件系統(NTFS)塊還是隻可以使用Hadoop的命令可以看到?

第二個問題 hadoop是否在運行任務之前創建塊,即每當有文件時從頭開始存在塊,或者hadoop僅在運行任務時才創建塊。

第三個問題無論分割數量還是取決於分割之後,在分割之前是否確定並創建塊(即InputFormat類的getSplits方法)?

第四個問題之前和運行任務相同或它所依賴的配置後的街區,有兩種類型的塊一個用於存儲文件和一個用於分組的文件,並將它們發送通過網絡將數據執行任務的節點?

回答

1

包括Checkpoint塊在硬盤物理存在像NTFS即正常文件系統,我們可以看到在主機的文件系統(NTFS)的塊上或者只有它可以使用的hadoop命令可以看出?

是的。塊存在物理上。您可以使用命令,如hadoop fsck /path/to/file -files -blocks

請參考下SE問題的命令來查看塊:運行的任務,即塊之前

Viewing the number of blocks for a file in hadoop

2.Does的Hadoop創建塊從一開始,每當存在是一個文件,或者hadoop僅在運行任務時創建塊。

的Hadoop =分佈式存儲(HDFS)+分佈式處理(的MapReduce &紗)

MapReduce作業適用於輸入分割=>輸入分割是從Datanodes中的數據塊創建的。數據塊是在文件的寫入操作過程中創建的。如果您正在現有文件上運行作業,則在Map作業期間創建作業和InputSplits之前預先創建數據塊。您可以將數據塊視爲物理實體,將InputSplit看作邏輯實體。 Mapreduce作業不會更改輸入數據塊。 Reducer生成輸出數據作爲新的數據塊。

映射器過程輸入分裂並輸出到減速器工作。

3.第三個問題無論分割數量還是取決於分割之後,在分割之前(即InputFormat類的getSplits方法)是否確定並創建塊?

物理DFS塊已經有輸入。 MapReduce作業在InputSplit中工作。 Blocks和InputSplits可能相同也可能不相同。塊是一個物理實體,InputSplit是邏輯實體。請參閱下面SE的問題更多詳情:

How does Hadoop perform input splits?

4.Forth問題是塊之前和運行任務後同樣也取決於配置,並且有兩種類型的塊一個爲存儲文件和一個文件分組,並通過網絡發送到數據節點執行任務? -存在預輸入塊:

映射器輸入。映射過程從輸入塊/分割開始,在Mapper作業開始之前已經存儲在HDFS中。

映射器輸出:未存儲在HDFS中,將複製因子X大於1的HDFS上的中間結果存儲起來沒有任何意義。

減速機輸出:減速機輸出存儲在HDFS中。塊的數量取決於減速器輸出數據的大小。

+0

感謝親愛的回覆,關於我的第一個問題,我的意思是如果我可以從Windows中的資源管理器中看到託管文件系統的塊。關於第二個問題,你說「輸入拆分存在於Datanodes中」我認爲你在拆分(邏輯)和塊(物理)之間混在一起,因爲塊存在於Datanodes而不是拆分中。 –

+0

仍然我的主要問題沒有得到解答:在分割之前(即在執行getSplits之後和運行映射器之前),分割之前的塊(即,從InputFormat類執行getSplits並且在運行映射器之前)與分割之後相同(如果知道,請告訴我並感謝爲你的合作。 –

+0

我已經更新了我的答案 –

1

這些塊物理上是否存在於普通文件系統(如NTFS)的硬盤上,即我們可以看到託管文件系統(NTFS)上的塊還是隻能使用hadoop命令看到它?

是的,這些塊物理上存在於羣集中datanodes的磁盤上。我想你可能「看到」他們,如果你是在datanode之一,你真的想,但它可能不會照亮。它只會是一個隨機的128m(或任何dfs.block.size設置爲hdfs-site.xml)的文件片段,沒有有意義的文件名。 hdfs dfs命令使您可以將HDFS視爲「真實」文件系統。

hadoop是否在運行任務之前創建塊,即每當存在文件時從塊開始存在塊,或者hadoop僅在運行任務時才創建塊。

當您將文件放入HDFS(通過適用於您的情況的任何方法)時,Hadoop負責將文件拆分爲塊並在數據節點之間進行分配。

無論分割數量還是取決於分割之後,塊在分割之前是否都會被確定並創建(即InputFormat類的getSplits方法)?

不能完全確定你的意思,但塊之前存在的,不論你與他們做任何處理。

之前和運行任務相同或它所依賴的配置後的街區,有兩種類型的塊一個用於存儲文件和一個用於分組的文件,並把他們在網絡上的數據節點的執行任務?

同樣,HDFS中的塊在任何處理完成之前都會被確定,如果任何處理完成的話。HDFS只是一種以分佈式方式存儲大文件的方法。例如,在使用MapReduce作業進行處理時,Hadoop會將中間結果寫入磁盤。這與HDFS中原始文件的阻塞無關。

+0

偉大的答案謝謝。關於我的第三個問題,你知道當你執行一個MapReduce作業時,有一個InputFormat類,它提供了分割(如FileSplit)和RecordReader。所以我的問題是:datanode上的已經存在的塊(你向我解釋的)在分割之後是否有任何變化(大小或新生成的塊),或者分裂只是在邏輯上(而不是物理上)提及利害關係/每個映射器的部分。 –

+0

如果你也可以回答我的問題: http://stackoverflow.com/questions/40829509/about-hadoop-directory-as-input-combinefilesplit-number-of-mappers-datanodes 我將不勝感激。 –

+0

@MosabShaheen我明白你的意思了。我認爲這取決於很多事情;看到[這個答案](http://stackoverflow.com/a/17856292/4601931)一個很好的解釋。至於你的其他SO貼子,我不太熟悉Java MapReduce API,所以我不認爲我能幫上忙。抱歉。 – user4601931