怎么用Storm IPResolutionBolt写爬虫

怎么用Storm IPResolutionBolt写爬虫

本篇内容介绍了“怎么用Storm IPResolutionBolt写爬虫”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

packagecom.digitalpebble.storm.crawler.bolt;importjava.net.InetAddress;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.HashMap;importjava.util.Map;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importbacktype.storm.task.OutputCollector;importbacktype.storm.task.TopologyContext;importbacktype.storm.topology.OutputFieldsDeclarer;importbacktype.storm.topology.base.BaseRichBolt;importbacktype.storm.tuple.Fields;importbacktype.storm.tuple.Tuple;importbacktype.storm.tuple.Values;publicclassIPResolutionBoltextendsBaseRichBolt{publicstaticfinalLoggerLOG=LoggerFactory.getLogger(IPResolutionBolt.class);OutputCollector_collector;@SuppressWarnings("unchecked")publicvoidexecute(Tupletuple){Stringurl=tuple.getStringByField("url");HashMap<String,String[]>metadata=null;//在这里判断我们的tuple是否包含着Meradataif(tuple.contains("metadata"))metadata=(HashMap<String,String[]>)tuple.getValueByField("metadata");//这里的Metadata是一个HashMap,持有的是一个<String,String[]>的对象组合Stringip=null;Stringhost="";URLu;try{u=newURL(url);host=u.getHost();}catch(MalformedURLExceptione1){LOG.warn("InvalidURL:"+url);//ackitsothatitdoesn'tgetreplayed_collector.ack(tuple);return;}try{longstart=System.currentTimeMillis();finalInetAddressaddr=InetAddress.getByName(host);ip=addr.getHostAddress();longend=System.currentTimeMillis();LOG.info("IPfor:"+host+">"+ip+"in"+(end-start)+"msec");//在这里我们发射url,ip,metadata并且针对tuple做一个Ack_collector.emit(tuple,newValues(url,ip,metadata));_collector.ack(tuple);}catch(finalExceptione){LOG.warn("UnabletoresolveIPfor:"+host);_collector.fail(tuple);}}publicvoiddeclareOutputFields(OutputFieldsDeclarerdeclarer){declarer.declare(newFields("url","ip","metadata"));}publicvoidprepare(MapstormConf,TopologyContextcontext,OutputCollectorcollector){_collector=collector;}}

在这里我们需要关注, declareOutputFields在设定我们的Tuple records对象的时候,是传递的“url”,“ip”,“metadata”, 而不是一个封装好的对象。

怎么用Storm IPResolutionBolt写爬虫

一旦我们传递的records的数量比较多。那么请宁务必将传递的值设置为对象。并且在接受方,getValues(0)的方式取得。

“怎么用Storm IPResolutionBolt写爬虫”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!

发布于 2021-12-23 21:21:32
收藏
分享
海报
0 条评论
56
上一篇:Storm RandomURLSpout怎么使用 下一篇:Storm怎么写一个爬虫
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码