我有一個文件a.txt中在我的地方,我想移動該文件到的Hadoop文件系統(HDFS)像下面這樣移動從本地文件到HDFS
Hadoop的FS -put A.TXT /用戶/ hive/warehouse/sample_db/sample_table/
當文件a.txt從本地移動到Hadoop位置時,後臺發生了什麼?
我有一個文件a.txt中在我的地方,我想移動該文件到的Hadoop文件系統(HDFS)像下面這樣移動從本地文件到HDFS
Hadoop的FS -put A.TXT /用戶/ hive/warehouse/sample_db/sample_table/
當文件a.txt從本地移動到Hadoop位置時,後臺發生了什麼?
在後臺,源文件被拆分成HDFS塊,其大小可配置(通常爲128 MB,默認爲64 MB)。爲了容錯,每個塊都由HDFS自動複製。默認情況下,每個塊的三個副本被寫入三個不同的DataNode。複製因子是用戶可配置的(默認值是三)。 DataNodes是物理機器或虛擬機/雲實例的服務器。 DataNode組成Hadoop集羣,您可以在其中編寫數據並在其上運行MapReduce/Hive/Pig/Impala/Mahout /等。程式。
DataNodes是Hadoop集羣的工作人員,NameNodes是主人。
將文件寫入HDFS時,寫入文件的客戶端從NameNode獲取可託管文件第一個塊的副本的DataNode列表。
客戶端安排流水線,通過該流水線,來自源文件第一個塊的所有數據字節將傳輸到所有參與的DataNode。流水線從客戶端到第一個DataNode到第二個DataNode到最後(在我們的例子中是第三個)DataNode。數據被分成數據包進行傳輸,並且每個數據包都被跟蹤,直到所有DataNode都返回ack以指示數據的成功複製。數據包被流式傳輸到管道中的第一個DataNode,它存儲數據包並將其轉發到第二個DataNode,依此類推。如果一個或多個複製失敗,基礎架構會自動構建新的管道並重試該副本。
當所有三個DataNode確認複製成功後,客戶端將前進到下一個塊,再次從NameNode請求主機DataNode列表,並構建新的管道。遵循這個過程,直到所有塊都被複制到HDFS中。寫入的最後一個數據塊可能小於配置的數據塊大小,但是從第一個數據塊到倒數第二個數據塊的所有數據塊都將具有配置的數據塊大小。
參考:Hadoop:權威指南湯姆白。
Hadoop fs -put
不會將文件從本地移動到hadoop它只是將文件複製到HDFS。
當你開火時hadoop fs -put
命令hadoop將該文件以塊的形式複製到datanode,塊的大小從hadoop配置中選取。
您可以使用hadoop -D選項指定複製文件時的塊大小,您可以從該選項指定該特定複製語句的hadoop屬性。
這不**移動**文件。它**將文件從本地複製到hdfs。 –
謝謝,我可以知道進程(如何在兩個不同的文件系統或位置之間複製字節?) –