Storm学习中遇到的问题整理
在编写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学习中遇到的问题整理的更多相关文章
- storm学习路线指南
关于对storm的介绍已经有很多了,我这里不做过多的介绍,我介绍一下我自己的学习路线,希望能帮助一些造轮子的同学走一些捷径,毕竟我也是站在前人总结整理的基础上学习了,如果有不足之处,还请大家不要喷我. ...
- 有关JAVA基础学习中的集合讨论
很高兴能在这里认识大家,我也是刚刚接触后端开发的学习者,相信很多朋友在学习中都会遇到很多头疼的问题,希望我们都能够把问题分享出来,把自己的学习思路整理出来,我们一起探讨一起成长. 今天我 ...
- Storm学习笔记 - 消息容错机制
Storm学习笔记 - 消息容错机制 文章来自「随笔」 http://jsynk.cn/blog/articles/153.html 1. Storm消息容错机制概念 一个提供了可靠的处理机制的spo ...
- Storm学习笔记 - Storm初识
Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...
- 深度学习中dropout策略的理解
现在有空整理一下关于深度学习中怎么加入dropout方法来防止测试过程的过拟合现象. 首先了解一下dropout的实现原理: 这些理论的解释在百度上有很多.... 这里重点记录一下怎么实现这一技术 参 ...
- golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换
golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...
- TensorFlow学习笔记——深层神经网络的整理
维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”.因为深层神经网络是实现“多层非线性变换”最常用的一种方法,所以在实际中可以认为深度学习就是深度神经网络的代名词.从 ...
- zz深度学习中的注意力模型
中间表示: C -> C1.C2.C3 i:target -> IT j: source -> JS sim(Query, Key) -> Value Key:h_j,类似某种 ...
- 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用
模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...
随机推荐
- Hibernate domain对象说明
一个domain对象对应于数据库的一张表(也可以表示出表关系) domain对象必须带一个无参构造函数 建议有一个无意义id,作为主键 建议非final,否则无法使用Hibernate的高级特性(懒加 ...
- dp类模板
1.n串最长公共子序列 #include<cstdio> #include<cstring> #include<algorithm> using namespace ...
- (转载)Java中如何遍历Map对象的4种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- [Leetcode] Best time to buy and sell stock iii 买卖股票的最佳时机
Say you have an array for which the i th element is the price of a given stock on day i. Design an a ...
- How do I see what character set a database / table / column is in MySQL?
Q: How do I see what the character set that a MySQL database, table and column are in? Is there some ...
- Watto and Mechanism Codeforces Round #291 (Div. 2)
C. Watto and Mechanism time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- c++(类)构造函数、复制构造函数
复制构造函数是一种特殊的构造函数,它的作用是用一个已经存在的对象去初始化另一个对象.一般情况下不需要自行定义复制构造函数,系统默认提供一个逐个复制成员值的复制构造函数. 何时要使用呢? 1.将新对象初 ...
- Cannot load project: com.intellij.ide.plugins.PluginManager$StartupAbortedException
今天电脑突然蓝屏,idea异常关闭,开机重启后,打开idea,点击项目出现 Cannot load project: com.intellij.ide.plugins.PluginManager$St ...
- javascript提示抖动实现方法
css代码: <style type="text/css"> #div1{ width:200px; height:200px; background-color:or ...
- Things To Do Before NOI2017
TC div1 10套 数据结构 25题 网络流 10题 字符串 20题 数学 15题 图论 15题 计算几何 5题 提交答案 5题 嗯...先这些吧... 以上所有题目,博客都会有更新--- NOI ...