为何说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可以让人学到编程最重要的东西——如何解决问题。

相关文章
相关标签/搜索