在可扩展的抓取架构中选择后端存储和处理管道

时间:2019-06-25 10:00:45

标签: database apache-spark web-scraping architecture

我有一个存储和数据处理问题,需要您的建议。我需要从RabbitMQ队列中获取作为流的url的html文件(例如,可以使用Scrapy完成此操作)。 html文件需要存储在某个地方以进行进一步处理。每个文件的大小在500kB到4Mb之间,单个作业会产生30万到100万个html文件。我当时正在考虑将它们存储在HDFS中,但是它们很小。接下来是处理部分。每个html文件都属于多个看起来像这样的集合

| html  | collection |
| ----- | ---------- |
| html1 | 1,2,3      |
| html2 | 3,4,5,6    | 

如果我想检查每个集合中标题的平均长度是多少,我需要从每个html文件中提取标题文本,计算字符数并将此数字发送给多个“工作者”进行处理,因为单个html属于多个集合。

因此,我不得不处理这些问题。首先,在哪里存储HTML文件(mongo,云存储,HDFS等)?其次,如何设计数据处理管道?我在集合中仅给出了一个平均标题长度的示例,但实际上我将要处理200个不同的参数,并且可以将它们链接在一起。例如,标题文本可以直接使用,也可以映射为字符数或单词数。这将是3个不同的参数要处理。因此,第二部分需要可伸缩并具有某种图形处理支持。它需要具有可伸缩性,因此无论作业html文件的大小是多少(我可以是300,000或超过百万个文件),我都可以说5分钟。 Spark在这里应该是个不错的选择吗?

html文件数量不固定。收集数量不是固定的。集合中的html文件数量不固定。

enter image description here

0 个答案:

没有答案