數據處理 |
Python, R, Scala |
</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 開發,目前仍保持著強勁的勢頭。不過,新生代 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 能夠讓人學到編程最重要的東西——如何解決問題。
順便提一句,微軟參加 2015 年 PyCon,高調宣布提高 Python 在 Windows 上的編程體驗,包括 Visual Studio 支持 Python,優化 Python 的C擴展在 Windows 上的編譯等等。腦補下未來 Python 作為 Windows 默認組件的場景。
來自: insights.thoughtworkers.org
本文由用戶
pm45e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
sesese色