编写storm程序,对数据进行聚合并且写入到mysql,

本文  主要说明数据中有多个字段需要进行sum或其他操作时的程序写法

1.主程序main方法,storm 拓扑运行入口

  1. public class CopyOfPvTopo {
  2.  
  3. public static void main(String[] args) throws Exception {
  4. System.out.println("--------------------------------------------------------------------------start");
  5. BrokerHosts brokerHosts = new ZkHosts(Const.ZK_STR); //zookeeper配置主机名集合
  6. TridentKafkaConfig kafkaConfig = new TridentKafkaConfig(brokerHosts, Const.PVUV_TOPIC, "20160607p");//对接kafka,接收某一个管道
  7. kafkaConfig.scheme = new SchemeAsMultiScheme(new StringScheme());

  8.          //模拟批处理数据
  9. FixedBatchSpout spout = new FixedBatchSpout(new Fields("str"), 3,
  10. new Values("111|2|1|1|1|1|1|1|1|1|1|1|1|1"),
  11. new Values("111|2|1|1|1|1|1|1|1|1|1|1|1|1"),
  12. new Values("111|2|1|1|1|1|1|1|1|1|1|1|1|1"),
  13. new Values("111|2|1|1|1|1|1|1|1|1|1|1|1|1"));
  14. // spout.setCycle(true);//是否循环提交数据
  15. TransactionalTridentKafkaSpout kafkaSpout = new TransactionalTridentKafkaSpout(kafkaConfig);//本地测试没用
  16. TridentTopology topology = new TridentTopology();//建一个拓扑
  17. topology.newStream("20160607p", spout)//读取模拟数据
  18. .parallelismHint(20)
  19. .shuffle()
  20. .each(new Fields("str"), new Senquece(), new Fields("mapid", "pv", "uv"))//处理原数据
  21. .parallelismHint(80)
  22. .groupBy(new Fields("mapid","uv","pv")).chainedAgg()//开始调用链
  23. .aggregate(new Fields("uv"), new SumAgg(), new Fields("sumuv"))//求和uv
  24. .aggregate(new Fields("pv"), new SumAgg(), new Fields("sumpv")).chainEnd()//结束调用链
  25. .parallelismHint(35)
  26. .each(new Fields("mapid", "sumpv", "sumuv"), new StoreFilter())//发送到下一步
  27. .parallelismHint(20);
  28. Config conf = new Config();
  29. conf.setDebug(false);
  30. LocalCluster cluster = new LocalCluster();
  31. cluster.submitTopology(Const.PVUV_TOPO, conf, topology.build());
  32. // Utils.sleep(100000);
  33. // cluster.killTopology("firstTopo");
  34. // cluster.shutdown();
  35. }
  36. }

  2.sum类,做sum是需要用到的类在上面的类中可以找到调用

  1. public class SumAgg implements CombinerAggregator<Integer> {
  2.  
  3. private static final long serialVersionUID = -6764153182395797633L;
  4.  
  5. @Override
  6. public Integer init(TridentTuple tuple) {
  7. return tuple.getInteger(0);
  8. }
  9.  
  10. @Override
  11. public Integer combine(Integer val1, Integer val2) {
  12. return val1 + val2;
  13. }
  14.  
  15. @Override
  16. public Integer zero() {
  17. return 0;
  18. }
  19.  
  20. }

storm sum aggregate 原语 聚合 本地测试的更多相关文章

  1. MDX Step by Step 读书笔记(七) - Performing Aggregation 聚合函数之 Sum, Aggregate, Avg

    开篇介绍 SSAS 分析服务中记录了大量的聚合值,这些聚合值在 Cube 中实际上指的就是度量值.一个给定的度量值可能聚合了来自事实表中上千上万甚至百万条数据,因此在设计阶段我们所能看到的度量实际上就 ...

  2. 问题 1014: [编程入门]阶乘求和python):(本地测试正确;但提交不对!!??)求教

    问题 1014: [编程入门]阶乘求和 时间限制: 1Sec 内存限制: 128MB 提交: 27629 解决: 5450 题目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数 ...

  3. 用java开发微信公众号:测试公众号与本地测试环境搭建(一)

    本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...

  4. 在本地测试一次成功的AJAX请求

    要在本地测试AJAX,首先是环境的搭建,下面以wamp为例. 1.先在wamp的官网下载wamp的安装包,网址 http://www.wampserver.com/. 2.安装wamp.如果安装过程中 ...

  5. 本地测试AJAX请求

    要在本地测试AJAX,首先是环境的搭建,因为XHR对象的open方法中参数url是指文件在服务器上的文件.下面以WampServer为例. 1. 下载wamp的安装包,下载地址为:http://221 ...

  6. win10系统iis下部署搭建https (ssl/tls)本地测试环境

    有时想要把公司的某些XX项目部署成https站点,是为了在传输层加密传输,防止他人嗅探站点重要数据信息,平常我们使用的http方式都是明文方式传输的很不安全,容易被他人窃取.而有些时候要在本地搭建ht ...

  7. win7 windows server 2008R2下 https SSL证书安装的搭配(搭配https ssl本地测试环境)

    原文:http://www.cnblogs.com/naniannayue/archive/2012/11/19/2776948.html 要想成功架设SSL安全站点关键要具备以下几个条件. 1.需要 ...

  8. https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题

    一:什么是https SSL(Security   Socket   Layer)全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递信息的安 ...

  9. 【转】https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题

    正需要这个,写的很好,就转过来了 转自: http://www.cnblogs.com/naniannayue/ 一:什么是https SSL(Security   Socket   Layer)全称 ...

随机推荐

  1. 转: utf16编码格式(unicode与utf16联系)

    转自: http://www.cnblogs.com/dragon2012/p/5020259.html UTF-16是Unicode字符集的一种转换方式,即把Unicode的码位转换为16比特长的码 ...

  2. poj3393[模拟题]

    Lucky and Good Months by Gregorian Calendar Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  3. 锋利的jQuery第2版学习笔记1~3章

    第1章,认识jQuery 注意:使用的jQuery版本为1.7.1 目前流行的JavaScript库 Prototype(http://www.prototypejs.org),成型早,面向对象的思想 ...

  4. Dalvik字节码的类型,方法与字段表示方法

    Dalvik字节码有着自己的类型,方法与字段表示方法,这些方法与Dalvik虚拟机指令集一起组成了一条条的Dalvik汇编代码. 1.类型 Dalvik字节码只有两种类型,基本类型与引用类型.Dalv ...

  5. Apache httpd开启SSL

    https://my.oschina.net/xpbug/blog/197454 必要软件 apache httpd 2.4(windows) perl 5 (windows) openssl (wi ...

  6. Learn Python The Hard Way学习笔记001

    今天搜索了一下raw_input() 和 input()的区别,引用下原文部分内容 两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收).而对于 ...

  7. 调整Windows8允许多用户登录

    最近LP说要在继续教育平台上学习,好像是中级的需要进行继续教育吧,具体情况不管了.LP说网站登录后没办法听到声音看到视频,但是我的可以,系统环境是Win8,IE10,不过是在Chrome下使用IPA插 ...

  8. jFinal中报对应模型不存在的错误(The Table mapping of model: demo.User not exists)

    jFinal中报对应模型不存在的错误(The Table mapping of model: demo.User not exists) 贴出错误: java.lang.RuntimeExceptio ...

  9. javascript笔记——工作笔记

    1.防止普通用户缓存静态文件,每次修改之后给静态文件的应用后面加上参数后缀[项目文件较多时最好使用前端构建工具] 比如: <script src="$!webPath/resource ...

  10. lex&yacc

    LEX: yytext 数组包含匹配模式的文本; 使词法分析程序工作的两条规则是:1. lex 模式只匹配输入字符或字符串一次.2. lex 执行当前输入的最长可能匹配的动作. 由 lex 产生的词法 ...