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