轉 Docker和hadoop
Docker很熱,怎麽形容?感覺開源除了spark技術,就是docker了,甚至把Go語言也帶火了,把Go在TIOBE的排名從百名外帶入主流語言的行列。
Docker快成救世主了,這麽牛逼的技術,docker和hadoop碰撞出什麽火花來呢,是不是得趕緊用上呢?
就不介紹具體什麽是docker了,不是一門全新的技術,是基於LXC的高級容器引擎,從linux內核發展出來的輕量隔離技術。相比單純的隔離,核心是標準化了鏡像打包,部署和發布這個過程,相當於標準化了開發過程。就運行態來說,相比VM,核心優勢就是輕量,劣勢也明顯,安全性不足,容易攻破。下圖是一個VM和容器的對比:
關於LXC,google的大規模集群管理工具borg號稱十年前就使用上了,使用場景就是大數據場景,而且批量/實時場景號稱都支持的很好,集群資源利用率也非常高,所以照這個說起來,大數據和docker淵源很深。
但是現實的情況是,docker在hadoop領域用的並不是很好。目前主流兩種用法:
第一種方法是用Docker來直接運行Hadoop。例如hortonworks,收購了一家叫SequenceIQ的公司,通過叫Cloudbreak的技術,將Hortonworks Data Platform(HDP)打包成Docker鏡像,好處是可以在微軟Azure、亞馬遜AWS、谷歌雲平臺等任何主流雲平臺上啟動HDP。這種解決的是在多雲平臺部署的問題。但是這個公司被收購之後也沒有更多的消息了。Github上的最後一次更新也在5個月之前。
這個至多只是解決開發環境的問題,hadoop很難在不同的環境下,不調優而跑出一致的表現,天生的使用場景受限,價值有限。
第二種方法是通過YARN來使用Docker容器進行應用部署,yarn是支持docker的,具體可以看看:
http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/DockerContainerExecutor.html
yarn作為資源管理,由於其擴展能力,一直被壓縮在了大數據領域,如果為了任務級別更高資源利用,通過FAIR調度算法足於,更強的隔離反而限制了資源的彈性使用。
當前資源調度更火是k8s(google主推,號稱從borg發展而來)和mesos(伯克利大學主推)。瞄準的場景也更多的是應用級別,yarn支持docker處在一個很尷尬的地步。
綜合來說,hadoop體系有自己的一套資源管理系統,要解決的問題是多個服務器並行調度起來當一個服務器使用的問題。而docker技術本質上和VM一樣,是將一個服務器拆成多份給更多的應用使用。Docker和hadoop體系在雲下物理機的場景非常有限,未來在雲上替代VM解決彈性伸縮問題應該有發展。
轉 Docker和hadoop