大數(shù)據(jù)全棧式開發(fā)語言 – Python
前 段時間,ThoughtWorks在深圳舉辦一次社區(qū)活動上,有一個演講主題叫做“Fullstack JavaScript”,是關(guān)于用JavaScript進(jìn)行前端、服務(wù)器端,甚至數(shù)據(jù)庫(MongoDB)開發(fā),一個Web應(yīng)用開發(fā)人員,只需要學(xué)會一門 語言,就可以實(shí)現(xiàn)整個應(yīng)用。
受此啟發(fā),我發(fā)現(xiàn)Python可以稱為大數(shù)據(jù)全棧式開發(fā)語言。因?yàn)镻ython在云基礎(chǔ)設(shè)施,DevOps,大數(shù)據(jù)處理等領(lǐng)域都是炙手可熱的語言。
|
領(lǐng)域 |
流行語言 |
|---|---|
|
云基礎(chǔ)設(shè)施 |
Python, Java, Go |
|
DevOps |
Python, Shell, Ruby, Go |
|
網(wǎng)絡(luò)爬蟲 |
Python, PHP, C++ |
|
數(shù)據(jù)處理 |
Python, R, Scala |
就像只要會JavaScript就可以寫出完整的Web應(yīng)用,只要會Python,就可以實(shí)現(xiàn)一個完整的大數(shù)據(jù)處理平臺。
云基礎(chǔ)設(shè)施
這年頭,不支持云平臺,不支持海量數(shù)據(jù),不支持動態(tài)伸縮,根本不敢說自己是做大數(shù)據(jù)的,頂多也就敢跟人說是做商業(yè)智能(BI)。
云平臺分為私有云和公有云。私有云平臺如日中天的OpenStack, 就是Python寫的。曾經(jīng)的追趕者CloudStack,在剛推出時大肆強(qiáng)調(diào)自己是Java寫的,比Python有優(yōu)勢。結(jié)果,搬石砸腳,2015年 初,CloudStack的發(fā)起人Citrix宣布加入OpenStack基金會,CloudStack眼看著就要壽終正寢。
如果嫌麻煩不想自己搭建私有云,用公有云,不論是AWS,GCE,Azure,還是阿里云,青云,在都提供了Python SDK,其中GCE只提供Python和JavaScript的SDK,而青云只提供Python SDK。可見各家云平臺對Python的重視。
提 到基礎(chǔ)設(shè)施搭建,不得不提Hadoop,在今天,Hadoop因?yàn)槠銶apReduce數(shù)據(jù)處理速度不夠快,已經(jīng)不再作為大數(shù)據(jù)處理的***,但是HDFS 和Yarn——Hadoop的兩個組件——倒是越來越受歡迎。Hadoop的開發(fā)語言是Java,沒有官方提供Python支持,不過有很多第三方庫封裝 了Hadoop的API接口(pydoop,hadoopy等等)。
Hadoop MapReduce的替代者,是號稱快上100倍的Spark,其開發(fā)語言是Scala,但是提供了Scala,Java,Python的開發(fā)接口,想要討好那么多用Python開發(fā)的數(shù)據(jù)科學(xué)家,不支持Python,真是說不過去。HDFS的替代品,比如GlusterFS,Ceph等,都是直接提供Python支持。Yarn的替代者,Mesos是C++實(shí)現(xiàn),除C++外,提供了Java和Python的支持包。
DevOps
DevOps有個中文名字,叫做開發(fā)自運(yùn)維。互聯(lián)網(wǎng)時代,只有能夠快速試驗(yàn)新想法,并在***時間,安全、可靠的交付業(yè)務(wù)價值,才能保持競爭力。DevOps推崇的自動化構(gòu)建/測試/部署,以及系統(tǒng)度量等技術(shù)實(shí)踐,是互聯(lián)網(wǎng)時代必不可少的。
自 動化構(gòu)建是因應(yīng)用而易的,如果是Python應(yīng)用,因?yàn)橛衧etuptools, pip, virtualenv, tox, flake8等工具的存在,自動化構(gòu)建非常簡單。而且,因?yàn)閹缀跛蠰inux系統(tǒng)都內(nèi)置Python解釋器,所以用Python做自動化,不需要系統(tǒng)預(yù) 安裝什么軟件。
自動化測試方面,基于Python的Robot Framework企業(yè)級應(yīng)用最喜歡的自動化測試框架,而且和語言無關(guān)。Cucumber也有很多支持者,Python對應(yīng)的Lettuce可以做到完全一樣的事情。Locust在自動化性能測試方面也開始受到越來越多的關(guān)注。
自動化配置管理工具,老牌的如Chef和Puppet,是Ruby開發(fā),目前仍保持著強(qiáng)勁的勢頭。不過,新生代Ansible和SaltStack——均為Python開發(fā)——因?yàn)檩^前兩者設(shè)計(jì)更為輕量化,受到越來越多開發(fā)這的歡迎,已經(jīng)開始給前輩們制造了不少的壓力。
在系統(tǒng)監(jiān)控與度量方面,傳統(tǒng)的Nagios逐漸沒落,新貴如Sensu大受好評,云服務(wù)形式的New Relic已經(jīng)成為創(chuàng)業(yè)公司的標(biāo)配,這些都不是直接通過Python實(shí)現(xiàn)的,不過Python要接入這些工具,并不困難。
除了上述這些工具,基于Python,提供完整DevOps功能的PaaS平臺,如Cloudify和Deis,雖未成氣候,但已經(jīng)得到大量關(guān)注。
網(wǎng)絡(luò)爬蟲
大數(shù)據(jù)的數(shù)據(jù)從哪里來?除了部分企業(yè)有能力自己產(chǎn)生大量的數(shù)據(jù),大部分時候,是需要靠爬蟲來抓取互聯(lián)網(wǎng)數(shù)據(jù)來做分析。
網(wǎng)絡(luò)爬蟲是Python的傳統(tǒng)強(qiáng)勢領(lǐng)域,***的爬蟲框架Scrapy,HTTP工具包urlib2,HTML解析工具beautifulsoup,XML解析器lxml,等等,都是能夠獨(dú)當(dāng)一面的類庫。
不 過,網(wǎng)絡(luò)爬蟲并不僅僅是打開網(wǎng)頁,解析HTML這么簡單。高效的爬蟲要能夠支持大量靈活的并發(fā)操作,常常要能夠同時幾千甚至上萬個網(wǎng)頁同時抓取,傳統(tǒng)的線 程池方式資源浪費(fèi)比較大,線程數(shù)上千之后系統(tǒng)資源基本上就全浪費(fèi)在線程調(diào)度上了。Python由于能夠很好的支持協(xié)程(Coroutine)操作,基于此發(fā)展起來很多并發(fā)庫,如Gevent,Eventlet,還有Celery之類的分布式任務(wù)框架。被認(rèn)為是比AMQP更高效的ZeroMQ也是最早就提供了Python版本。有了對高并發(fā)的支持,網(wǎng)絡(luò)爬蟲才真正可以達(dá)到大數(shù)據(jù)規(guī)模。
抓取下來的數(shù)據(jù),需要做分詞處理,Python在這方面也不遜色,著名的自然語言處理程序包NLTK,還有專門做中文分詞的Jieba,都是做分詞的利器。
數(shù)據(jù)處理
萬事俱備,只欠東風(fēng)。這東風(fēng),就是數(shù)據(jù)處理算法。從統(tǒng)計(jì)理論,到數(shù)據(jù)挖掘,機(jī)器學(xué)習(xí),再到最近幾年提出來的深度學(xué)習(xí)理論,數(shù)據(jù)科學(xué)正處于百花齊放的時代。數(shù)據(jù)科學(xué)家們都用什么編程?
如 果是在理論研究領(lǐng)域,R語言也許是最受數(shù)據(jù)科學(xué)家歡迎的,但是R語言的問題也很明顯,因?yàn)槭墙y(tǒng)計(jì)學(xué)家們創(chuàng)建了R語言,所以其語法略顯怪異。而且R語言要想 實(shí)現(xiàn)大規(guī)模分布式系統(tǒng),還需要很長一段時間的工程之路要走。所以很多公司使用R語言做原型試驗(yàn),算法確定之后,再翻譯成工程語言。
Python 也是數(shù)據(jù)科學(xué)家最喜歡的語言之一。和R語言不同,Python本身就是一門工程性語言,數(shù)據(jù)科學(xué)家用Python實(shí)現(xiàn)的算法,可以直接用在產(chǎn)品中,這對于 大數(shù)據(jù)初創(chuàng)公司節(jié)省成本是非常有幫助的。正式因?yàn)閿?shù)據(jù)科學(xué)家對Python和R的熱愛,Spark為了討好數(shù)據(jù)科學(xué)家,對這兩種語言提供了非常好的支持。
Python的數(shù)據(jù)處理相關(guān)類庫非常多。高性能的科學(xué)計(jì)算類庫NumPy和SciPy,給其他高級算法打了非常好的基礎(chǔ),matploglib讓Python畫圖變得像Matlab一樣簡單。Scikit-learn和Milk實(shí)現(xiàn)了很多機(jī)器學(xué)習(xí)算法,基于這兩個庫實(shí)現(xiàn)的Pylearn2,是深度學(xué)習(xí)領(lǐng)域的重要成員。Theano利用GPU加速,實(shí)現(xiàn)了高性能數(shù)學(xué)符號計(jì)算和多維矩陣計(jì)算。當(dāng)然,還有Pandas,一個在工程領(lǐng)域已經(jīng)廣泛使用的大數(shù)據(jù)處理類庫,其DataFrame的設(shè)計(jì)借鑒自R語言,后來又啟發(fā)了Spark項(xiàng)目實(shí)現(xiàn)了類似機(jī)制。
對了,還有iPython,這個工具如此有用,以至于我差點(diǎn)把他當(dāng)成標(biāo)準(zhǔn)庫而忘了介紹。iPython是一個交互式Python運(yùn)行環(huán)境,能夠?qū)崟r看到每一段Python代碼的結(jié)果。默認(rèn)情況下,iPython運(yùn)行在命令行,可以執(zhí)行ipython notebook在網(wǎng)頁中運(yùn)行。用matplotlib繪制的圖可以直接嵌入式的顯示在iPython Notebook中。
iPython Notebook的筆記本文件可以共享給其他人,這樣其他人就可以在自己的環(huán)境中重現(xiàn)你的工作成果;如果對方?jīng)]有運(yùn)行環(huán)境,還可以直接轉(zhuǎn)換成HTML或者PDF。
為什么是Python
正是因?yàn)閼?yīng)用開發(fā)工程師、運(yùn)維工程師、數(shù)據(jù)科學(xué)家都喜歡Python,才使得Python成為大數(shù)據(jù)系統(tǒng)的全棧式開發(fā)語言。
對于開發(fā)工程師而言,Python的優(yōu)雅和簡潔無疑是***的吸引力,在Python交互式環(huán)境中,執(zhí)行import this, 讀一讀Python之禪,你就明白Python為什么如此吸引人。Python社區(qū)一直非常有活力,和NodeJS社區(qū)軟件包爆炸式增長不 同,Python的軟件包增長速度一直比較穩(wěn)定,同時軟件包的質(zhì)量也相對較高。有很多人詬病Python對于空格的要求過于苛刻,但正是因?yàn)檫@個要求,才 使得Python在做大型項(xiàng)目時比其他語言有優(yōu)勢。OpenStack項(xiàng)目總共超過200萬行代碼,證明了這一點(diǎn)。
對于運(yùn)維工程師而言,Python的***優(yōu)勢在于,幾乎所有Linux發(fā)行版都內(nèi)置了Python解釋器。Shell雖然功能強(qiáng)大,但畢竟語法不夠優(yōu)雅,寫比較復(fù)雜的任務(wù)會很痛苦。用Python替代Shell,做一些復(fù)雜的任務(wù),對運(yùn)維人員來說,是一次解放。
對于數(shù)據(jù)科學(xué)家而言,Python 簡單又不失強(qiáng)大。和C/C++相比,不用做很多的底層工作,可以快速進(jìn)行模型驗(yàn)證;和Java相比,Python語法簡潔,表達(dá)能力強(qiáng),同樣的工作只需要 1/3代碼;和Matlab,Octave相比,Python的工程成熟度更高。不止一個編程大牛表達(dá)過,Python是最適合作為大學(xué)計(jì)算機(jī)科學(xué)編程課 程使用的語言——MIT的計(jì)算機(jī)入門課程就是使用的Python——因?yàn)镻ython能夠讓人學(xué)到編程最重要的東西——如何解決問題。
順便提一句,微軟參加2015年P(guān)yCon,高調(diào)宣布提高Python在Windows上的編程體驗(yàn),包括Visual Studio支持Python,優(yōu)化Python的C擴(kuò)展在Windows上的編譯等等。腦補(bǔ)下未來Python作為Windows默認(rèn)組件的場景。
































