天天看点

我为什么说 Python 是大数据全栈式开发语言

我为什么说 Python 是大数据全栈式开发语言

前段时间,thoughtworks在深圳举办一次社区活动上,有一个演讲主题叫做“fullstack javascript”,是关于用javascript进行前端、服务器端,甚至数据库(mongodb)开发,一个web应用开发人员,只需要学会一门语言,就可以实现整个应用。

受此启发,我发现python可以称为大数据全栈式开发语言。因为python在云基础设施,devops,大数据处理等领域都是炙手可热的语言。

领域 流行语言

云基础设施 python, java, go

devops python, shell, ruby, go

网络爬虫 python, php, c++

数据处理 python, r, scala

云基础设施就像只要会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的优雅和简洁无疑是最大的吸引力,在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-08-24

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“bigdatadigest”微信公众号