精华内容
下载资源
问答
  • Django Web框架/Python框架

    千人学习 2018-08-16 11:21:16
    Python下有许多款不同的Web框架,Django是重量级选手中最有代表性的一位,许多成功的网站和APP都基于Django,Django是一个开放源代码的Web应用框架,Django网站开发,Django遵守BSD版权,初次发布于2005年7月, 并于...
  • Python框架浅谈

    千次阅读 2018-07-22 09:32:18
    时至今日,发展到尽头的Python的Web Framework 可谓是百花齐放,各种micro-framework、framework数不胜数。  python这么多的框架,能全都玩一边,熟知的人不多... Django可以说是Python框架中势力最大的一个,他...

           时至今日,发展到尽头的Python的Web Framework 可谓是百花齐放,各种micro-framework、framework数不胜数。

           python这么多的框架,能全都玩一边,熟知的人不多,下面我就我知道的一些相关知识,做一个简单的总结和浅谈。

           一、Django

     

          Django可以说是Python框架中势力最大的一个,他的文档完善、市场占有率最高、招聘的职位也是最多。他的有别于其他框架的地方有:

           1、全套的解决方案:Django像Rails一样,提供全套的解决方案(full-stack framework+batteries included),基本要什么有什么(cache,session、feed、orm、geo、auth),这些全部都是django自己造,开发网站必备的工具Django基本都有,因此开发效率高,除了各种问题也有地可寻。

           2、强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里你基本客户跟丑陋的GET sey bye bye。

           3、自助管理后台,admin interface 是Django里比较吸引眼球的一项contrib(捐助、捐献),几乎不用写代码就拥有一个完整的后台管理界面。

          但没有十全十美的框架,Django坚持自己造的所有的轮子,整个系统相对封闭。而且:

           1、系统紧耦合,如果在使用过程中,觉得自带的内置功能不好用,想用第三方库来扩展是很困难的。比如要用SQLAlchemy或者Mako替换掉ORM、Template几乎是不可能的。Django自带的ORM远不如SQLAlchemy强大,SQLAlchemy是Python世界中的ORM标准,其他框架都支持SQLAlchemy了,唯独Django仍然坚持;Template 功能比较弱,不能插入Python代码,如要写复杂一点的逻辑需要另外用Python实现Tag或者Filter。

          2、URL配置虽然强大,但要全部手写,这点跟Rails的Convention over configuration 的理念完全相左,高手和初识Django的人配出来的URL会有很大差异。

          3、Python 文件做配置文件,而不是更常见的ini、xml、yaml等形式,这本身不是什么问题,可是因为理论上来说settings的值是动态的改变的,所以不是最佳体现。

          4、总的来说,Django大包大揽,用来快速开发以希望Web项目是不错的,但如果你用习惯了Django,你会越用月习惯。但如果不能接收Django的设计哲学,用起来只是徒增痛苦。

           二、Pylons

         Python框架的另一巨头就是Pylons了(TurboGears2.x是基于Pylons做的,而repoze.bfg也并入了Pylons project 里面)。

         Pylons的设计理念和Django完全不同,Pylons本身只有两千行左右的Python的代码,不过他附带一些几乎就是pylons御用的第三方模块。Pylons只是提供一个架子和可选方案,用户可以根据自己的喜好选择Template、ORM、form、auth等组件,系统高度可定制。可以说pylons就是用胶水语言(glue language)设计的胶水框架了。

         如果觉得pylons很完美了,如果选择了pylons,那么噩梦也就随之而至了。

         噩梦一:学习

         Pylons依赖于许多第三方库,他们并不是Pylons所造,学习Pylons的同时还要学习这些库的使用。所以说Pylons 的学习曲线要比Django高的多,而且Pylons的官方文档也一直是人们批评的对象(好在出了The Definitive Guide toPylons )。

         Pylons一度被誉为只适合高手使用的Python框架。

         噩梦二:调试

         不出错误万事大吉,一旦出了错误,因为涉及到了第三方模块太多,所以很难定位到是哪里出了问题,只有用的很熟才能解决此类问题。

         噩梦三:升级

         安装Pylons需要安装近20几个模块,各有各的版本号。要升级Pylons的版本,哪个模块出了不兼容的问题都有可能,导致升级很难。

        Pylons和repoze.bfg 的融合可能会催生下一个能挑战Django地位的框架。

           三、Tornado

         Tornado 即是一个 Web server ,同时又是一个类Web,py 的micro-framework,作为框架Tornado的思想来源于Web.py

    。Web.py 的设计临力求精简keep it simple and poweful,总共没有多少代码,也想Pylons那样依赖大量的第三方模块,而是提供一个框架所必须的一些东西,如:URL路由、Template、数据库访问。

        一个框架精简的好处是你可以聚焦在业务逻辑上,而不是用太多精力放在框架本身,但缺点也很明显,许多事情还要亲自操刀。

           四、Flask & Bottle

         作为新生代Python框架的代表,两个框架都采用了decoretor的方式配置URL路由。

         两者和web.py一样,都非常精简,另外Flask和Pylons一样,可以和jinja2、SQLAlchemy之类很好的结合。

        Quixote 豆瓣使用开发框架

    展开全文
  • 目前比较主流的Python框架都有哪些呢?一般大家用的比较多的是Django、Flask、Scrapy、Diesel、Cubes、Pulsar和Tornado。那么这些Python框架的区别是什么呢?下面我们一起来看看这些Python框架的不同适用环境。 .

    前言

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    Python框架区别是什么?比较常用的框架有哪些?

     

    众所周知,Python开发框架大大减少了开发者不必要的重复劳动,提高了项目开发效率的同时,还使得创建的程序更加稳定。目前比较主流的Python框架都有哪些呢?一般大家用的比较多的是Django、Flask、Scrapy、Diesel、Cubes、Pulsar和Tornado。那么这些Python框架的区别是什么呢?下面我们一起来看看这些Python框架的不同适用环境。

    欢迎点击左上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。

    1、Django

    谈到Python框架,我们第一个想到的应该就是Django。Django作为一个Python Web应用开发框架,可以说是一个被广泛使用的全能型框架。Django的目的是为了让开发者能够快速地开发一个网站,因此它提供了很多模块。另外,Django最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。它与其他框架最大的区别就是,鲜明独特的特性,支持orm,将数据库的操作封装成为Python,对于需要适用多种数据库的应用来说是个比较好的特性。

    2、Flask

    相信大家都知道Flask是一个用Python编写的轻量级Web应用框架。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。基于他的这个特性使用者可以花很少的成本就能够开发一个简单的网站。因此,从这个角度来讲,Flask框架非常适合初学者学习。Flask框架学会以后,我们还可以考虑学习插件的使用。

    3、Scrapy

    Python的爬虫框架 现在Python爬虫技术被看做是职场人的加分技能,因此掌握Scrapy还是十分有必要的。Scrapy是一个轻量级的使用Python编写的网络爬虫框架,这也是它与其他Python框架最大的区别。因为专门用于爬取网站和获取结构数据且使用起来非常的方便,Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试等等。

     4、Diesel

    Diesel是基于Greenlet的事件I/O框架,它提供一个整洁的API来编写网络客户端和服务器。它与其他Python框架最大的区别是支持TCP和UDP。

    5、Cubes

    Cubes作为一个轻量级Python OLAP框架,包含了OLAP、多维数据分析和浏览聚合数据(aggregated data)等工具。

    6、Pulsar

    Pulsar是Python的事件驱动并发框架。有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。

    7、Tornado

    Tornado全称是Torado Web Server,仅仅从它的名字上我们就可以知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。Tornado和现在的主流 Web 服务器框架和大多数Python框架有着明显的区别,它是非阻塞式服务器,而且速度相当快。而其他框架不支持异步处理。它也是比较常被使用的Python开源框架之一。当框架能够提供的功能占比越来越小,需要实现更多的内容的时候,Tornado就是比较好的选择了。

    总结一下,Python框架之间的区别还是很大的,如果是入门建议选择Flask,而重量级框架首选Django。至于其他的框架都很好用,主要看大家的应用场景对Python框架有哪些具体的要求。

    展开全文
  • Python学习路线图的Python框架部分有Django框架和Flask框架,学完这部分Python框架就可以去找Web全栈工程师工作,独立开发前端和后端业务。Python学习路线图的Django框架部分需要掌握Web主流框架-Django的使用;可...

    Python学习路线图的Python框架部分有Django框架和Flask框架,学完这部分Python框架就可以去找Web全栈工程师工作,独立开发前端和后端业务。Python学习路线图的Django框架部分需要掌握Web主流框架-Django的使用;可根据Web框架设计,开发对应的数据库;可根据业务流程图,开发Web网站的前后台业务。

    黑马程序员Python学习路线图的Flask框架部分需要掌握Web主流框架-Flask的使用;掌握常见的性能优化技术;缓存服务器的操作和设计;异步任务的实现。

    黑马程序员  Python框架与项目技术要点

    Django框架

    Git源代码管理
    Redis缓存
    VUE介绍
    Vue基本语法
    ES6语法
    VUE 生命周期
    Django框架介绍
    Django模型
    ORM及数据库操作
    视图及模板
    Django中间件

    项目部署

    Docker 进阶
    uWSGI
    Nginx进阶
    性能优化

    Flask框架

    Flask框架
    路由定义及视图函数
    蓝图
    SQLAlchemy

    黑马头条项目

    Flask-RESTful
    手机 APP + PC Web前端
    MySQL业务数据存储
    Redis缓存层
    第三方对象存储
    RabbitMQ + Celery 异步任务
    APSchedule定时任务
    socket.io及时通讯
    Elasticsearch 5.6 搜索+自动补全
    RPC+kafka对接推荐系统与AI系统
    supervisor进程管理

    展开全文
  • Python框架Djanggo从入门到实战教程 Django是一个高级Python Web框架, 鼓励快速,简洁, 以程序设计的思想进行开发. 通过使用这个框架, 可以减少很多开发麻烦, 使你更专注于编写自己的app, 而不需要重复造轮子. Django...
  • Hadoop的Python框架指南

    千次阅读 2013-03-12 13:29:23
    转载,原文地址: ...Hadoop的Python框架指南 最近,我加入了Cloudera,在这之前,我在计算生物学/基因组学上已经工作了差不多10年。我的分析工作主要是利用Python语言和它很棒的科学计算栈来进行的。但Apache

     转载,原文地址:

    http://www.oschina.net/translate/a-guide-to-python-frameworks-for-hadoop

    Hadoop的Python框架指南

    最近,我加入了Cloudera,在这之前,我在计算生物学/基因组学上已经工作了差不多10年。我的分析工作主要是利用Python语言和它很棒的科学计算栈来进行的。但ApacheHadoop的生态系统大部分都是用Java来实现的,也是为Java准备的,这让我很恼火。所以,我的头等大事变成了寻找一些Python可以用的Hadoop框架。

    在这篇文章里,我会把我个人对这些框架的一些无关科学的看法写下来,这些框架包括:

    ·        Hadoop流

    ·        mrjob

    ·        dumbo

    ·        hadoopy

    ·        pydoop

    ·        其它

    最终,在我的看来,Hadoop的数据流(streaming)是最快也是最透明的选项,而且最适合于文本处理。mrjob最适合于在Amazon EMR上快速工作,但是会有显著的性能损失。dumbo 对于大多数复杂的工作都很方便(对象作为键名(key)),但是仍然比数据流(streaming)要慢。

    请继续往下阅读,以了解实现细节,性能以及功能的比较。

    一个有趣的问题

    为了测试不同的框架,我们不会做“统计词数”的实验,转而去转化谷歌图书N-元数据。 N-元代表一个n个词构成的元组。这个n-元数据集提供了谷歌图书文集中以年份分组的所有1-,2-,3-,4-,5-元记录的统计数目。 在这个n-元数据集中的每行记录都由三个域构成:n-元,年份,观测次数。(您能够在http://books.google.com/ngrams取得数据)。

    我们希望去汇总数据以观测统计任何一对相互临近的词组合所出现的次数,并以年份分组。实验结果将使我们能够判断出是否有词组合在某一年中比正常情况出现的更为频繁。如果统计时,有两个词在四个词的距离内出现过,那么我们定义两个词是“临近”的。或等价地,如果两个词在2-,3-或者5-元记录中出现过,那么我们也定义它们是”临近“的。 一次,实验的最终产物会包含一个2-元记录,年份和统计次数。

     

    有一个微妙的地方必须强调。n-元数据集中每个数据的值都是通过整个谷歌图书语料库来计算的。从原理上来说,给定一个5-元数据集,我可以通过简单地聚合正确的n-元来计算出4-元、3-元和2-元数据集。例如,当5-元数据集包含

    1

    (the, cat, in, the, hat)       1999     20

    2

    (the, cat, is, on, youtube)    1999     13

     

    3

    (how, are, you, doing, today)  1986   5000

    时,我们可以将它聚合为2-元数据集以得出如下记录

    1

    (the, cat)  1999    33      // 也就是, 20 + 13

    然而,实际应用中,只有在整个语料库中出现了40次以上的n元组才会被统计进来。所以,如果某个5元组达不到40次的阈值,那么Google也提供组成这个5元组的2元组数据,这其中有一些或许能够达到阈值。出于这个原因,我们用相邻词的二元数据,隔一个词的三元组,隔两个词的四元组,以此类推。换句话说,与给定二元组相比,三元组多的只是最外层的词。除了对可能的稀疏n元数据更敏感,只用n元组最外层的词还有助于避免重复计算。总的来说,我们将在2元、3元、4元和5元数据集上进行计算。

     

    MapReduce的伪代码来实现这个解决方案类似这样:

    1

    def map(record):

    2

        (ngram, year, count) = unpack(record)

     

    3

        // 确保word1为字典第一个字

    4

        (word1, word2) = sorted(ngram[first], ngram[last])

     

    5

        key = (word1, word2, year)

    6

        emit(key, count)

     

    7

     

    8

    def reduce(key, values):

     

    9

        emit(key, sum(values))

     

     

    硬件

    这些MapReduce组件在一个大约20GB的随机数据子集上执行。完整的数据集涵盖1500个文件;我们用这个脚本选取一个随机子集。文件名保持完整,这一点相当重要,因为文件名确定了数据块的n-元中n的值。

    Hadoop集群包含5个使用CentOS 6.2 x64的虚拟节点,每个都有4个CPU,10GB RAM,100GB硬盘容量,并且运行CDH4。集群每次能够执行20个并行运算,每个组件能够执行10个减速器。

    集群上运行的软件版本如下:

    ·        Hadoop:2.0.0-cdh4.1.2

    ·        Python:2.6.6

    ·        mrjob:0.4-dev

    ·        dumbo:0.21.36

    ·        hadoopy:0.6.0

    ·        pydoop:0.7(PyPI)库中包含最新版本

    ·        java:1.6

     

    实现

    大多数Python框架都封装了 Hadoop Streaming,还有一些封装了 Hadoop Pipes,也有些是基于自己的实现。下面我会分享一些我使用各种Python工具来写Hadoop jobs的经验,并会附上一份性能和特点的比较。我比较感兴趣的特点是易于上手和运行,我不会去优化某个单独的软件的性能。

    在处理每一个数据集的时候,都会有一些损坏的记录。对于每一条记录,我们要检查是否有错并识别错误的种类,包括缺少字段以及错误的N元大小。对于后一种情况,我们必须知道记录所在的文件名以便确定该有的N元大小。

    所有代码可以从 GitHub 获得。

    HadoopStreaming

    Hadoop Streaming 提供了使用其他可执行程序来作为Hadoop的mapper或者reduce的方式,包括标准Unix工具和Python脚本。这个程序必须使用规定的语义从标准输入读取数据,然后将结果输出到标准输出。直接使用Streaming 的一个缺点是当reduce的输入是按key分组的时候,仍然是一行行迭代的,必须由用户来辨识key与key之间的界限。

    下面是mapper的代码:

    01

    #! /usr/bin/env python

    02

     

     

    03

    import os

    04

    import re

     

    05

    import sys

    06

     

     

    07

    # determine value of n in the current block of ngrams by parsing the filename

    08

    input_file = os.environ['map_input_file']

     

    09

    expected_tokens = int(re.findall(r'([\d]+)gram', os.path.basename(input_file))[0])

    10

     

     

    11

    for line in sys.stdin:

    12

        data = line.split('\t')

     

    13

     

    14

        # perform some error checking

     

    15

        if len(data) < 3:

    16

            continue

     

    17

     

    18

        # unpack data

     

    19

        ngram = data[0].split()

    20

        year = data[1]

     

    21

        count = data[2]

    22

     

     

    23

        # more error checking

    24

        if len(ngram) != expected_tokens:

     

    25

            continue

    26

     

     

    27

        # build key and emit

    28

        pair = sorted([ngram[0], ngram[expected_tokens - 1]])

     

    29

        print >>sys.stdout, "%s\t%s\t%s\t%s" % (pair[0], pair[1], year, count)

    下面是reducer:

    01

    #! /usr/bin/env python

    02

     

     

    03

    import sys

    04

     

     

    05

    total = 0

    06

    prev_key = False

     

    07

    for line in sys.stdin:

    08

        data = line.split('\t')

     

    09

        curr_key = '\t'.join(data[:3])

    10

        count = int(data[3])

     

    11

     

    12

        # found a boundary; emit current sum

     

    13

        if prev_key and curr_key != prev_key:

    14

            print >>sys.stdout, "%s\t%i" % (prev_key, total)

     

    15

            prev_key = curr_key

    16

            total = count

     

    17

        # same key; accumulate sum

    18

        else:

     

    19

            prev_key = curr_key

    20

            total += count

     

    21

     

    22

    # emit last key

     

    23

    if prev_key:

    24

        print >>sys.stdout, "%s\t%i" % (prev_key, total)

    Hadoop流(Streaming)默认用一个tab字符分割健(key)和值(value)。因为我们也用tab字符分割了各个域(field),所以我们必须通过传递给Hadoop下面三个选项来告诉它我们数据的健(key)由前三个域构成。

    1

    -jobconf stream.num.map.output.key.fields=3

    2

    -jobconf stream.num.reduce.output.key.fields=3

    要执行Hadoop任务命令

    01

    hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.0.0-mr1-cdh4.1.2.jar \

    02

            -input /ngrams \

     

    03

            -output /output-streaming \

    04

            -mapper mapper.py \

     

    05

            -combiner reducer.py \

    06

            -reducer reducer.py \

     

    07

            -jobconf stream.num.map.output.key.fields=3 \

    08

            -jobconf stream.num.reduce.output.key.fields=3 \

     

    09

            -jobconf mapred.reduce.tasks=10 \

    10

            -file mapper.py \

     

    11

            -file reducer.py

    注意,mapper.py和reducer.py在命令中出现了两次,第一次是告诉Hadoop要执行着两个文件,第二次是告诉Hadoop把这两个文件分发给集群的所有节点。

    Hadoop Streaming 的底层机制很简单清晰。与此相反,Python以一种不透明的方式执行他们自己的序列化/反序列化,而这要消耗更多的资源。 而且,如果Hadoop软件已经存在,Streaming就能运行,而不需要再在上面配置其他的软件。更不用说还能传递Unix 命令或者Java类名称作 mappers/reducers了。

    Streaming缺点是必须要手工操作。用户必须自己决定如何将对象转化为为成键值对(比如JSON 对象)。对于二进制数据的支持也不好。而且如上面说过的,必须在reducer手工监控key的边界,这很容易出错。

    mrjob

    mrjob是一个开放源码的Python框架,封装Hadoop的数据流,并积极开发Yelp的。,由于Yelp的运作完全在亚马逊网络服务,mrjob的整合与EMR是令人难以置信的光滑和容易(使用 boto包)。

    mrjob提供了一个Python的API与Hadoop的数据流,并允许用户使用任何对象作为键和映射器。默认情况下,这些对象被序列化为JSON对象的内部,但也有支持pickle的对象。有没有其他的二进制I / O格式的开箱即用,但有一个机制来实现自定义序列化。

    值得注意的是,mrjob似乎发展的非常快,并有很好的文档。

    所有的Python框架,看起来像伪代码实现:

    01

    #! /usr/bin/env python

    02

     

     

    03

    import os

    04

    import re

     

    05

     

    06

    from mrjob.job import MRJob

     

    07

    from mrjob.protocol import RawProtocol, ReprProtocol

    08

     

     

    09

    class NgramNeighbors(MRJob):

    10

     

     

    11

        # mrjob allows you to specify input/intermediate/output serialization

    12

        # default output protocol is JSON; here we set it to text

     

    13

        OUTPUT_PROTOCOL = RawProtocol

    14

     

     

    15

        def mapper_init(self):

    16

            # determine value of n in the current block of ngrams by parsing filename

     

    17

            input_file = os.environ['map_input_file']

    18

            self.expected_tokens = int(re.findall(r'([\d]+)gram', os.path.basename(input_file))[0])

     

    19

     

    20

        def mapper(self, key, line):

     

    21

            data = line.split('\t')

    22

     

     

    23

            # error checking

    24

            if len(data) < 3:

     

    25

                return

    26

     

     

    27

            # unpack data

    28

            ngram = data[0].split()

     

    29

            year = data[1]

    30

            count = int(data[2])

     

    31

     

    32

            # more error checking

     

    33

            if len(ngram) != self.expected_tokens:

    34

                return

     

    35

     

    36

            # generate key

     

    37

            pair = sorted([ngram[0], ngram[self.expected_tokens - 1]])

    38

            k = pair + [year]

     

    39

     

    40

            # note that the key is an object (a list in this case)

     

    41

            # that mrjob will serialize as JSON text

    42

            yield (k, count)

     

    43

     

    44

        def combiner(self, key, counts):

     

    45

            # the combiner must be separate from the reducer because the input

    46

            # and output must both be JSON

     

    47

            yield (key, sum(counts))

    48

     

     

    49

        def reducer(self, key, counts):

    50

            # the final output is encoded as text

     

    51

            yield "%s\t%s\t%s" % tuple(key), str(sum(counts))

    52

     

     

    53

    if __name__ == '__main__':

    54

        # sets up a runner, based on command line options

     

    55

        NgramNeighbors.run()

     

     mrjob只需要安装在客户机上,其中在作业的时候提交。下面是要运行的命令:

     

    export HADOOP_HOME="/usr/lib/hadoop-0.20-mapreduce"
    ./ngrams.py -r hadoop --hadoop-bin /usr/bin/hadoop --jobconf mapred.reduce.tasks=10 -o hdfs:///output-mrjob hdfs:///ngrams

    编写MapReduce的工作是非常直观和简单的。然而,有一个重大的内部序列化计划所产生的成本。最有可能的二进制计划将需要实现的用户(例如,为了支持typedbytes)。也有一些内置的实用程序日志文件的解析。最后,mrjob允许用户写多步骤的MapReduce的工作流程,在那里从一个MapReduce作业的中间输出被自动用作输入到另一个MapReduce工作。

    (注:其余的实现都非常相似,除了包具体的实现,他们都能被找到 here.。)

    dumbo

    dumbo 是另外一个使用Hadoop流包装的框架。dumbo出现的较早,本应该被许多人使用,但由于缺少文档,造成开发困难。这也是不如mcjob的一点。

    dumbo通过typedbytes执行序列化,能允许更简洁的数据传输,也可以更自然的通过指定JavaInputFormat读取SequenceFiles或者其他格式的文件,比如,dumbo也可以执行Python的egg和Java的JAR文件。

    在我的印象中, 我必须要手动安装dumbo中的每一个节点, 它只有在typedbytes和dumbo以eggs形式创建的时候才能运行。 就像他会因为onMemoryErrors终止一样,他也会因为使用组合器停止。

    运行dumbo任务的代码是:

    dumbo start ngrams.py \
            -hadoop /usr \
            -hadooplib /usr/lib/hadoop-0.20-mapreduce/contrib/streaming \
            -numreducetasks 10 \
            -input hdfs:///ngrams \
            -output hdfs:///output-dumbo \
            -outputformat text \
            -inputformat text

    hadoopy

    hadoopy 是另外一个兼容dumbo的Streaming封装。同样,它也使用typedbytes序列化数据,并直接把 typedbytes 数据写到HDFS。

    它有一个很棒的调试机制, 在这种机制下它可以直接把消息写到标准输出而不会干扰Streaming过程。它和dumbo很相似,但文档要好得多。文档中还提供了与 Apache HBase整合的内容。

    用hadoopy的时候有两种发发来启动jobs:

    1.  launch 需要每个节点都已经安装了Python/hadoopy ,但是在这之后的负载就小了。

    2.  launch_frozen 不要求节点上已经安装了Python,它会在运行的时候安装,但这会带来15秒左右的额外时间消耗(据说通过某些优化和缓存技巧能够缩短这个时间)。

    必须在Python程序中启动hadoopy job,它没有内置的命令行工具。

    我写了一个脚本通过launch_frozen的方式启动hadoopy

    python launch_hadoopy.py

    用launch_frozen运行之后,我在每个节点上都安装了hadoopy然后用launch方法又运行了一遍,性能明显好得多。

    pydoop

    与其他框架相比,pydoop 封装了Hadoop的管道(Pipes),这是Hadoop的C++ API。 正因为此,该项目声称他们能够提供更加丰富的Hadoop和HDFS接口,以及一样好的性能。我没有验证这个。但是,有一个好处是可以用Python实现一个Partitioner,RecordReader以及RecordWriter。所有的输入输出都必须是字符串。

    最重要的是,我不能成功的从PIP或者源代码构建pydoop。

    其他

    ·        happy 是一个用Jython来写Hadoop job的框架,但是似乎已经挂了

    ·        Disco 成熟的,非Hadoop 的 MapReduce.实现,它的核心使用Erlang写的,提供了Python的API,它由诺基亚开发,不如Hadoop应用广泛。

    ·        octopy 是一个纯Python的MapReduce实现,它只有一个源文件,并不适于“真正的”计算。

    ·        Mortar是另一个Python选择,它不久前才发布,用户可以通过一个网页应用提交Apache Pig 或者 Python jobs 处理放置在 Amazon S3上的数据。

    ·        有一些更高层次的Hadoop生态体系中的接口,像 Apache Hive和Pig。Pig 可以让用户用Python来写自定义的功能,是通过Jython来运行。 Hive 也有一个Python封装叫做hipy

    ·        (Added Jan. 7 2013) Luigi 是一个用于管理多步作业流程的Python框架。它与Apache Oozie 有一点相似,但是它内置封装了Hadoop Streaming(轻量级的封装)。Luigi有一个非常好的功能是能够在job出错的时候抛出Python代码的错误堆栈,而且它的命令行界面也非常棒。它的README文件内容很多,但是却缺少详尽的参考文档。Luigi 由Spotify 开发并在其内部广泛使用。

    本地java

    最后,我使用新的Hadoop Java API接口实施了MR任务,编译完成后,这样来运行它:

    1

    hadoop jar /root/ngrams/native/target/NgramsComparison-0.0.1-SNAPSHOT.jar NgramsDriver hdfs:///ngrams hdfs:///output-native

    关于计数器的特别说明

    在我的MR jobs的最初实现里,我用计数器来跟踪监控不良记录。在Streaming里,需要把信息写到stderr。事实证明这会带来不容忽视的额外开销:Streaming job花的时间是原生java job的3.4倍。这个框架同样有此问题。

     

    性能比较

    将用Java实现的MapReduce job作为性能基准。 Python框架的值是其相对于Java的性能指标的比率。

    Java明显最快,,Streaming要多花一半时间,Python框架花的时间更多。从mrjob mapper的profile数据来看,它在序列化/反序列化上花费了大量时间。dumbo和hadoopy在这方面要好一点。如果用了combiner 的话dumbo 还可以更快。

    特点比较

    大多来自各自软件包中的文档以及代码库。

    结论

    Streaming是最快的Python方案,这面面没有任何魔力。但是在用它来实现reduce逻辑的时候,以及有很多复杂对象的时候要特别小心。

    所有的Python框架看起来都像是伪码,这非常棒。

    mrjob更新快,成熟的易用,用它来组织多步MapReduce的工作流很容易,还可以方便地使用复杂对象。它还可以无缝使用EMR。但是它也是执行速度最慢的。

     

    还有一些不是很流行的 Python 框架,他们的主要优势是内置了对于二进制格式的支持,但如果有必要话,这个完全可以由用户代码来自己实现。

    就目前来看:

    ·        Hadoop Streaming是一般情况下的最佳选择,只要在使用reducer的时候多加小心,它还是很简单易用的。

    ·        从计算开销方面考虑的话,选择mrjob,因为它与AmazonEMR结合最好。

    ·        如果应用比较复杂,包含了复合键,要组合多步流程,dumbo 最合适。它比Streaming慢,但是比mrjob快。

    如果你在实践中有自己的认识,或是发现本文有错误,请在回复里提出。

    本文地址:http://www.oschina.net/translate/a-guide-to-python-frameworks-for-hadoop

    原文地址:http://blog.cloudera.com/blog/2013/01/a-guide-to-python-frameworks-for-hadoop/?utm_source=Python+Weekly+Newsletter&utm_campaign=ff66d8b9c7-Python_W...

    本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
    我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们

     

     

    展开全文
  • Java框架SpringBoot与Python框架Flask对比

    千次阅读 2020-09-29 11:40:14
    背景: LStack平台多租系统采用的是...Python 声明变量 显式声明变量名 不需要声明变量 类库 较丰富 丰富 动静态 静态型 动态型 可读性 良好 良好 性能 编译型+解释型。相对较快,预编译完由虚拟机
  • python框架Django部署windows

    千次阅读 2019-06-27 15:51:16
    如果你还未安装Python环境需要先下载Python安装包。 1、Python 下载地址:https://www.python.org/downloads/ 2、Django 下载地址:https://www.djangoproject.com/download/ 注意:目前 Django 1.6.x 以上版本已经...
  • Python框架——Tornado

    2014-08-30 11:38:02
    Python很多框架 有个链接
  • Flask是一个使用 Python 编写的轻量级 Web 应用框架,由于丰富的第三方资源组件,受到了很大的青睐,3天就能搭建一个功能齐全的网站,Flask不但是个人网站的佳选择,也在很多复杂的企业级网站中使用,应越广泛。...
  • python框架Django基础介绍

    千次阅读 2017-03-14 18:29:32
    最近在学习python和web框架的一些知识,加上这两天写博客有点来瘾,ok,再做个笔记吧。 目前我在北京的一家培训公司实习,学校安排,毕竟还是个渣滓,难免有不足之处恳请指正。下面介绍一下我关于Django的认识。 ...
  • 5个顶级异步Python框架

    千次阅读 2020-01-03 16:17:16
    Python在3.4引入了 asyncio 库,3.6新增了关键字 async和await,此后,异步框架迅速发展了起来,性能上能和Node.js比肩,除非是CPU密集型任务,否则没有理...
  • Python框架Django:render()函数

    万次阅读 2018-09-07 11:45:25
    必选参数: request: 用于生成此响应的请求对象。 template_name: 要使用的模板的全名或模板名称的序列。如果给定一个序列,则将使用存在的第一个模板。有关如何查找模板的更多信息,请参见template loading ...
  • 由于简单的学习曲线、越来越快的应用程序以及机器学习辅助功能等附加优势,Python已经成了IT行业的流行词… 由于简单的学习曲线、越来越快的应用程序以及机器学习辅助功能等附加优势,Python已经成了IT行业的流行词...
  • python框架Django管理后台Xadmin设置

    千次阅读 2018-04-16 20:05:17
    python 下面的框架比较多,感兴趣的可以了解下,今天我给大家带来,python django 下用Xadmin来管理django的强大后台!python安装方法,请移步!如何将django模块注册到xadmin后台如何重新定义xadmin 样式css,font...
  • selenium python框架之Browser_engine 写法

    千次阅读 2019-10-22 17:42:03
    # -*- coding:utf-8 -*- # @Time : 2019-10-17 # @Author : carl_dj import os.path from configparser import ConfigParser from selenium import webdriver from UISelenium_python_autoFramewrok.utils.log ...
  • 环境:Python 3.5    Django 2.2.1 1.创建独立app 建议独立app的好处是功能模块化,后期更易维护 创建app 在项目配置文件中添加app名称 2.创建模型models 构建User表 class User(mo...
  • 由于简单的学习曲线、越来越快的应用程序以及机器学习辅助功能等附加优势,Python已经成了IT行业的流行词… 由于简单的学习曲线、越来越快的应用程序以及机器学习辅助功能等附加优势,Python已经成了IT行业的流行词...
  • Python框架下django 的并发和多线程

    万次阅读 2018-09-18 17:59:12
    django本身框架下只有一个线程在处理请求,任何一个请求阻塞,就会影响另一个情感求的响应,尤其是涉及到IO操作时,基于框架下开发的视图的响应并没有对应的开启多线程,再者Python的多线程对于多核CPU有效利用率...
  • selenium python框架之获取email的参数

    千次阅读 2019-10-25 09:41:14
    # -*- coding:utf-8 -*- # @Time : 2019-10-21 # @Author : carl-dj import os import yaml class GetEmailParameter(object): def __init__(self): cur_path = os.path.dirname(os.path.dirname(o...
  • Python是一种面向对象、解释型计算机程序设计语言。除了语言本身的设计目的之外,Python的标准库也是值得...在这篇文章里,小编将为Web开发人员介绍基于Python的10大Web应用框架。 1. Flask Flask是一个使用Pyth
  • Mac OS安装Python框架Scrapy全过程

    万次阅读 2017-02-16 15:33:35
    摘要:本文记录了作者在Mac OS 10.12 Sirrea版本下,安装Python爬虫框架Scrapy的全过程 以下步骤请全程开启VPN。否则默认大量官方源可能会被我大天朝的长城K.O.掉,从而出现403 forbidden. ^^ ①安装homebrew。...
  • mac 卸载 python 框架 django

    千次阅读 2013-01-09 00:09:36
    python import sys; sys.path = sys.path[1:]; import django; print(django.__path__) 可以得到 django 安装目录 ['/Library/Python/2.7/site-packages/django'] 然后删除 django 目录即可 然后重新安装
  • 对比Tornado和Twisted两种异步Python框架

    千次阅读 2017-08-27 00:12:48
    Python的人,一定知道两个性能优秀的异步网络框架:tornado,和twisted。 那么,这两个著名的框架,又有什么异同呢?tornado和twisted,我都用在几个游戏项目中,做过后端,觉得它俩其实大同小异。今天花一些...
  • 10个用于Web开发的最好 Python 框架

    万次阅读 2017-09-06 09:17:10
    Python 是一门动态、面向对象语言。...除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还自带服务器。其它方面,Python拥有足够多的免费数据函数库、免费的Web网页模板系统、还有
  • python框架Django中的MTV架构

    千次阅读 2018-05-23 17:28:47
    MTV概述 ​ 通过V对M和T进行连接,用户通过T(界面)对服务器进行访问(发送请求),T把请求传给V(调度),V调用M(数据模型)对模板进行渲染,然后再把渲染后的模板返回给T,T再把渲染后的界面返回给用户。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,605
精华内容 35,042
关键字:

python框架

python 订阅