爲何說Python 是大數據全棧式開發語言

歡迎你們訪問個人我的網站《劉江的博客和教程》:www.liujiangblog.com

主要分享Python 及Django教程以及相關的博客

原文連接 http://www.envicloud.cn/pages/news/418.html#4

前段時間,ThoughtWorks在深圳舉辦一次社區活動上,有一個演講主題叫作「Fullstack JavaScript」,是關於用JavaScript進行前端、服務器端,甚至數據庫(MongoDB)開發,一個Web應用開發人員,只須要學會一門語言,就能夠實現整個應用。html

受此啓發,我發現Python能夠稱爲大數據全棧式開發語言。由於Python在雲基礎設施,DevOps,大數據處理等領域都是煊赫一時的語言。前端

領域 流行語言

雲基礎設施 Python, Java, Gopython

DevOps Python, Shell, Ruby, Goios

網絡爬蟲 Python, PHP, C++算法

數據處理 Python, R, Scala數據庫

雲基礎設施就像只要會JavaScript就能夠寫出完整的Web應用,只要會Python,就能夠實現一個完整的大數據處理平臺。django

這年頭,不支持雲平臺,不支持海量數據,不支持動態伸縮,根本不敢說本身是作大數據的,頂多也就敢跟人說是作商業智能(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有個中文名字,叫作開發自運維。互聯網時代,只有可以快速試驗新想法,並在第一時間,安全、可靠的交付業務價值,才能保持競爭力。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,都是作分詞的利器。

數據處理

萬事俱備,只欠東風。這東風,就是數據處理算法。從統計理論,到數據挖掘,機器學習,再到最近幾年提出來的深度學習理論,數據科學正處於百花齊放的時代。數據科學家們都用什麼編程

若是是在理論研究領域,R語言也許是最受數據科學家歡迎的,可是R語言的問題也很明顯,由於是統計學家們建立了R語言,因此其語法略顯怪異。並且R語言要想實現大規模分佈式系統,還須要很長一段時間的工程之路要走。因此不少公司使用R語言作原型試驗,算法肯定以後,再翻譯成工程語言。

Python也是數據科學家最喜歡的語言之一。和R語言不一樣,Python自己就是一門工程性語言,數據科學家用Python實現的算法,能夠直接用在產品中,這對於大數據初創公司節省成本是很是有幫助的。正式由於數據科學家對Python和R的熱愛,Spark爲了討好數據科學家,對這兩種語言提供了很是好的支持。

Python的數據處理相關類庫很是多。高性能的科學計算類庫NumPy和SciPy,給其餘高級算法打了很是好的基礎,matploglib讓Python畫圖變得像Matlab同樣簡單。Scikit-learn和Milk實現了不少機器學習算法,基於這兩個庫實現的Pylearn2,是深度學習領域的重要成員。Theano利用GPU加速,實現了高性能數學符號計算和多維矩陣計算。固然,還有Pandas,一個在工程領域已經普遍使用的大數據處理類庫,其DataFrame的設計借鑑自R語言,後來又啓發了Spark項目實現了相似機制。

對了,還有iPython,這個工具如此有用,以致於我差點把他當成標準庫而忘了介紹。iPython是一個交互式Python運行環境,可以實時看到每一段Python代碼的結果。默認狀況下,iPython運行在命令行,能夠執行ipython notebook在網頁中運行。用matplotlib繪製的圖能夠直接嵌入式的顯示在iPython Notebook中。

iPython Notebook的筆記本文件能夠共享給其餘人,這樣其餘人就能夠在本身的環境中重現你的工做成果;若是對方沒有運行環境,還能夠直接轉換成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是最適合做爲大學計算機科學編程課程使用的語言——MIT的計算機入門課程就是使用的Python——由於Python可以讓人學到編程最重要的東西——如何解決問題。

相關文章
相關標籤/搜索