資源隔離。有些集群是專用的,比如給妳三臺設備只跑壹個spark,那還算Ok。但在很多規模很小的團體中,在有限的硬件設備的情況下,又要跑spark,比如又要跑zookeeper、kafka等等,這個時候,我們希望它們之間是不會互相幹擾的。假設妳spark的配置沒做好,內存占用太大了,妳總不希望把妳好端端zookeeper給影響得掛掉(躺槍_(:з」∠)_)。那麽此時虛擬機或者容器技術可以對物理資源進行隔離,防止這種情況出現。
快速部署,簡化配置。無論對於新手還是老手來說,幹這行非常痛苦的壹點是各種框架的配置和部署,大量重復工作,又不怎麽需要動腦子。所以妳當然希望有壹種方式,直接把妳已經配置好的環境保存下來,作為壹個鏡像,然後當集群要擴展了,比如又增加了壹個物理設備,妳希望在上面虛擬化成三臺虛擬機,兩臺運行spark,壹臺運行zookeeper,那簡單了,把spark的鏡像copy兩份,zookeeper的鏡像copy壹份,網絡配置好,開起來,壹切都是那麽瀟灑...
調度單元。更高級的應用中,數據平臺向整個團體或者公眾提供服務。用戶A希望有資源運行自己的應用,用戶B也希望運行自己的應用,無論從安全角度還是管理角度上來說妳都不希望他們之間是混雜的,這時候虛擬機也是壹種解決方案。如果做壹個高級點的調度器,當感知到spark工作壓力非常大的時候啟動壹個zk鏡像,反之減少壹個鏡像……這些功能在有虛擬機進行隔離時都會簡單很多很多。
隨便想了幾個理由,應該還有很多,虛擬化這方面的專家應該更有發言權,畢竟幹分布式計算的也只是虛擬化技術的受益者之壹。
問題中談到了性能,當然虛擬化的引入比裸奔性能上壹定會有影響,如果影響很大的話,在做架構設計的時候就要根據實際需求進行取舍;然而比如像container,docker等輕量級虛擬化技術的出現,使它對性能的影響被壓縮到了壹個很小的地步,對於大多數分布式系統來說,這點性能損耗並不會有太大的影響……然後妳懂的……