前段時間,ThoughtWorks在深圳舉辦一次社區活動上,有一個演講主題叫做“Fullstack JavaScript”,是關于用JavaScript進行前端、服務器端,甚至數據庫(MongoDB)開發,九江服務器 東莞服務器,一個Web應用開發人員,只需要學會一門語言,就可以實現整個應用。
受此啟發,我發現Python可以稱為大數據全棧式開發語言。因為Python在云基礎設施,DevOps,大數據處理等領域都是炙手可熱的語言。
領域 流行語言
云基礎設施 Python, Java, Go
DevOps Python, Shell, Ruby, Go
網絡爬蟲 Python, PHP, C++
數據處理 Python, R, Scala
云基礎設施就像只要會JavaScript就可以寫出完整的Web應用,只要會Python,就可以實現一個完整的大數據處理平臺。
這年頭,不支持云平臺,不支持海量數據,不支持動態伸縮,根本不敢說自己是做大數據的,頂多也就敢跟人說是做商業智能(BI)。
云平臺分為私有云和公有云。私有云平臺如日中天的OpenStack,就是Python寫的。曾經的追趕者CloudStack,在剛推出時大肆強調自己是Java寫的,比Python有優勢。結果,搬石砸腳,2015年初,CloudStack的發起人Citrix宣布加入OpenStack基金會,CloudStack眼看著就要壽終正寢。
如果嫌麻煩不想自己搭建私有云,用公有云,不論是AWS,GCE,Azure,還是阿里云,青云,在都提供了Python SDK,其中GCE只提供Python和JavaScript的SDK,而青云只提供Python SDK??梢姼骷以破脚_對Python的重視。
提到基礎設施搭建,不得不提hadoop,在今天,Hadoop因為其MapReduce數據處理速度不夠快,已經不再作為大數據處理的首選,但是HDFS和Yarn——Hadoop的兩個組件——倒是越來越受歡迎。Hadoop的開發語言是Java,沒有官方提供Python支持,不過有很多第三方庫封裝了Hadoop的API接口(pydoop,hadoopy等等)。
Hadoop MapReduce的替代者,是號稱快上100倍的Spark,其開發語言是Scala,但是提供了Scala,Java,Python的開發接口,想要討好那么多用Python開發的數據科學家,不支持Python,真是說不過去。HDFS的替代品,比如GlusterFS,Ceph等,都是直接提供Python支持。Yarn的替代者,Mesos是C++實現,除C++外,提供了Java和Python的支持包。
DevOps
DevOps有個中文名字,叫做開發自運維?;ヂ摼W時代,只有能夠快速試驗新想法,并在第一時間,安全、可靠的交付業務價值,才能保持競爭力。DevOps推崇的自動化構建/測試/部署,以及系統度量等技術實踐,是互聯網時代必不可少的。
自動化構建是因應用而易的,如果是Python應用,因為有setuptools, pip, virtualenv, tox, flake8等工具的存在,自動化構建非常簡單。而且,因為幾乎所有Linux系統都內置Python解釋器,所以用Python做自動化,不需要系統預安裝什么軟件。
自動化測試方面,基于Python的Robot Framework企業級應用最喜歡的自動化測試框架,而且和語言無關。Cucumber也有很多支持者,Python對應的Lettuce可以做到完全一樣的事情。Locust在自動化性能測試方面也開始受到越來越多的關注。
自動化配置管理工具,老牌的如Chef和Puppet,是Ruby開發,目前仍保持著強勁的勢頭。不過,新生代Ansible和SaltStack——均為Python開發——因為較前兩者設計更為輕量化,受到越來越多開發這的歡迎,已經開始給前輩們制造了不少的壓力。
在系統監控與度量方面,傳統的Nagios逐漸沒落,新貴如Sensu大受好評,云服務形式的New Relic已經成為創業公司的標配,這些都不是直接通過Python實現的,不過Python要接入這些工具,并不困難。
除了上述這些工具,基于Python,提供完整DevOps功能的PaaS平臺,如Cloudify和Deis,雖未成氣候,但已經得到大量關注。
網絡爬蟲
大數據的數據從哪里來 除了部分企業有能力自己產生大量的數據,大部分時候,是需要靠爬蟲來抓取互聯網數據來做分析。
網絡爬蟲是Python的傳統強勢領域,最流行的爬蟲框架Scrapy,HTTP工具包urlib2,HTML解析工具beautifulsoup,XML解析器lxml,等等,都是能夠獨當一面的類庫。
不過,網絡爬蟲并不僅僅是打開網頁,解析HTML這么簡單。高效的爬蟲要能夠支持大量靈活的并發操作,常常要能夠同時幾千甚至上萬個網頁同時抓取,傳統的線程池方式資源浪費比較大,線程數上千之后系統資源基本上就全浪費在線程調度上了。Python由于能夠很好的支持協程(Coroutine)操作,基于此發展起來很多并發庫,如Gevent,Eventlet,還有Celery之類的分布式任務框架。被認為是比AMQP更高效的ZeroMQ也是最早就提供了Python版本。有了對高并發的支持,網絡爬蟲才真正可以達到大數據規模。
抓取下來的數據,需要做分詞處理,Python在這方面也不遜色,著名的自然語言處理程序包NLTK,還有專門做中文分詞的Jieba,都是做分詞的利器。
數據處理