Hadoop中Block和Split区别
?
兩者是從不同的角度來定義的:
HDFS以固定大小的block為基本單位存儲數(shù)據(jù)(分布式文件系統(tǒng),實際存儲角度,物理存儲單位);
MapReduce以split作為處理單位(編程模型角度,邏輯單位);
Block塊
第一部分就是數(shù)據(jù)的劃分(即把File劃分成Block),這個是物理上真真實實的進行了劃分,數(shù)據(jù)文件上傳到HDFS里的時候,需要劃分成一塊一塊,每塊的大小由hadoop-default.xml里配置選項進行劃分。
這個就是默認的每個塊64MB:
<name>dfs.block.size</name>
數(shù)據(jù)劃分的時候有冗余,個數(shù)是由:
<name>dfs.replication</name>
Split分片
在hadoop中第二種劃分是由InputFormat這個接口來定義的,其中有個getSplits方法。在Hadoop0.1中,split劃分是在JobTracker端完成的,發(fā)生在JobInitThread對JobInProgress調用inittasks()的時候;而在0.18.3中是由JobClient完成的,JobClient劃分好后,把split.file寫入hdfs里,到時候jobtracker端只需要讀這個文件,就知道Split是怎么劃分的。
幾個簡單的結論:
1. 一個split不會包含零點幾或者幾點幾個Block,一定是包含大于等于1個整數(shù)個Block;
2. 一個split不會包含兩個File的Block,不會跨越File邊界;
3. split和Block的關系是一對多的關系;
4. map tasks的個數(shù)是由splits的長度決定的;
?
總結
以上是生活随笔為你收集整理的Hadoop中Block和Split区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDFS的读文件、写文件过程
- 下一篇: 集成学习算法-基础