大數據全棧式開發語言 – Python

pm45e 9年前發布 | 39K 次閱讀 Python

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

受此啟發,我發現 Python 可以稱為大數據全棧式開發語言。因為 Python 在云基礎設施,DevOps,大數據處理等領域都是炙手可熱的語言。

</tr> </thead>

</tr>

</tr>

</tr>

</tr> </tbody> </table>

就像只要會 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 有個中文名字,叫做開發自運維。互聯網時代,只有能夠快速試驗新想法,并在第一時間,安全、可靠的交付業務價值,才能保持競爭力。DevOps 推崇的自動化構建/測試/部署,以及系統度量等技術實踐,是互聯網時代必不可少的。

自動化構建是因應用而易的,如果是 Python 應用,因為有 setuptools, pip, virtualenv, tox, flake8 等工具的存在,自動化構建非常簡單。而且,因為幾乎所有 Linux 系統都內置 Python 解釋器,所以用 Python 做自動化,不需要系統預安裝什么軟件。

自動化測試方面,基于 Python 的 Robot Framework 企業級應用最喜歡的自動化測試框架,而且和語言無關。Cucumber 也有很多支持者,Python 對應的 Lettuce 可以做到完全一樣的事情。Locust 在自動化性能測試方面也開始受到越來越多的關注。

自動化配置管理工具,老牌的如 Chef 和 Puppet,是 Ruby 開發,目前仍保持著強勁的勢頭。不過,新生代 AnsibleSaltStack——均為 Python 開發——因為較前兩者設計更為輕量化,受到越來越多開發這的歡迎,已經開始給前輩們制造了不少的壓力。

在系統監控與度量方面,傳統的 Nagios 逐漸沒落,新貴如 Sensu 大受好評,云服務形式的 New Relic 已經成為創業公司的標配,這些都不是直接通過 Python 實現的,不過 Python 要接入這些工具,并不困難。

除了上述這些工具,基于 Python,提供完整 DevOps 功能的 PaaS 平臺,如 CloudifyDeis,雖未成氣候,但已經得到大量關注。

網絡爬蟲

大數據的數據從哪里來?除了部分企業有能力自己產生大量的數據,大部分時候,是需要靠爬蟲來抓取互聯網數據來做分析。

網絡爬蟲是 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 的優雅和簡潔無疑是最大的吸引力,在 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 能夠讓人學到編程最重要的東西——如何解決問題。

順便提一句,微軟參加 2015 年 PyCon,高調宣布提高 Python 在 Windows 上的編程體驗,包括 Visual Studio 支持 Python,優化 Python 的C擴展在 Windows 上的編譯等等。腦補下未來 Python 作為 Windows 默認組件的場景。

來自: insights.thoughtworkers.org

 本文由用戶 pm45e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
領域 流行語言
云基礎設施 Python, Java, Go
DevOps Python, Shell, Ruby, Go
網絡爬蟲 Python, PHP, C++
數據處理 Python, R, Scala