HDFS:大數(shù)據(jù)分析的軟肋
- 來源:中國信息化周報 smarty:if $article.tag?>
- 關鍵字: smarty:/if?>
- 發(fā)布時間:2017-03-22 16:48
如今,分布式文件系統(tǒng)是大型分析非常重要的一環(huán),即使在使用Spark仍然需要將大量的數(shù)據(jù)快速存入內(nèi)存,所以文件系統(tǒng)一定是高速率的。但其實HDFS并不像標榜的那樣好,它是大數(shù)據(jù)分析的薄弱環(huán)節(jié)。
我們知道,HDFS中的文件分配表的核心是NameNode,客戶端主要通過NameNode執(zhí)行數(shù)據(jù)操作,DataNode會與其他DataNode進行通信并復制數(shù)據(jù)塊以實現(xiàn)冗余,這樣單一的DataNode損壞就會導致集群的數(shù)據(jù)丟失。但是NameNode一旦發(fā)生故障,后果就會非常嚴重。雖然NameNode可以故障轉(zhuǎn)移,但是花費大量的時間,這也意味著序列中會有更多的等待時間。此外,HDFS的垃圾回收,尤其是Java垃圾回收還需要占用大量的內(nèi)存,一般是本機有效內(nèi)存的10倍左右。
因為HDFS的設計更多是建立在響應“一次寫入、多次讀寫”任務的基礎上,多數(shù)情況下,分析任務都會涉及數(shù)據(jù)集中的大部分數(shù)據(jù),也就是說對HDFS而言,請求讀取整個數(shù)據(jù)集要比讀取一條記錄更加高效,所以HDFS在語言選擇方面更偏向于基礎語言,而不是高級語言。
傳統(tǒng)的操作可以用更短的時間來開發(fā)部署,維護成本更低、安全性更好。業(yè)內(nèi)有這樣一種說法,大多數(shù)操作系統(tǒng)支持C語言、匯編和Java的原因是文件系統(tǒng)處于一個較低水平。HDFS的工具和其他文件系統(tǒng)工具相較存在差距,比起曾經(jīng)處理的任何文件系統(tǒng)或分布式存儲,HDFS周圍的工具表現(xiàn)不佳?;贘ava的文件系統(tǒng)只能搭上IT人員最喜愛的POSIX工具的末班車,嘗試過NFS掛載HDFS嗎?其它的HDFS工具的安裝也相對較復雜,相反如果使用REST bridge Tool和客戶端命令行就會非常容易。
HDFS支持原生代碼擴展,提高了運行效率。另外社區(qū)也為NameNode的發(fā)展作出了很多貢獻。如果想要打造一個高端的系統(tǒng),那么必須打破監(jiān)測和診斷工具中的NameNode瓶頸,總之在操作系統(tǒng)上使用基于C或C++的較為成熟的分布式文件系統(tǒng)往往是更好的選擇。
早期的Hadoop企業(yè)部署基本上是在本地完成,隨著Spark和云部署的崛起,使用Amazon S3作為數(shù)據(jù)源的情況漸漸多了起來。Hadoop供應商都期望能夠出現(xiàn)更為統(tǒng)一的Hadoop平臺,期望HDFS能夠與安全組件集成。Spark本身就因文件系統(tǒng)的多樣性而存在很多矛盾,所以想要和文件系統(tǒng)緊密集成幾乎是不可能。這樣MAPR FS文件系統(tǒng)漸漸引起了企業(yè)的興趣,MAPR FS沒有NameNode,而是采用了更標準和熟悉的集群方案,MAPR的分區(qū)設計很好地避免了瓶頸。
除了上述的分布式文件系統(tǒng),還有很多的分布式文件系統(tǒng)可以供選擇,例如Ceph、Gluster,其中Gluster是一種更為標準的分布式文件系統(tǒng),擅長I/O操作。目前大多數(shù)人選擇使用Spark來存儲文件,是因為他們對于Spark更加熟悉,而并非是因為它性能好、速度快。大型HDFS安裝的遷移并不可能一蹴而就,但隨著時間的遷移,未來在Spark和云項目中會越來越少看到HDFS,也許HDFS會脫離YARN,單獨成為Hadoop的一部分。
