Spout的实现步骤:
·        对文件的改变进行分开的监听,并监视文件夹下有无新日志文件加入。
·        在数据得到了字段的说明后,将其转换成tuple。
·        声明Spout和Bolt之间的分组,并决定tuple发送给Bolt的途径。

Spout的详细编码在Listing Three中显示。

Listing Three:Spout中open、nextTuple和delcareOutputFields方法的逻辑。
1.  public void open( Map conf, TopologyContext context,SpoutOutputCollector collector )  
2.  {   
3.             _collector = collector;  
4.           try  
5.           {  
6.           fileReader  =  new BufferedReader(new FileReader(new File(file)));
7.           }
8.           catch (FileNotFoundException e)
9.           {
10.          System.exit(1);   
11.          }
12. }                                                         
13.  
14. public void nextTuple()
15. {  
16.          protected void ListenFile(File file)
17.          {
18.          Utils.sleep(2000);  
19.          RandomAccessFile access = null;
20.          String line = null;  
21.             try  
22.             {
23.                 while ((line = access.readLine()) != null)
24.                 {
25.                     if (line !=null)
26.                     {  
27.                          String[] fields=null;
28.                           if (tupleInfo.getDelimiter().equals("|"))  fields = line.split("\\"+tupleInfo.getDelimiter());  
29.                           else  
30.                           fields = line.split  (tupleInfo.getDelimiter());  
31.                           if (tupleInfo.getFieldList().size() == fields.length)  _collector.emit(new Values(fields));
32.                     }
33.                }
34.             }
35.             catch (IOException ex){ }
36.             }
37. }  
38.  
39. public void declareOutputFields(OutputFieldsDeclarer declarer)
40. {  
41.       String[] fieldsArr = new String [tupleInfo.getFieldList().size()];
42.       for(int i=0; i<tupleInfo.getFieldList().size(); i++)
43.       {
44.               fieldsArr = tupleInfo.getFieldList().get(i).getColumnName();
45.       }
46. declarer.declare(new Fields(fieldsArr));
47. }     
declareOutputFileds()决定了tuple发射的格式,这种话Bolt就能够用类似的方法将tuple译码。Spout持续对日志文件的数据的变更进行监听,一旦有加入Spout就会进行读入而且发送给Bolt进行处理。

很多其它精彩内容请关注:http://bbs.superwu.cn
关注超人学院微信二维码:

Spout的实现步骤的更多相关文章

  1. 使用Storm实现实时大数据分析

    摘要:随着数据体积的越来越大,实时处理成为了许多机构需要面对的首要挑战.Shruthi Kumar和Siddharth Patankar在Dr.Dobb’s上结合了汽车超速监视,为我们演示了使用Sto ...

  2. Storm实现实时大数据分析

    当今世界,公司的日常运营经常会生成TB级别的数据.数据来源囊括了互联网装置可以捕获的任何类型数据,网站.社交媒体.交易型商业数据以及其它商业环境中创建的数据.考虑到数据的生成量,实时处理成为了许多机构 ...

  3. 使用Storm实现实时大数据分析(转)

    原文链接:http://blog.csdn.net/hguisu/article/details/8454368 简单和明了,Storm让大数据分析变得轻松加愉快. 当今世界,公司的日常运营经常会生成 ...

  4. 使用Storm实现实时大数据分析!

    随着数据体积的越来越大,实时处理成为了许多机构需要面对的首要挑战.Shruthi Kumar和Siddharth Patankar在Dr.Dobb's上结合了汽车超速监视,为我们演示了使用Storm进 ...

  5. TODO:GitHub创建组织的步骤

    TODO:GitHub创建组织的步骤 使用GitHub进行团队合作,写这个步骤主要作用是为了OneTODO作为一个团队组织进行代码的分享,让更多人来参与. 使用帐号.密码登录GitHub 2.右上角加 ...

  6. 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解

    工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...

  7. MVC CodeFirst简单的创建数据库(非常详细的步骤)

       最近在学习MVC的开发,相信有过开发经验的人初学一个新的框架时候的想法跟我一样最关心的就是这个框架如何架构,每个架构如何分工,以及最最关键的就是如何与数据库通信,再下来才是学习基础的页面设计啊等 ...

  8. Kooboo CMS技术文档之二:Kooboo CMS的安装步骤

    在IIS上安装Kooboo CMS Kooboo CMS安装之后 安装的常见问题 1. 在IIS上安装Kooboo CMS Kooboo CMS部署到正式环境相当简单,安装过程是一个普通MVC站点在I ...

  9. 简记用ArcGIS处理某项目需求中数据的步骤

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目需求涉及如下几个步骤: a.矢量化 b.获取范围内要素 ...

随机推荐

  1. 上传多张图片用Session临时存储

    DataTable dtImages = new DataTable(); string filepath = FileUpload1.PostedFile.FileName; //检查是否有文件要上 ...

  2. Java如何实现对Mysql数据库的行锁

    场景如下:     用户账户有余额,当发生交易时,需要实时更新余额.这里如果发生并发问题,那么会造成用户余额和实际交易的不一致,这对公司和客户来说都是很危险的. 那么如何避免:     网上查了下,有 ...

  3. SQL每个月份的发生额都比101科目多的科目

    请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目.请注意:TestDB中有很多科目,都有1-12月份的发生额.                  ...

  4. JavaSE复习日记 : 八种基本数据类型

    /* * 基本数据类型 * * Java里的8种基本数据类型: * byte --- 1 byte = 8 bit; * short --- 2 byte = 16 bit; * int --- 4 ...

  5. hdu 4349 Xiao Ming's Hope lucas

    题目链接 给一个n, 求C(n, 0), C(n, 1), ..........C(n, n)里面有多少个是奇数. 我们考虑lucas定理, C(n, m) %2= C(n%2, m%2)*C(n/2 ...

  6. cocos2dx 随机函数

    cocos2dx 随机数  2.2.3版本 1.初始化时设定随机数种子,只需一次. time_t now = time(NULL); srand((unsigned int)now); 2.需要的时候 ...

  7. C#中WebClient使用DownloadString中文乱码的解决办法

    原文:C#中WebClient中文乱码的解决办法 第一次尝试: string question = textBox1.Text.ToString(); WebClient client= new We ...

  8. HDU 2147 kiki's game

    题解:画图可得当横纵坐标均为奇数时为必败态…… #include <cstdio> int main(){ int a,b; while(scanf("%d%d",&a ...

  9. HDU 2610 Sequence one

    题目大意:在给定的序列中找到固定个数的递增的子序列,如果子序列的总个数少于要求的个数,那么就把所有的子序列输出即可. 题解:本来题目也不太看得懂,在别人的博客看了许久才懂,剪枝和判重也不大会,于是暂时 ...

  10. HDU 2501 Tiling_easy version

    递推式:f[n]=2*f[n-2]+f[n-1] #include <cstdio> #include <iostream> using namespace std; ]; i ...