This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
galaxy-tsg-olap-storm-log-a…/src/test/java/cn/ac/iie/test/SubcribeIdBoltone.java
2019-11-08 11:46:29 +08:00

118 lines
3.9 KiB
Java

package cn.ac.iie.test;
import cn.ac.iie.common.AddressConfig;
import com.alibaba.fastjson.JSONObject;
import com.zdjizhi.utils.StringUtil;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.log4j.Logger;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.BasicOutputCollector;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseBasicBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author qidaijie
*/
public class SubcribeIdBoltone extends BaseBasicBolt {
private static Logger logger = Logger.getLogger(SubcribeIdBoltone.class);
private static Map<String, String> subIdMap;
private static Connection connection;
static {
// 管理Hbase的配置信息
Configuration configuration = HBaseConfiguration.create();
// 设置zookeeper节点
configuration.set("hbase.zookeeper.quorum", AddressConfig.HBASE_ZOOKEEPER_SERVERS);
try {
connection = ConnectionFactory.createConnection(configuration);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void prepare(Map stormConf, TopologyContext context) {
subIdMap = new HashMap<>(16);
getAll();
}
@Override
public void execute(Tuple tuple, BasicOutputCollector collector) {
try {
String message = tuple.getString(0);
if (StringUtil.isNotBlank(message)) {
JSONObject jsonObject = JSONObject.parseObject(message);
String ip = jsonObject.getString("framed_ip");
String account = jsonObject.getString("account");
// dataValidation(ip, account, collector);
collector.emit(new Values(ip + "-" + account));
}
} catch (Exception e) {
logger.error("Radius写入Redis出现异常", e);
}
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("connLog"));
}
/**
* 获取所有的 key value
*/
private static void getAll() {
try {
Table table = connection.getTable(TableName.valueOf("sub:" + AddressConfig.HBASE_TABLE_NAME));
Scan scan2 = new Scan();
ResultScanner scanner = table.getScanner(scan2);
for (Result result : scanner) {
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
subIdMap.put(Bytes.toString(CellUtil.cloneRow(cell)), Bytes.toString(CellUtil.cloneValue(cell)));
}
}
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 验证数据并与内存中的对比
*
* @param ip framed_ip
* @param account account
*/
private static void dataValidation(String ip, String account, BasicOutputCollector collector) {
if (StringUtil.isNotBlank(ip) && StringUtil.isNotBlank(account)) {
// String s = ip.split("\\.")[0];
// if (!AddressConfig.CHECK_IP_SCOPE.contains(s)) {
if (subIdMap.containsKey(ip)) {
if (!subIdMap.get(ip).equals(account)) {
subIdMap.put(ip, account);
collector.emit(new Values(ip + "-" + account));
}
} else {
subIdMap.put(ip, account);
collector.emit(new Values(ip + "-" + account));
}
// }
}
}
}