基于hbase和mapreduce的分布式数据爬取方法
技术领域
1.本发明涉及计算机应用技术领域,具体是基于hbase和mapreduce的分布式数据爬取方法。
背景技术:2.随着互联网技术的迅猛发展以及大数据时代的降临,万维网中的数据呈爆炸式增长,尤其非结构化数据占了其中的75%以上,其中包含了海量的有效信息,如何高效地从互联网爬取需要的非结构化数据成为了目前备受关注的问题。
3.网络爬虫就是模拟浏览器发送网络请求,接收请求响应,自动地抓取互联网信息的技术。若仅使用单机进行爬取,爬取互联网的海量数据需要耗费大量时间。
4.mapreduce是一种并行分布式计算框架,可用于大规模数据集的并行计算;hbase是一个提供高可靠性、可伸缩、高性能、实时读写的分布式列式数据库。利用mapreduce组件从网络上分布式爬取数据,将爬取到的数据存储在hbase数据库中,可缩小获取非结构化数据的时间成本,提高存储爬取数据的可靠性。
5.综上所述,本发明提出基于hbase和mapreduce的分布式数据爬取方法。
技术实现要素:6.本发明的目的在于提供基于hbase和mapreduce的分布式数据爬取方法,能够完成数据的并行分布式爬取,巧妙利用mapreduce的map和reduce之间的shuff l e机制解决了分布式爬取中的ur l去重问题,避免了对爬取过的网页重复爬取,将爬取后的数据保存在列式数据库hbase中,便于后续批量处理“doc”列族的数据。
7.为实现上述目的,本发明提供如下技术方案:基于hbase和mapreduce的分布式数据爬取方法,所述方法包括:
8.s100在hbase中创建一个表,该表包含三个列族,分别用于保存爬取目标ur l、爬取与解析的标志和从爬取目标ur l爬取的内容源码;
9.s200收集爬取目标网站中模块首页出度较大的ur l作为种子ur l,作为新行插入步骤s100所述表中;
10.s300将步骤s200所述表每一行的ur l列和爬取标志列输入爬取作业的map任务函数;
11.s400将步骤s300更新后的表的每一行的ur l列、解析标志列和内容源码列输入解析作业的map任务函数;map任务函数对每一个解析出的ur l构建输出键值对,将该新ur l作为输出键值对的key,键值对的值为“fa l se”;将map端输出的键值对输入解析作业的comb i ne函数;
12.s500将步骤s400所述comb i ne函数的输出输入到解析作业的reduce函数中;
13.s600循环迭代执行步骤s300到步骤s500,对爬取目标网站数据进行增量爬取,直至达到目标数据量或目标网站爬取完毕。
14.作为本发明所述的一种优选实施方案,所述步骤s100中:爬取与解析标志列族包含两列,分别记录爬取标志和解析标志,该表采用每一行ur l的hash值作为行键。
15.作为本发明所述的一种优选实施方案,所述步骤s200中:所述新行的爬取与解析标志分别置为未爬取与未解析,内容源码列为空。
16.作为本发明所述的一种优选实施方案,所述步骤s300中map函数判断若表中某行爬取标志列为未爬取,则利用httpurlconnect i on工具库爬取该行记录的ur l的内容源码;若顺利爬取,则将爬取到的网址源码保存在该表中该行的内容源码列族中,并将该行爬取标志列置为已爬取;若爬取结果长度小于100或爬取失败,则不做更改。
17.作为本发明所述的一种优选实施方案,所述步骤s400中map函数对输入的每一行构建输出键值对,对于一条输入行,将该行中爬取目标ur l列的值作为输出键值对的key,若该行内容源码列为空,则该行所对应输出键值对的值为“fa l se”,否则为“true”;若该输入行的内容源码列不为空,且解析标志列为未解析,则map函数使用定制的正则化规则对该行内容源码进行解析;comb i ne函数遍历以同一ur l作为key的所有键值对的值,若以某一ur l作为key的所有键值对的值中存在“true”值,则对该ur l输出一个键值对《ur l,“true”》,否则对该ur l输出一个键值对《ur l,“fa l se”》。
18.作为本发明所述的一种优选实施方案,后台根据打印机型号,查找能支持此打印机的所有云打印桌面,并动态分配资源最空闲的给用户侧使用。
19.作为本发明所述的一种优选实施方案,所述步骤s500中reduce函数的运算逻辑如下,判断若以同一ur l为key的键值对的值列表中存在“true”值,则设该ur l在步骤s400更新后的表中对应行的解析标志列为已解析;否则,在该表中新插入一行,ur l列为该ur l值,爬取与解析标志置为未爬取与未解析。
20.与现有技术相比,本发明的有益效果是:
21.本发明利用mapreduce组件从网络上分布式爬取数据,将爬取到的数据存储在hbase数据库中,可缩小获取非结构化数据的时间成本,提高存储爬取数据的可靠性。
附图说明
22.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
23.图1为本发明基于hbase和mapreduce的分布式数据爬取方法整体流程图。
具体实施方式
24.为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
25.请参阅图1,本发明提供基于hbase和mapreduce的分布式数据爬取方法,所述方法包括:
26.步骤s100在hbase中创建一个表,该表包含三个列族,分别用于保存爬取目标ur l、爬取与解析的标志和和从爬取目标ur l爬取的内容源码,爬取与解析标志列族包含两
列,分别记录爬取标志和解析标志,该表采用每一行ur l的hash值作为行键,使分区更加均匀,从而有效防止热点效应;
27.s200收集爬取目标网站中模块首页等出度较大的ur l作为种子ur l,作为新行插入步骤s100所述表中,将上述新行的爬取与解析标志分别置为未爬取与未解析,内容源码列为空;
28.s300将步骤s200所述表每一行的ur l列和爬取标志列输入爬取作业的map任务函数,map函数判断若表中某行爬取标志列为未爬取,则利用httpurlconnect i on工具库爬取该行记录的ur l的内容源码。若顺利爬取,则将爬取到的网址源码保存在该表中该行的内容源码列族中,并将该行爬取标志列置为已爬取;若爬取结果长度小于100或爬取失败,则不做更改。本步骤利用爬取标志避免对同一网址内容的重复爬取。
29.s400将步骤s300更新后的表的每一行的ur l列、解析标志列和内容源码列输入解析作业的map任务函数,map函数对输入的每一行构建输出键值对,对于一条输入行,将该行中爬取目标ur l列的值作为输出键值对的key,若该行内容源码列为空,则该行所对应输出键值对的值为“fa l se”,否则为“true”。若该输入行的内容源码列不为空,解析标志列为未解析,则map函数使用定制的正则化规则对该行内容源码进行解析。map函数对每一个解析出的ur l构建输出键值对,将该新ur l作为输出键值对的key,键值对的值为“fa l se”。将map端输出的键值对输入解析作业的comb i ne函数,comb i ne函数遍历以同一ur l作为key的所有键值对的值,若其中存在“true”值,则对该ur l输出一个键值对《ur l,“true”》,否则对该ur l输出一个键值对《ur l,“fa l se”》。本步骤利用comb i ne函数大幅提升了mapreduce的作业效率。
30.s500将步骤s400所述comb i ne函数的输出输入到解析作业的reduce函数中,reduce函数的运算逻辑和combi ne函数相似,判断若以同一ur l为key的键值对的值列表中存在“true”值,则设该ur l在步骤s400更新后的表中对应行的解析标志列为已解析;否则,在该表中新插入一行,ur l列为该ur l值,爬取与解析标志置为未爬取与未解析。
31.s600循环迭代执行步骤s300到步骤s500,对爬取目标网站数据进行增量爬取,直至达到目标数据量或目标网站爬取完毕。
32.实施例:
33.本实施例以163人工智能网数据的爬取为例子对本方法的实施展开详细的介绍。
34.首先在hbase中创建一个表,该表包含三个列族,分别名为“ur l”、“f l ag”、“doc”。表中每一行的“ur l”保存该行所存数据的网址;“f l ag”列族中包含两列,分别是“crawl ered”和“parsered”,分别记录该行网址的内容是否已被爬取以及该行网址的内容是否已被解析;“doc”中存储该行网址的源代码。采用该行ur l的hash值作为行键。初始收集了“http://www.a i 163.com/news/”、“http://www.ai 163.com/vr/”、“http://www.a i 163.com/m l/”、“http://www.a i 163.com/5g/”、“http://www.a i 163.com/b i gdata/”、“http://www.a i 163.com/robot/”、“http://www.a i 163.com/uav/”、“http://www.a i 163.com/c l oud/”、“http://www.a i 163.com/i ot/”、http://www.ai 163.com/iov/等作为种子ur l,计算ur l的hash值,将它们作为新行插入表中,“ur l”列族中为完整网址,“f l ag”列族中两列均为“fa l se”。这些网站的前缀不同,解析规则不同,需要预先将种子ur l和相应的解析规则保存在xm l文件中,爬取数据时从相应文
件获取规则即可顺利爬取,当需要增加种子ur l进行爬取时,通过更改xml中的值即可,无需更改爬取逻辑代码。
35.本实施例设计了两个mapreduce作业循环迭代执行,对网站数据进行增量爬取,下面分别介绍两个作业的map和reduce函数的业务逻辑:
36.(1)爬取作业会扫描全表,将所有行的“ur l”和“f l ag:crawl ered”列的值传输给map任务。
37.map函数:输入数据初始化时hbase表中同一行的两列值会组成同一个键值对的值进行处理,对于每一行,map函数判断若该行“f l ag:crawl ered”列的值为“fa l se”,则利用httpurlconnect i on工具库爬取该ur l的网址内容。若顺利爬取,则将网址源码保存在该行的“doc”列族中,列名为“document”,并将“f l ag:crawl ered”列的值设为“true”;若爬取结果长度小于100,则认为爬取失败,则不做更改,“f l ag:crawl ered”列的值仍为“fa l se”。
38.reduce函数:爬取作业的reduce函数不做多余处理,仅用于支持map函数更改hbase表中的相应值。
39.(2)解析作业将所有行的“ur l”、“doc”和“f l ag:parsered”列的值传输给map任务。
40.map函数:对于所处理的行数据,首先判断该行的“doc”列是否为空,若为空,则输出key为该行ur l,值为“fa l se”的键值对,“fa l se”表示该行未被解析过。否则,输出key为该行ur l、值为“true”的键值对,表示经过这次操作后该行已被解析,之后判断该行的“f l ag:parsered”列的值是否为“fa l se”,若是则对该行“doc:document”列中的内容进行解析。解析的具体操作为使用正则化规则提取源码中符合条件的新ur l,以便进行增量爬取,由于选取的网站即为专注人工智能领域的新闻博客类网站,所以目前使用的规则为前缀依然为该网站的网址。解析完毕后map函数输出key为解析出的新ur l、值为“fa l se”的键值对。
41.comb i ne函数:combi ne函数每次的输入是该节点map函数的输出中键(ur l)相同的所有键值对,其处理逻辑是,遍历同一ur l的所有值,若该ur l键的所有值中存在“true”,则代表该ur l的内容已被解析过,则对该ur l输出一个键值对《ur l,”true”》,否则该ur l的内容未被解析过,则对该ur l输出一个键值对《ur l,”fa l se”》。
42.reduce函数:comb i ne函数是map端的函数,map端输出的键值对作为reduce端的输入,相同键的键值对由同一个reduce函数进行处理,reduce函数的运算逻辑和comb i ne函数相似,只是:若某ur l的值列表中存在“true”值,则设对应行的“f l ag:parsered”列的值为“true”,表示该行已被解析;否则新插入一行,行键为该ur l的hash值,“ur l”列为该ur l,“f l ag”列族的两列值均设为“fa l se”。该行的“doc:document”列的值将在下一次迭代的爬取作业中获取。
43.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
44.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。