关于流/小批量数据的 ETL 工具的选择 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Philippa
V2EX    lasticsearch

关于流/小批量数据的 ETL 工具的选择

  •  
  •   Philippa 2018-03-12 21:21:24 +08:00 5067 次点击
    这是一个创建于 2839 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近再捣鼓 ETL 用于处理分析数据,使用语言是 Python。关于 Pipeline 搭建工具的选择,发现有非常多,先是手动实现了最原始的,加上更新和各种额外开销,速度比较糟糕,1000 万数据需要 1 天多。处理完进入 Elasticsearch 完成。但最近开始说要实时处理数据了,这意味着原有的批处理方法不大合适了。因此打算改一下逻辑用最古老的 Celery,写了一段跑起来,感觉效果还行,不过直觉有极大的提升空间。因此又弄了个 spark 的 standalone 集群,配置有点麻烦,还没测试,不过感觉假如数据量小预测优化空间不大,主要是每个小任务其实总耗时并不长。然后现在又看到 airflow,也想玩一下看什么效果。

    不过玩之前还是来请教一下有经验人士比较好,有没有一个框架既没有 spark 那么重,又处理的实时流数据或小批量数据的?最好是配置简单,而且必须是 Python 有相关接口的,主要是考虑到团队协作因此不会考虑 Scala 等其他语言。来不及可以砍需求,但砍需求之前不知道各位有什么好建议。

    PS: 找不到 ETL 节点,不知道放在貌似很多类似群体的 Elasticsearch 节点是否合适?

    22 条回复    2018-03-15 03:44:17 +08:00
    Philippa
        1
    Philippa  
    OP
       2018-03-12 21:26:14 +08:00
    不过另外一方面其实还没做过性能测试,之前的简单手动测试瓶颈其实在于数据库的查询和太多的中间交换层了。另一方面性能开销大概会花在处理逻辑本身的时间。所以问题本身其实更倾向于找一个:漂亮、友好、迅速但又轻量级的实时 /小批量的 schedule 框架。
    Philippa
        2
    Philippa  
    OP
       2018-03-12 21:28:31 +08:00
    类似地还发现了类似 Luigi,可视化界面也是重要一部分(当然 airflow 也有)。因为开发过程中也会协同前端提供 API,因此有时候能够让前端看到后台的处理流程对前端也颇有帮助,自己也看得清晰。
    Philippa
        3
    Philippa  
    OP
       2018-03-12 21:33:33 +08:00
    对了,忘了说,也可以改上 lambda 服务,但简单看了并不具备性能优势( I am not so sure ),除了架构变了没什么大的区别。如果是一早设计就按这个设计貌似开发也更快,但现在貌似意义已经不大。
    ligyxy
        4
    ligyxy  
       2018-03-12 21:35:05 +08:00 via Android   1
    Luigi 和 Airflow 的前台界面也就聊胜于无
    Elasticsearch 的 painless 了解一下
    https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html
    Philippa
        5
    Philippa  
    OP
       2018-03-12 21:41:19 +08:00
    Sorry 可能问题有点模糊了。涉及的数据库包括 MongoDB,PG,Elasticsearch 提供搜索服务。还有背后的分析模型。
    Philippa
        6
    Philippa  
    OP
       2018-03-12 21:43:00 +08:00
    @ligyxy 谢谢,我回去用 painless 改改查询语句看看速度如何。
    limbo0
        7
    limbo0  
       2018-03-13 01:41:40 +08:00 via iPhone   1
    想推荐波 flink 了,但看到 lz 的需求感觉大材小用了,1000w 数据要一天多也太慢了,1 个 u 基本上可以上 1000/s 的速度,还是觉得 spark 比较适合,文档多点,有 python 接口,后期速度跟不上扩节点就行了
    Philippa
        8
    Philippa  
    OP
       2018-03-13 03:36:28 +08:00
    @limbo0 那个 flink 一搜看起来蛮有趣的,在公司闲得没事时增强试试看 2333。至于为什么这么慢,是因为用了各种数据库的 ORM 和各种设计友好的接口……
    laxenade
        9
    laxenade  
       2018-03-13 03:50:42 +08:00
    取决于你的 source 在哪,aws 的 kinesis 和 glue 了解一下,都支持 python(glue 好像只有 python)。
    ligyxy
        10
    ligyxy  
       2018-03-13 03:52:41 +08:00
    Painless 的调试是个痛,比较适合小型修改
    Spark 以前有 Spark-ec2,现在有 Databricks 或类似的云服务都能解决安装配置的问题,但是 Spark 的调优也不省事
    看楼主的问题应该先尝试优化你的 Python 脚本
    beginor
        11
    beginor  
       2018-03-13 08:11:06 +08:00 via Android
    没有人推荐 datax 么,准备入这个坑了,看起来不错的样子
    est
        12
    est  
       2018-03-13 08:22:12 +08:00 via Android
    如果你 py 脚本没有优化空间了上再多框架也是没用的。试试 pypy cython 了

    一般来说纯脚本性能是完爆框架的。框架一般都有序列化开销。框架的作用是并行化
    fireapp
        13
    fireapp  
       2018-03-13 08:49:37 +08:00 via Android
    直接使用 kafka 存储数据,然后 kafka stream 直接撸,需要全文检索的话就丢到 es, 如果只需要少数的聚合统计报表啥的,es 就不用了, 换成 drill 直接 sql 撸 kafka 数据,结果再存 kafka
    tonghuashuai
        14
    tonghuashuai  
       2018-03-13 10:41:37 +08:00
    具体没看懂 lz 什么需求,但是跟 ETL 相关的可以试试 kettle,貌似现在叫 PDI ( Pentaho Data Integration )
    https://community.hds.com/docs/DOC-1009855
    Philippa
        15
    Philippa  
    OP
       2018-03-13 22:43:03 +08:00
    @laxenade 其实在阿里云= =公司的,我应该叫“函数服务”而不是 lambda 以免引起误会。
    Philippa
        16
    Philippa  
    OP
       2018-03-13 22:43:44 +08:00
    @ligyxy 没得优化了,已经用 cProfile 可视化测过性能,小格子已经很均匀很细小了。
    Philippa
        17
    Philippa  
    OP
       2018-03-13 22:45:11 +08:00
    @ligyxy Spark 也有一个 standalone 的 dockerfile 写好了,下期试试
    Philippa
        18
    Philippa  
    OP
       2018-03-13 22:55:00 +08:00
    @beginor 收藏了,像个基本款 ETL 工具
    Philippa
        19
    Philippa  
    OP
       2018-03-13 23:08:07 +08:00
    @est 写过 PyPy3 的 dockerfile 跑过,肉眼测没明显区别,到时跑个性能看看,就是 PyPy3 貌似不推荐生产环境使用

    @fireapp 看起来很不错啊,至少官网的视频那个男的说得好起劲,好,又一个……

    @tonghuashuai 天,一进去发现 free trial 字样 = = 总之谢谢推荐,以后可以一个个慢慢来
    est
        20
    est  
       2018-03-14 09:32:19 +08:00
    @Philippa python 的 docker image 很多坑噢。稍不注意就 50%性能损失。
    tonghuashuai
        21
    tonghuashuai  
       2018-03-14 15:04:11 +08:00   1
    @Philippa 我用的时候 kettle 一直是免费开源的
    Philippa
        22
    Philippa  
    OP
       2018-03-15 03:44:17 +08:00
    @est Thanks, 找到这个了 https://superuser.com/questions/1219609/why-is-the-alpine-docker-image-over-50-slower-than-the-ubuntu-image,这真是个大问题。PyPy 暂且先用着官方的,Python 的还是换成 ubuntu 的,自带的 Python 镜像在应用扩展时也不好用。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1396 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:54 PVG 00:54 LAX 08:54 JFK 11:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86