实时用户分析

  1. #user nginx;
  2. worker_processes 1;
  3. error_log /var/log/nginx/error.log warn;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr,[$time_local]\$http_user_agent\'$request'';
  12. # '$status $body_bytes_sent '$http_referer' '
  13. # ''$http_user_agent' '$http_x_forwarded_for'';
  14. access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. #gzip on;
  19. server {
  20. listen 80;
  21. server_name localhost;
  22. #charset koi8-r;
  23. access_log /var/log/nginx/access.log main;
  24. location / {
  25. root /web/baidu;
  26. index index.html index.htm;
  27. }
  28. }
  29. include /etc/nginx/conf.d/*.conf;
  30. }

  1. agent.sources = r1
  2. agent.sinks = k1
  3. agent.channels = c1
  4. ## common
  5. agent.sources.r1.channels = c1
  6. agent.sinks.k1.channel = c1
  7. ## sources config
  8. agent.sources.r1.type = exec
  9. ##监听的日志位置
  10. agent.sources.r1.command = tail -F /var/log/nginx/access.log
  11. agent.sources.r1.interceptors = t1
  12. agent.sources.r1.interceptors.t1.type = timestamp
  13. ## channels config
  14. agent.channels.c1.type = memory
  15. agent.channels.c1.capacity = 1000
  16. agent.channels.c1.transactionCapacity = 1000
  17. agent.channels.c1.byteCapacityBufferPercentage = 20
  18. agent.channels.c1.byteCapacity = 1000000
  19. agent.channels.c1.keep-alive = 60
  20. #sinks config
  21. agent.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
  22. agent.sinks.k1.channel = c1
  23. #存放的kafka位置
  24. agent.sinks.k1.topic = my-first-topic4
  25. agent.sinks.k1.brokerList = localhost:9092
  26. agent.sinks.k1.requiredAcks = 1
  27. agent.sinks.k1.batchSize = 100

  1. package storm_kafka
  2. import java.util.Map;
  3. import org.apache.storm.tuple.Tuple;
  4. import org.apache.storm.tuple.Fields;
  5. import org.apache.storm.tuple.Values;
  6. import org.apache.storm.task.OutputCollector;
  7. import org.apache.storm.topology.OutputFieldsDeclarer;
  8. import org.apache.storm.topology.IRichBolt;
  9. import org.apache.storm.task.TopologyContext;
  10. public class SplitBolt implements IRichBolt {
  11. private OutputCollector collector;
  12. @Override
  13. public void prepare(Map stormConf, TopologyContext context,
  14. OutputCollector collector) {
  15. this.collector = collector;
  16. }
  17. @Override
  18. public void execute(Tuple input) {
  19. String sentence = input.getString(0);//获取信息
  20. int in = sentence.indexOf('GET /');
  21. int out = sentence.indexOf('HTTP/1.1');
  22. System.out.println('++++++++++');
  23. String split = sentence.substring(in+5,out);
  24. System.out.println('--------------');
  25. if (!' '.equals(split) &&!'favicon.ico '.equals(split)) {
  26. int in1 = split.indexOf('/');
  27. int out1 = split.indexOf('.jpg');
  28. String split1 =split.substring(in1+1,out1);
  29. collector.emit(new Values(split1));
  30. }
  31. //
  32. collector.ack(input);
  33. }
  34. @Override
  35. public void declareOutputFields(OutputFieldsDeclarer declarer) {
  36. declarer.declare(new Fields('word'));//声明元组的输出模式
  37. }
  38. @Override
  39. public void cleanup() {}
  40. @Override
  41. public Map<String, Object> getComponentConfiguration() {
  42. return null;
  43. }
  44. }

  1. package storm_kafka
  2. import java.util.Map;
  3. import java.util.HashMap;
  4. import org.apache.storm.tuple.Tuple;
  5. import org.apache.storm.task.OutputCollector;
  6. import org.apache.storm.topology.OutputFieldsDeclarer;
  7. import org.apache.storm.topology.IRichBolt;
  8. import org.apache.storm.task.TopologyContext;
  9. public class CountBolt implements IRichBolt{
  10. Map<String, Integer> counters;
  11. private OutputCollector collector;
  12. @Override
  13. public void prepare(Map stormConf, TopologyContext context,
  14. OutputCollector collector) {
  15. this.counters = new HashMap<String, Integer>();
  16. this.collector = collector;
  17. }
  18. @Override
  19. public void execute(Tuple input) {
  20. String name = input.getString(0);//获取元组数据
  21. String count= counters.get(name);
  22. //按键汇总值
  23. if(!counters.containsKey(name)){
  24. counters.put(name, '2');
  25. System.err.println('namenamenamenamnamanamnan');
  26. }else {
  27. int n = Integer.parseInt(counters.get(name));
  28. Integer c = n +1;
  29. counters.put(name, c.toString());
  30. System.err.println('cccccccccc----cccccccc');
  31. }
  32. collector.emit(new Values(name,count));
  33. collector.ack(input);
  34. }
  35. //当spout将要关闭时调用此方法
  36. @Override
  37. public void cleanup() {
  38. for(Map.Entry<String, Integer> entry:counters.entrySet()){
  39. System.err.println(entry.getKey()+;' : '+entry.getValue());//打印键值对
  40. }
  41. }
  42. @Override
  43. public void declareOutputFields(OutputFieldsDeclarer declarer) {
  44. declarer.declarer(new Fields('word','count'));
  45. }
  46. @Override
  47. public Map<String, Object> getComponentConfiguration() {
  48. return null;
  49. }
  50. }

 
  1. package storm_kafka
  2. import org.apache.storm.Config;
  3. import org.apache.storm.LocalCluster;
  4. import org.apache.storm.topology.TopologyBuilder;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import java.util.UUID;
  8. import org.apache.storm.hbase.bolt.HbaseBolt
  9. import org.apache.storm.hbase.bolt.mapper.SimpleHbaseMapper
  10. import org.apache.storm.spout.SchemeAsMultiScheme;
  11. import org.apache.storm.kafka.ZkHosts;
  12. import org.apache.storm.kafka.Broker;
  13. import org.apache.storm.kafka.StaticHosts;
  14. import org.apache.storm.kafka.BrokerHosts;
  15. import org.apache.storm.kafka.SpoutConfig;
  16. import org.apache.storm.kafka.KafkaConfig;
  17. import org.apache.storm.kafka.KafkaSpout;
  18. import org.apache.storm.kafka.StringScheme;
  19. public class KafkaStormSampleTopo {
  20. public static void main(String[] args) throws Exception{
  21. Config config = new Config();//创建storm配置对象
  22. config.setDebug(true);//设置日志显示级别
  23. config.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1);
  24. String zkConnString = 'localhost:2181';//zookeeper所在服务器和端口
  25. String topic = 'my-first-topic';//topic名称
  26. BrokerHosts hosts = new ZkHosts(zkConnString);
  27. SpoutConfig kafkaSpoutConfig = new SpoutConfig (hosts, topic, '/' + topic,
  28. UUID.randomUUID().toString());//spout获取数据配置
  29. kafkaSpoutConfig.bufferSizeBytes = 1024 * 1024 * 4;//kafkaSpoutConfig属性设置
  30. kafkaSpoutConfig.fetchSizeBytes = 1024 * 1024 * 4;//kafkaSpoutConfig属性设置
  31. kafkaSpoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
  32. TopologyBuilder builder = new TopologyBuilder();//创建拓扑对象
  33. builder.setSpout('kafka-spout', new KafkaSpout(kafkaSpoutCon-fig));//设置KafkaSpout类属性
  34. builder.setBolt('word-spitter', new SplitBolt()).shuffleGroup-ing('kafka-spout');//设置SplitBolt类属性和对数据进行随机分组处理
  35. builder.setBolt('word-counter', new CountBolt()).shuffleGroup-ing('word-spitter');//设置CountBolt属性和对数据进行随机分组处理
  36. SimpleHBaseMapper mapper = new SimpleHBaseMapper();
  37. HBaseBolt hBaseBolt = new HBaseBolt('wordcount', mapper).withConfigKey('hbase.conf');
  38. mapper.withColumnFamily('result');
  39. mapper.withColumnFields(new Fields('count'));
  40. mapper.withRowKeyField('word');
  41. Map<String, Object> hbConf = new HashMap<String,Object>();
  42. hbConf.put('hbase.rootdir','hdfs://localhost:9000/hbase');
  43. hbConf.put('hbase.zookeeper.quorum','localhost:2181');
  44. config.put('hbase.conf', hbConf);
  45. builder.setBolt('hbase', hBaseBolt).shuffleGrouping('word-counter');
  46. LocalCluster cluster = new LocalCluster();//创建本地模拟集群对象
  47. cluster.submitTopology('KafkaStormSampleTopo', config, builder.create-Topology());//提交拓扑
  48. }
  49. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值