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

2017-07-03 15:55:20 +08:00
 dropwater

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

4512 次点击
所在节点    Python
15 条回复
defunct9
2017-07-03 15:59:32 +08:00
自己写个
songjiaxin2008
2017-07-03 16:00:43 +08:00
这就是个 pipeline 吧 就跟换成 mongoDB 一个意思
1iuh
2017-07-03 16:04:54 +08:00
thrift
或者用 java 写个接口接收数据。
我之前也遇到过类似的问题, 至少我没有找到 python 直接连接 hdfs 的库。
dropwater
2017-07-03 16:19:05 +08:00
@defunct9 初学者,有点吃力。还是想找造好的轮子
@songjiaxin2008 这个能再详细指点一下吗?好像是没有现成的...
@1iuh 谢谢指点,我去试一试。python 直接连 hdfs 查到了一个 pyhdfs,不过也还没找到 scrapy 直接连的办法。
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
2017-07-03 16:28:25 +08:00
@dropwater #4 看了下这个 pyhdfs,只有 10 个 star 呀,你确定没坑?

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

你要是想找 scrapy-hdfs 这种库肯定是找不到的。我还是建议你用 java 直接写个接口。
liprais
2017-07-03 16:30:26 +08:00
不要直接写 hdfs,效率低到哭
搞个管道,爬完写到管道里,那边消费到 hdfs
defunct9
2017-07-03 16:37:31 +08:00
哎,地球这么大,给个可行方案吧。
建立个 kafka 队列,然后 python 写 kafka 的轮子必然是有了。
kafka 写 hdfs 那是顺理成章,这样就搞定了。
ym1ng
2017-07-03 16:39:52 +08:00
Mq 加 logstash 直接搞定,scrapy 的 pipeline 里面把数据打到 mq 里,logstash 的 input 是 mq,output 是 hdfs
est
2017-07-03 16:41:01 +08:00
@defunct9 这个是正解。 写 kafka
stcasshern
2017-07-03 16:46:35 +08:00
存在 hdfs,我理解的 hdfs 不是一个文件系统吗?? 数据难道不是存在各种数据库?要直接写的话,就是改 pipeline 吧。
defunct9
2017-07-03 16:56:00 +08:00
hdfs+hbase,这个路数。或者直接 kafka+spark,计算去了。
zhaob
2017-07-03 18:23:34 +08:00
Scrapy 爬取的数据存成日志
再加一个 Flume 把日志同步存储到 HDFS
timothyye
2017-07-03 19:17:38 +08:00
需要一个消息队列
knktc
2017-07-03 22:43:18 +08:00
直接写 flume 呗,flume 用个 http 的 source 和 hdfs 的 sink,不会增加什么开发量

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372700

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX