在编写storm代码来进行实时分析的时候遇到了一些问题,有些的确令人比较头痛,现在稍微做一下整理。数据流向(本地-Spout-Bolt-Hdfs)

1数据的输入输出文件的路径选择

因为在此项目中数据是放在本地磁盘的,所有就有两种放数据的途径,一种是直接通过spout接受本地数据发送到任务中,另一种是先把文件数目进行整理(缩小)放到hdfs系统,让后通过spout读取hdfs里面的数据,后来实际表明前一种更加适合(后一种受到了mapreduce的影响),现在提一下后一种遇到的问题,后一种的话是spout发射完一个文件的数据以后一定要删除掉(不然会一直发射),但是这样子就没有一个有效的方式来判断是否已经发送完成,在这里花了很多时间,常常导致数据还没有发送完成就删掉了。

并且在复制文件到hdfs的过程中spout会一直从不断增加的数据中获取(后果可想而知)。

文件输出路径同样遇到了上诉的问题,看来收到mapreduce的模式影响很大,一种是直接输出到本地磁盘,另一种是输出到Hdfs里面,这里选择后者就更加合适了,因为如果是在集群下运行程序的话,那么spout和bolt任务是随机分配的,并无法指定那个节点来运行写文件的bolt,这样子很可能后续代码需要获取的是主节点的数据,结果数据却被写到了另一个从节点,还要判断那个节点的数据是否已经写完,文件传输过程,而hdfs就不一样了,文件只要写到hdfs以后从任何一个节点都可以读取上面的数据。另外在判断文件是否已经传输完毕使用了判断文件大小的方法,以半秒钟为间隔获取文件的大小,当相邻文件的大小不在变化则表明数据已经被处理完毕,可以进行接下来的运算。

2bolt输出数据到hdfs里面遇到的问题

这个问题也困扰了很久,因为bolt是一行行输出的数据,如果写入到hdfs里面的话就要不断的新建文件-写入文件-关闭写入流,这里就会遇到一个问题,每次新建文件都会导致之前的数据被删掉,然后我goole了一下bolt写数据到hdfs的方法,那里也没有提供往数据的末尾继续添加的append方法,但是却意外的发现了官方提供的一个第三方jar包storm-hdfs-0.9.6(下载的时候一定要和storm版本号一致,这个方法是0.9.3以后出现的),他专门提供了往hdfs写文件的方法,并提供了丰富的参数来供用户选择(包括当文件满足多大以后新建一个文件继续写入,已经多长时间写入一次数据,每一行以什么为数据的分割符,输出文件的格式等)。因为我的需求是这一次运算要把上一次运算的结果文件都删掉,所以我以10m为文件的最大限度,下一次运算时候只保留上一次文件的最小的数据(必须保留上一次运行最后新建的文件,不然会报错)。

3本地调试可以但是放到集群就报找不到类的问题,这个问题百分十九十九都是缺少jar包导致,要保证每个子节点对应的路径下面都有工程所需要的jar包。随意maven是个很好的选择。

Storm学习中遇到的问题整理的更多相关文章

  1. storm学习路线指南

    关于对storm的介绍已经有很多了,我这里不做过多的介绍,我介绍一下我自己的学习路线,希望能帮助一些造轮子的同学走一些捷径,毕竟我也是站在前人总结整理的基础上学习了,如果有不足之处,还请大家不要喷我. ...

  2. 有关JAVA基础学习中的集合讨论

        很高兴能在这里认识大家,我也是刚刚接触后端开发的学习者,相信很多朋友在学习中都会遇到很多头疼的问题,希望我们都能够把问题分享出来,把自己的学习思路整理出来,我们一起探讨一起成长.    今天我 ...

  3. Storm学习笔记 - 消息容错机制

    Storm学习笔记 - 消息容错机制 文章来自「随笔」 http://jsynk.cn/blog/articles/153.html 1. Storm消息容错机制概念 一个提供了可靠的处理机制的spo ...

  4. Storm学习笔记 - Storm初识

    Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...

  5. 深度学习中dropout策略的理解

    现在有空整理一下关于深度学习中怎么加入dropout方法来防止测试过程的过拟合现象. 首先了解一下dropout的实现原理: 这些理论的解释在百度上有很多.... 这里重点记录一下怎么实现这一技术 参 ...

  6. golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

    golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...

  7. TensorFlow学习笔记——深层神经网络的整理

    维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”.因为深层神经网络是实现“多层非线性变换”最常用的一种方法,所以在实际中可以认为深度学习就是深度神经网络的代名词.从 ...

  8. zz深度学习中的注意力模型

    中间表示: C -> C1.C2.C3 i:target -> IT j: source -> JS sim(Query, Key) -> Value Key:h_j,类似某种 ...

  9. 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用

    模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...

随机推荐

  1. 理解NLP中的卷积神经网络(CNN)

    此篇文章是Denny Britz关于CNN在NLP中应用的理解,他本人也曾在Google Brain项目中参与多项关于NLP的项目. · 翻译不周到的地方请大家见谅. 阅读完本文大概需要7分钟左右的时 ...

  2. io流中的装饰模式对理解io流的重要性

    为了说明 io流中的装饰者模式对理解io流的重要性,我想先简要介绍以下io的装饰模式. 装饰(decorator)你也可以翻译成修饰.比如:一个会精通化学数学的物理学家.在这个"物理学家&q ...

  3. Windows Time Client

    Timezone: UTC Coordinated Universal Time ====Perform by Local / administrator must,configure Time se ...

  4. postfix导致maillog填满磁盘空间的巨坑!

    双休日回家pull在公司修改的代码...于是菜鸟的linux探索之路开始了 1.df -f发现磁盘又占满了(之前是node的error) 2.发现maillog整整10个G,无数条(Jul 7 04: ...

  5. es6+最佳入门实践(11)

    11.async函数 async 函数是什么?一句话,它就是 Generator 函数的语法糖.通俗的说就是Generator函数的另一种写法,这种写法更简洁,除此之外,async函数还对Genrat ...

  6. Spring任务调度<task:scheduled-tasks>【含cron参数详解】 (转载)

    Spring内部有一个task是Spring自带的一个设定时间自动任务调度 task使用的时候很方便,但是他能做的东西不如quartz那么的多! 可以使用注解和配置两种方式,配置的方式如下 引入Spr ...

  7. MyBatis对象关联关系---- association与collection

    Mybatis处理“一对多”的关系时,需要用到associasion元素.处理”多对一“用collection元素来实现(这两个元素在之前mapper文件中提到过). 本例子中,假设一名User可以有 ...

  8. 【HDU4405】Aeroplane chess [期望DP]

    Aeroplane chess Time Limit: 1 Sec  Memory Limit: 32 MB[Submit][Stataus][Discuss] Description Hzz lov ...

  9. 【BZOJ2286】【SDOI2011】消耗战 [虚树][树形DP]

    消耗战 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 在一场战争中,战场由n个岛屿和n-1 ...

  10. 9张图让你明白什么叫做"一坨屎"一样的iOS垃圾代码

    前言:这是一个两万余行的商业项目,但代码质量却不敢恭维!     //本文永久链接,转载请注明出处:http://www.cnblogs.com/ChenYilong/p/3489939.html  ...