雲基礎設施
如今,我們不支持雲平臺、海量數據和動態擴展。我們根本不敢說自己在做大數據,最多敢跟人說自己在做商業智能(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數據處理速度不夠快,但是
Hadoop的兩個組件HDFS和YARN變得越來越流行。Hadoop的開發語言是Java,沒有官方的Python支持,但是有很多第壹。
三方庫封裝了Hadoop的API接口(pydoop,hadoopy等。).
Hadoop MapReduce的替代者是Spark,號稱快100倍。它的開發語言是Scala,但是提供了Scala,Java,Python的開發接口。討好那麽多用Python的數據科學家,又不支持Python,真的沒什麽意義。HDFS的替代品,比如GlusterFS和Ceph,直接提供了Python支持。作為Yarn的替代方案,Mesos是用C++實現的,除了C++之外,c++還提供了對Java和Python的支持包。
DevOps
DevOps有個中文名,叫開發自運維。在互聯網時代,只有能夠快速測試新想法,並在第壹時間安全可靠地交付商業價值,才能保持競爭力。DevOps倡導的自動化構建/測試/部署、系統度量等技術實踐在互聯網時代必不可少。
自動構造易於應用。如果是Python應用,有setuptools,pip,virtualenv,tox,
有了flake8等工具的存在,自動構建就非常簡單了。此外,因為幾乎所有的Linux系統都有內置的Python解釋器,所以Python中的自動化是不必要的。
安裝什麽軟件。
在自動化測試方面,基於Python的機器人框架應用了企業級最喜歡的自動化測試框架,與語言無關。黃瓜也有很多支持者,Python對應的生菜也可以做壹模壹樣的事情。在自動化性能測試中,Locust也引起了越來越多的關註。
自動化配置管理工具,如Chef和Puppet,是由Ruby開發的,並且仍然保持著強勁的勢頭。但是新壹代的Ansible和salt stack——都是Python開發的——比前兩個更加輕量級,受到越來越多開發者的歡迎,這已經開始給前輩們很大的壓力了。
在系統監測和測量方面,傳統的Nagios逐漸衰落,Sensu等新貴受到好評,雲服務形式的New Relic已經成為創業公司的標配。這些都不是通過Python直接實現的,但是Python訪問這些工具並不難。
除了這些工具之外,基於Python提供完整DevOps功能的PaaS平臺,如Cloudify、Deis等,雖然沒有成氣候,但也受到了很多關註。
網絡爬蟲
大數據從何而來?除了部分企業有能力自己產生大量數據外,大部分時候還是要靠爬蟲抓取互聯網數據進行分析。
網絡爬蟲是Python的傳統強勢領域。最流行的爬蟲框架Scrapy,HTTP toolkit urlib2,HTML解析工具beautifulsoup,XML解析器lxml等。都是可以獨立的類庫。
然而,網絡爬蟲不僅僅是打開網頁和解析HTML。壹個高效的爬蟲應該能夠支持大量靈活的並發操作,往往應該能夠同時爬行數千甚至上萬個網頁。傳統的
線程池的方法浪費了很多資源,上千個線程之後,系統資源基本都浪費在線程調度上了。Python可以很好的支持協程操作,所以開發了很多並發庫,比如Gevent,Eventlet,分布式任務框架比如Celery。被認為比AMQP更高效的ZeroMQ也是第壹個提供Python版本的。在高並發的支持下,網絡爬蟲才能真正達到大數據的規模。
抓取的數據需要分詞,Python在這方面並不遜色。著名的專門做中文分詞的自然語言處理包NLTK和Jieba都是分詞的利器。
數據處理
萬事俱備,只欠東風。這個東風就是數據處理算法。從統計理論,到數據挖掘、機器學習,再到近年來提出的深度學習理論,數據科學正處於壹個百花齊放的時代。數據科學家用什麽來編程?
如果是在理論研究領域,R語言可能是最受數據科學家歡迎的,但是R語言的問題也很明顯,因為統計學家創造了R語言,所以它的語法略顯怪異。和
R語言要實現大規模分布式系統還需要很長時間。所以很多公司用R語言做原型測試,算法確定後翻譯成工程語言。
Python也是數據科學家最喜歡的語言之壹。與R語言不同的是,Python本身是壹門工程語言,數據科學家用Python實現的算法可以是直的。
大數據創業公司用在產品上對節約成本很有幫助。官方是因為數據科學家對Python和R的喜愛,Spark為了討好數據科學家,對這兩種語言感興趣。
提供了很好的支持。
Python有很多與數據處理相關的類庫。高性能科學計算類庫NumPy和SciPy為其他高級算法奠定了非常好的基礎。matploglib制造
Python畫圖變得和Matlab壹樣簡單。Scikit-learn和Milk實現了很多機器學習算法,基於這兩個庫的Pylearn2是深度學習領域的重要成員。Theano利用GPU加速實現高性能數學符號計算和多維矩陣計算。當然還有熊貓,壹個已經在工程領域廣泛應用的大數據處理類庫。其數據框架的設計借鑒了R語言,後來啟發了Spark項目實現了類似的機制。
對了,還有iPython,它太有用了,我差點忘了把它作為標準庫來介紹。IPython是壹個交互式的Python運行環境,可以實時看到每壹段Python代碼的結果。默認情況下,iPython在命令行上運行,您可以執行ipython notebook在網頁中運行。matplotlib繪制的圖形可以直接嵌入iPython筆記本。
IPython筆記本文件可以共享給他人,讓別人在自己的環境下重現妳的作品;如果對方沒有運行環境,也可以直接轉換成HTML或者PDF。
為什麽是Python?
正是因為應用開發工程師、運維工程師、數據科學家都喜歡Python,Python才成為大數據系統的全棧開發語言。
對於開發工程師來說,Python的優雅和簡潔無疑是最大的吸引力。在Python的交互環境中,執行import this。
讀了Python的禪,妳就明白Python為什麽這麽有吸引力了。Python社區壹直都是非常動態的,NodeJS社區軟件包的爆炸就不是了。
同時,Python軟件包的增長率壹直比較穩定,軟件包的質量也比較高。有很多人批評Python要求空間,但正是因為這個要求,
這使得Python在做大型項目時比其他語言更有優勢。OpenStack項目總是超過200萬行代碼,證明了這壹點。
對於運維工程師來說,Python最大的優勢就是幾乎所有的Linux發行版都內置了Python解釋器。雖然Shell功能強大,但畢竟語法不夠優雅,寫更復雜的任務會很痛苦。用Python代替Shell做壹些復雜的工作,對運維人員來說是壹種解放。
對於數據科學家來說,Python簡單而強大。與C/C++相比,不需要做大量的底層工作就可以快速驗證模型。與Java相比,Python語法簡單。
幹凈利落,表現力強,同樣的作業只需要1/3代碼;與Matlab和Octave相比,Python具有更高的工程成熟度。不止壹個編程大牛表示過Python。
是最適合在大學裏作為計算機科學編程課程的語言——Python被用在——麻省理工學院的計算機入門課程——因為Python可以讓人學到編程最重要的東西——
如何解決問題。