当前位置: 首页 > 科技观察

大数据全栈开发语言——Python

时间:2023-03-15 08:40:07 科技观察

前段时间,ThoughtWorks在深圳举办的一个社区活动上,有一场名为“FullstackJavaScript”的演讲,讲的是用JavaScript做前端、服务端、甚至数据库(MongoDB)开发,一个网络应用开发者只需要学习一种语言就可以实现整个应用。受此启发,我发现Python可以称为大数据全栈开发语言。因为Python是云基础设施、DevOps、大数据处理等领域的热门语言。领域热门语言云基础设施Python、Java、GoDevOpsPython、Shell、Ruby、Go网络爬虫Python、PHP、C++数据处理Python、R、Scala只要会JavaScript,就可以写出完整的网络应用,只要会Python,就可以实现一个完整的大数据处理平台。现在的云基础设施不支持云平台、海量数据或动态扩展。我不敢说我??在做大数据。顶多敢跟人家说我是做商业智能(BI)的。云平台分为私有云和公有云。风头正劲的私有云平台OpenStack就是用Python编写的。曾经的追赶者CloudStack,刚推出的时候就强调自己是用Java写的,相对于Python有优势。于是,在2015年初,CloudStack的发起者Citrix宣布加入OpenStack基金会,CloudStack似乎走到了尽头。如果嫌麻烦又不想自己搭建私有云,就用公有云,不管是AWS、GCE、Azure,还是阿里云、青云,都提供PythonSDK,其中GCE只提供Python和JavaScript的SDK,而青云只提供PythonSDK。可见各个云平台对Python的重视。说到基础设施建设,就不得不提Hadoop。如今,Hadoop不再是大数据处理的首选,因为它的MapReduce数据处理速度还不够快,但Hadoop的两个组件HDFS和Yarn却越来越受欢迎。Hadoop的开发语言是Java,没有官方的Python支持,但是有很多封装了HadoopAPI接口的第三方库(pydoop、hadoopy等)。HadoopMapReduce的替代品是Spark,据说速度快100倍。它的开发语言是Scala,但是提供了Scala、Java、Python的开发接口。想要讨好那么多用Python开发的数据科学家,不支持Python实在是说不过去。.HDFS的替代品,如GlusterFS、Ceph等,直接提供Python支持。作为Yarn的替代品,Mesos是一种C++实现,除了C++之外还提供Java和Python支持包。DevOpsDevOps有个中文名字叫开发自运维。在互联网时代,只有能够在第一时间快速测试新想法,安全可靠地交付商业价值,才能保持竞争力。DevOps提倡的自动化构建/测试/部署、系统度量等技术实践在互联网时代不可或缺。自动化施工易于应用。对于Python应用,由于setuptools、pip、virtualenv、tox、flake8等工具的存在,自动化构建非常简单。而且,由于几乎所有的Linux系统都内置了Python解释器,因此使用Python进行自动化不需要在系统上预先安装任何软件。在自动化测试方面,基于Python的RobotFramework是企业级应用最喜欢的自动化测试框架,与语言无关。Cucumber也有很多支持者,Python的对应物Lettuce可以做完全相同的事情。Locust在自动化性能测试方面也开始受到越来越多的关注。自动配置管理工具,像Chef和Puppet这样的老工??具,都是用Ruby开发的,并且仍然很强大。然而,新一代的Ansible和SaltStack——都是用Python开发的——因为比前两者更轻巧的设计受到了越来越多的开发者的欢迎,它们开始对前辈造成很大的压力。在系统监控测量方面,传统的Nagios逐渐没落,Sensu等新贵备受好评,云服务形式的NewRelic成为创业公司的标配。这些不是直接通过Python实现的,但是Python需要访问这些工具,并不难。除了上述工具,Cloudify、Deis等提供完整DevOps功能的基于Python的PaaS平台虽然还没有流行起来,但已经受到了很多关注。网络爬虫大数据的数据从何而来?除了一些企业自身具备产生大量数据的能力外,大多数时候都需要依靠爬虫抓取互联网数据进行分析。网络爬虫是Python的传统强项。著名的爬虫框架Scrapy、HTTP工具包urlib2、HTML解析工具beautifulsoup、XML解析器lxml等,都是可以独立的类库。然而,网络爬虫不仅仅是打开网页和解析HTML。高效的爬虫必须能够支持大量灵活的并发操作,往往需要能够同时爬取数千甚至数万个网页。传统的线程池方式浪费了很多资源。几千个线程之后,系统资源基本都浪费在线程调度上了。因为Python可以很好地支持协程操作,所以基于此开发了很多并发库,比如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默认在命令行运行,在网页中可以执行ipythonnotebook运行。用matplotlib绘制的图形可以直接嵌入到iPythonNotebook中。iPythonNotebook的笔记本文件可以分享给其他人,让其他人在自己的环境中重现你的工作成果;如果对方没有运行环境,也可以直接转成HTML或PDF。为什么选择Python,正是因为应用开发工程师、运维工程师、数据科学家都喜欢Python,这使得Python成为大数据系统的全栈开发语言。对于开发工程师来说,Python的优雅和简洁无疑是最具吸引力的。在Python交互环境下,执行importthis,读一读Python之禅,你就会明白为什么Python如此吸引人。Python社区一直非常活跃。与NodeJS社区软件包的爆发式增长不同,Python软件包的增长速度一直比较稳定,软件包的质量也比较高。很多人批评Python对空格过于严格,但也正是因为这个要求,Python在做大型项目时比其他语言更有优势。总计超过200万行代码的OpenStack项目证明了这一点。对于运维工程师来说,Python最大的优势在于几乎所有的Linux发行版都内置了Python解释器。Shell虽然强大,但语法毕竟不够优雅,再写复杂一点的任务会很痛苦。使用Python代替Shell来完成一些复杂的工作,对于运维人员来说是一种解放。对于数据科学家来说,Python简单而强大。与C/C++相比,无需做大量底层工作,可以快速进行模型验证;与Java相比,Python语法简洁,表达能力强,同样的工作只需要1/3的代码;与Matlab和Octave相比,Python具有更高的工程成熟度。不止一位编程专家表示,Python是最适合大学计算机科学编程课程的语言——麻省理工学院的计算机入门课程就是Python——因为Python可以让人学会编程中最重要的东西——如何解决问题。顺便说一句,微软参加PyCon2015,高调宣布提升Python在Windows上的编程体验,包括VisualStudio对Python的支持,优化Python的C扩展在Windows上的编译等等。头脑风暴未来Python将成为Windows默认组件的场景。