某APP实时登录分析项目上

  1. 先说点题外话,本来这篇文章十天之前就该写了,后来结果电脑坏了,今天才搞好。中间经历了一场考试,端午还回了趟家。
  2. 项目分析思路,其实这个地方没有完全做到实时,数据放在HDFS上,完全实时的可以用kafka,这个正在测试中。
    这里写图片描述
  3. ReadSpout分析

public class ReadSpout extends BaseRichSpout {
    SpoutOutputCollector coll;


    @Override
    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
        // TODO Auto-generated method stub
    coll=collector;
    }

    @Override
    public void nextTuple() {
        // TODO Auto-generated method stub
        String uri = "hdfs://localhostlei:8020/storm/app.log";  //日志存放在hdfs上
        InputStream in = null;
        try {
            Configuration conf = new Configuration();
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            in = fs.open(new Path(uri));
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String line = null;
            while (null != (line = br.readLine())) {
                coll.emit(new Values(line));  //日志记录为行为单位
                Utils.sleep(100); 频率为1s10条
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeStream(in);
        }
    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        // TODO Auto-generated method stub
       declarer.declare(new Fields("ip"));
    }

}

4.GetAreaBolt分析,这里我是通过高德地图的接口得到的省份名称, 这里提供链接参考。http://lbs.amap.com/api/webservice/guide/api/ipconfig


public class GetAreaBolt implements IBasicBolt {



    public void execute(Tuple tuple, BasicOutputCollector collector) {
        String line = tuple.toString();
        String all[] = line.split("\t", -1);
        String s=HttpRequest.sendGet("http://restapi.amap.com/v3/ip", 
                  "key=填写你的key&ip="+all[3]);

        collector.emit(new Values(s));  //得到省份名称
    }


    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declare(new Fields("area"));
    }

    public Map<String, Object> getComponentConfiguration() {
        return null;
    }

    @SuppressWarnings("rawtypes")
    @Override
    public void prepare(Map stormConf, TopologyContext context) {

    }

    @Override
    public void cleanup() {
    }
}
  1. WriteBolt分析

public class WriteBolt implements IBasicBolt {


    private static final long serialVersionUID = 1L;
    static Connection conn;
    static Statement st;




    public static void insert(String area) {

        System.out.println("开始插入数据");
        try {
            String sql="update  position set num=num+1 where area='"+area+"'";
            int result=st.executeUpdate(sql); // exec sql 
            System.out.println("数据更新结果:"+result+area);
        } catch (SQLException e) {
            System.out.println("update failed! " + e.getMessage());
        }
    }

    public void execute(Tuple tuple, BasicOutputCollector collector) {
        String word = tuple.getString(0);

        if (word!=null&&word.length()>0) {

             word=ProvinceUtil.ProcessPro(word);  //为了后面的图表方便,这里要进行一些处理
             insert(word);
        }


    }
    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declare(new Fields("area"));
    }

    @Override
    public Map<String, Object> getComponentConfiguration() {
        return null;
    }

    @Override
    public void prepare(Map stormConf, TopologyContext context) {
        conn = Dao.getConn(); // get connection
        try {
            st = (Statement) conn.createStatement();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // create static sql statement
    }

    @Override
    public void cleanup() {
        try {
            st.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


}

6其余的代码就不介绍了,项目源码地址https://github.com/iareuniqe/app-storm/tree/master/storm-master分析项目下主要介绍下如何制作出中国地图的效果,先放张图,今天有点困了,明天早上起来写吧!测试数据下载地址http://pan.baidu.com/s/1eSzivKI 密码ev54
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wending-Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值