91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Storm IPResolutionBolt寫爬蟲

發布時間:2021-12-23 14:21:15 來源:億速云 閱讀:133 作者:iii 欄目:云計算

本篇內容介紹了“怎么用Storm IPResolutionBolt寫爬蟲”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

package com.digitalpebble.storm.crawler.bolt;

import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;

public class IPResolutionBolt extends BaseRichBolt {

	public static final Logger LOG = LoggerFactory
			.getLogger(IPResolutionBolt.class);

	OutputCollector _collector;

	@SuppressWarnings("unchecked")
	public void execute(Tuple tuple) {
		String url = tuple.getStringByField("url");
		HashMap<String, String[]> metadata = null;

		
		//在這里判斷我們的tuple是否包含著Meradata
		if (tuple.contains("metadata"))
			metadata = (HashMap<String, String[]>) tuple
					.getValueByField("metadata");
					
	        //這里的Metadata是一個HashMap,持有的是一個 <String,String[]> 的對象組合

		String ip = null;
		String host = "";

		URL u;
		try {
			u = new URL(url);
			host = u.getHost();
		} catch (MalformedURLException e1) {
			LOG.warn("Invalid URL: " + url);
			// ack it so that it doesn't get replayed
			_collector.ack(tuple);
			return;
		}

		try {
			long start = System.currentTimeMillis();
			final InetAddress addr = InetAddress.getByName(host);
			ip = addr.getHostAddress();
			long end = System.currentTimeMillis();

			LOG.info("IP for: " + host + " > " + ip + " in " + (end - start)
					+ " msec");

					
		        //在這里我們發射  url,ip,metadata 并且針對tuple做一個Ack
			_collector.emit(tuple, new Values(url, ip, metadata));
			_collector.ack(tuple);
		} catch (final Exception e) {
			LOG.warn("Unable to resolve IP for: " + host);
			_collector.fail(tuple);
		}
	}

	public void declareOutputFields(OutputFieldsDeclarer declarer) {
		declarer.declare(new Fields("url", "ip", "metadata"));
	}

	public void prepare(Map stormConf, TopologyContext context,
			OutputCollector collector) {
		_collector = collector;
	}

}

          在這里我們需要關注, declareOutputFields在設定我們的Tuple records對象的時候,是傳遞的“url”,“ip”,“metadata”, 而不是一個封裝好的對象。 

        一旦我們傳遞的records的數量比較多。那么請寧務必將傳遞的值設置為對象。并且在接受方,getValues(0)的方式取得。

“怎么用Storm IPResolutionBolt寫爬蟲”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉义市| 张家川| 依安县| 浑源县| 呼图壁县| 两当县| 南江县| 东乡县| 格尔木市| 河源市| 康平县| 五华县| 维西| 驻马店市| 平和县| 昭觉县| 博乐市| 福州市| 德州市| 云林县| 沁源县| 阿鲁科尔沁旗| 荣成市| 荆州市| 蓬安县| 望江县| 沂水县| 临沂市| 肥乡县| 宁城县| 泾源县| 扶沟县| 尚志市| 东乌| 沂南县| 吉安市| 齐齐哈尔市| 左云县| 来凤县| 陕西省| 青阳县|