V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dropwater
V2EX  ›  Python

Scrapy 爬取数据直接存到 Hadoop 中有什么方法吗?

  •  
  •   dropwater · 2017-07-03 15:55:20 +08:00 · 4640 次点击
    这是一个创建于 2707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前都是存到本机 MySql 数据库,这一次需要存到远程的 Hadoop 服务器中,实现边爬边存,不落到本机,请问有什么方法吗?有什么插件可以实现 Scrapy 和 hdfs 的连接呢,还是说需要自己写一个?求大神解答

    15 条回复    2017-07-03 22:43:18 +08:00
    defunct9
        1
    defunct9  
       2017-07-03 15:59:32 +08:00
    自己写个
    songjiaxin2008
        2
    songjiaxin2008  
       2017-07-03 16:00:43 +08:00
    这就是个 pipeline 吧 就跟换成 mongoDB 一个意思
    1iuh
        3
    1iuh  
       2017-07-03 16:04:54 +08:00
    thrift
    或者用 java 写个接口接收数据。
    我之前也遇到过类似的问题, 至少我没有找到 python 直接连接 hdfs 的库。
    dropwater
        4
    dropwater  
    OP
       2017-07-03 16:19:05 +08:00
    @defunct9 初学者,有点吃力。还是想找造好的轮子
    @songjiaxin2008 这个能再详细指点一下吗?好像是没有现成的...
    @1iuh 谢谢指点,我去试一试。python 直接连 hdfs 查到了一个 pyhdfs,不过也还没找到 scrapy 直接连的办法。
    songjiaxin2008
        5
    songjiaxin2008  
       2017-07-03 16:27:22 +08:00
    https://doc.scrapy.org/en/latest/topics/item-pipeline.html 可以看'Write items to MongoDB' 或者 json 那一节,这边你要先和 hadoop 建立连接,然后自己实现‘ process_item ’这个方法。因为`scrapy`是解耦的,并不关心你的存储后端。
    1iuh
        6
    1iuh  
       2017-07-03 16:28:25 +08:00
    @dropwater #4 看了下这个 pyhdfs,只有 10 个 star 呀,你确定没坑?

    不过话说回来,只要这个 pyhdfs 可以工作,你就可以用呀。scrapy 接收到数据,然后调用这个库直接写入数据就行了。异步这块要处理一下,不然影响效率。

    你要是想找 scrapy-hdfs 这种库肯定是找不到的。我还是建议你用 java 直接写个接口。
    liprais
        7
    liprais  
       2017-07-03 16:30:26 +08:00 via iPhone
    不要直接写 hdfs,效率低到哭
    搞个管道,爬完写到管道里,那边消费到 hdfs
    defunct9
        8
    defunct9  
       2017-07-03 16:37:31 +08:00
    哎,地球这么大,给个可行方案吧。
    建立个 kafka 队列,然后 python 写 kafka 的轮子必然是有了。
    kafka 写 hdfs 那是顺理成章,这样就搞定了。
    ym1ng
        9
    ym1ng  
       2017-07-03 16:39:52 +08:00
    Mq 加 logstash 直接搞定,scrapy 的 pipeline 里面把数据打到 mq 里,logstash 的 input 是 mq,output 是 hdfs
    est
        10
    est  
       2017-07-03 16:41:01 +08:00
    @defunct9 这个是正解。 写 kafka
    stcasshern
        11
    stcasshern  
       2017-07-03 16:46:35 +08:00
    存在 hdfs,我理解的 hdfs 不是一个文件系统吗?? 数据难道不是存在各种数据库?要直接写的话,就是改 pipeline 吧。
    defunct9
        12
    defunct9  
       2017-07-03 16:56:00 +08:00
    hdfs+hbase,这个路数。或者直接 kafka+spark,计算去了。
    zhaob
        13
    zhaob  
       2017-07-03 18:23:34 +08:00
    Scrapy 爬取的数据存成日志
    再加一个 Flume 把日志同步存储到 HDFS
    timothyye
        14
    timothyye  
       2017-07-03 19:17:38 +08:00 via Android
    需要一个消息队列
    knktc
        15
    knktc  
       2017-07-03 22:43:18 +08:00
    直接写 flume 呗,flume 用个 http 的 source 和 hdfs 的 sink,不会增加什么开发量
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2789 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:47 · PVG 20:47 · LAX 04:47 · JFK 07:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.