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 ... 
随机推荐
- BZOJ2299 [HAOI2011]向量  【裴蜀定理】
			题目链接 BZOJ2299 题解 题意就是给我们四个方向的向量\((a,b),(b,a),(-a,b),(b,-a)\),求能否凑出\((x,y)\) 显然我们就可以得到一对四元方程组,用裴蜀定理判断 ... 
- 从零开始学习MXnet(一)
			最近工作要开始用到MXnet,然而MXnet的文档写的实在是.....所以在这记录点东西,方便自己,也方便大家. 我觉得搞清楚一个框架怎么使用,第一步就是用它来训练自己的数据,这是个很关键的一步. 一 ... 
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) C (用map 超时)
			C. Bear and Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ... 
- bzoj 3720 Gty的妹子树  树分块?瞎搞
			Gty的妹子树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2149 Solved: 781[Submit][Status][Discuss] D ... 
- domReady的兼容性实现方法
			一.为何要实现domReay方法? 举例: <!DOCTYPE html> <html lang="en"> <head> <meta c ... 
- ES6(ECMAScript2015) 基础知识 浅析
			1.块级作用域(let) { let fruit = “apple”; } console.log(fruit) 会报错,因为{ }大括号包含的区域为块级作用域,let在其中申明的变量只能在该块中生效 ... 
- apply()和call()
			每个函数都包含俩个非继承而来的方法:apply() 和 call(),这俩个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值,以扩充函数赖以运行的作用域.一般来讲,thi ... 
- HASHMAP原理解析,不错的文章
			http://blog.csdn.net/vking_wang/article/details/14166593 
- 计算n阶行列式的模板
			之前在学习计数问题的时候也在网上找了很多关于行列式的资料 但是发现很多地方都只介绍2\3阶的情况 一些论文介绍的方法又看不懂 然后就一直耽搁着 今天恰好出到这样的题目 发现标算的代码简介明了 还挺开心 ... 
- 利用ES6的Promise.all实现至少请求多长时间
			1.背景 我们都知道ajax请求可以加个timeout,就是最多请求多少时间,如果超过这个时间直接就报错. 这个是最多请求多长时间,我现在要做的是,最少要请求多长时间,然后才能执行后续的逻辑. 比如, ... 
