之前都是存到本机 MySql 数据库,这一次需要存到远程的 Hadoop 服务器中,实现边爬边存,不落到本机,请问有什么方法吗?有什么插件可以实现 Scrapy 和 hdfs 的连接呢,还是说需要自己写一个?求大神解答
1
defunct9 2017-07-03 15:59:32 +08:00
自己写个
|
2
songjiaxin2008 2017-07-03 16:00:43 +08:00
这就是个 pipeline 吧 就跟换成 mongoDB 一个意思
|
3
1iuh 2017-07-03 16:04:54 +08:00
thrift
或者用 java 写个接口接收数据。 我之前也遇到过类似的问题, 至少我没有找到 python 直接连接 hdfs 的库。 |
4
dropwater OP @defunct9 初学者,有点吃力。还是想找造好的轮子
@songjiaxin2008 这个能再详细指点一下吗?好像是没有现成的... @1iuh 谢谢指点,我去试一试。python 直接连 hdfs 查到了一个 pyhdfs,不过也还没找到 scrapy 直接连的办法。 |
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`是解耦的,并不关心你的存储后端。
|
6
1iuh 2017-07-03 16:28:25 +08:00
@dropwater #4 看了下这个 pyhdfs,只有 10 个 star 呀,你确定没坑?
不过话说回来,只要这个 pyhdfs 可以工作,你就可以用呀。scrapy 接收到数据,然后调用这个库直接写入数据就行了。异步这块要处理一下,不然影响效率。 你要是想找 scrapy-hdfs 这种库肯定是找不到的。我还是建议你用 java 直接写个接口。 |
7
liprais 2017-07-03 16:30:26 +08:00 via iPhone
不要直接写 hdfs,效率低到哭
搞个管道,爬完写到管道里,那边消费到 hdfs |
8
defunct9 2017-07-03 16:37:31 +08:00
哎,地球这么大,给个可行方案吧。
建立个 kafka 队列,然后 python 写 kafka 的轮子必然是有了。 kafka 写 hdfs 那是顺理成章,这样就搞定了。 |
9
ym1ng 2017-07-03 16:39:52 +08:00
Mq 加 logstash 直接搞定,scrapy 的 pipeline 里面把数据打到 mq 里,logstash 的 input 是 mq,output 是 hdfs
|
11
stcasshern 2017-07-03 16:46:35 +08:00
存在 hdfs,我理解的 hdfs 不是一个文件系统吗?? 数据难道不是存在各种数据库?要直接写的话,就是改 pipeline 吧。
|
12
defunct9 2017-07-03 16:56:00 +08:00
hdfs+hbase,这个路数。或者直接 kafka+spark,计算去了。
|
13
zhaob 2017-07-03 18:23:34 +08:00
Scrapy 爬取的数据存成日志
再加一个 Flume 把日志同步存储到 HDFS |
14
timothyye 2017-07-03 19:17:38 +08:00 via Android
需要一个消息队列
|
15
knktc 2017-07-03 22:43:18 +08:00
直接写 flume 呗,flume 用个 http 的 source 和 hdfs 的 sink,不会增加什么开发量
|