[Storm] No data flows into bolt
最近在HDP2.1的HBase环境中安装了一个Storm测试机器(单节点,JDK8),遇到了几个问题,记录下来。
尝试步骤
1. 使用和HBase一样HDP版本,直接安装Storm
yum install storm
顺利安装完了。nimbus, supervisor and ui都能顺利起来。一个小插曲是,中途需要修改UI使用的端口,默认的8080被占用。所幸只需要添加配置 ui.port 就解决了。
然后提交topology后,怎么都跑不起来。查看version,蒙逼了,Storm的版本是0.9.1。而我需要的至少0.9.3
教训一:做之前,需要弄清楚做完后是否满足自己的需求。绕了一大圈,才发现安装的版本不对。
2. 重新安装Storm 0.9.3
由于目前机器上只有HDP2.1的配置,可查看 /etc/yum.repo.d/,后来找了一个HDP2.2的repo配置,放在了 /etc/yum.repo.d/下面,所幸什么都不需要重启,yum install直接就发现这个repo 了。就这样storm安装完成了。不可漏掉的是,使用HDP安装Storm前,需要手动先 adduser storm。因为Storm安装不会帮我们安装(坑,明明其他的都不需要特意创建用户)
3. 配置Storm运行参数
1)首先需要配置Storm JDK8环境。配置 conf/storm-env.sh + storm用户下的 ~/.bash_profile
2) 配置 conf/storm.yaml。这个就不用多说了
4. Storm跑起来
nohup storm nimbus/supervisor/ui &
一切似乎很顺利。然后接下来发生了事情,坑了我整整一天的时间。
提交完Topology,check log 发现Spout emitting数据似乎没有进到下一个Bolt。NO DATA flows into Bolt,而且UI上bolt的input stats是empty,即Bolt连input stream都没有detect到!从代码上看这是不可能发生的事。
5. 接下来开始了漫漫的DEBUG之路...
TRY1: 想到之前自己改过 ui.port。当时发现有个配置storm.exhibitor.port和ui.port都使用8080,开始怀疑是不是修改ui.port,是不是应该修改一下也storm.exhibitor.port。修改并重启storm所有服务。然并卵。
storm.exhibitor.port:the port Storm will use to connect to each of the exhibitor servers. Apache Exhibitor is a supervisor system for ZooKeeper.
ui.port与storm.exhibitor.port是否有直接关系,不得而知了。但是至少它不是问题的根本原因
TRY2: 修改topology的并发度,即修改bolt的tasks个数。然并卵。
TRY3: Enable Storm debug模式。因为checkout log,看到很多异常log,比如 Spout Failing,Timeout之类的。但是就是基本看不到任何Exception,ERROR。
所以想到大概是我没有把DEBUG模式打开吧。回去看代码发现
stormConf.put(stormConf.TOPOLOGY_DEBUG, true);
赫然在目。恩,肯定是开的还不够,check网上的说明,看见了
// When set to true, Storm will log every message that's emitted.
stormConf.put(stormConf.TOPOLOGY_DEBUG, true);
// same to above
stormConf.setDebug(true);
人家还加了 stormConf.setDebug(true)。病急乱投医,修改后还是没什么用。现在想来那是当然的,我也是脑子被驴踢了,set storm debug直接的效果导致log泛滥, every message级别的;而且 setDebug(true)也不是啥特别的,只不过是上面set debug的另一种写法。
TRY4: Disable spout/bolt 吐message这种log,太烦了。Disable Topology Debug功能。Topology LOG顿时清楚了,Exception无比清晰、醒目的出现在log中。
asm.4.0啥的没有加载到。想到听人说过Storm0.9.3不支持JDK8,问题就处在asm的版本上。最后把 asm 4.0换成 asm-all 5.0,重启storm集群(不重启,虽然storm classpath里面就能检测到变化,然后那只是假象)。OVER。
总结
Storm topology debug害人不浅。
数据不能从Spout流向Bolt,原来是asm出问题了。
[Storm] No data flows into bolt的更多相关文章
- Storm的数据处理编程单元:Bolt 学习整理
Bolt是Topology中的数据处理的单元,也是Storm针对处理过程的编程单元.Topology中所有的处理都是在这些Bolt中完成的,编程人员可以实现自定义的处理过程,例如,过滤.函数.聚集.连 ...
- 关于storm的Spout、Bolt、及其可靠性
本文导读: Component全家谱结构图 Spout分析 ——类图 ——分析(接口实现).结论 ——可靠的与不可靠的消息(推荐) Bolt分析 ——类图 ——分析(接口实现).结论 ——可靠的与不 ...
- Storm bolt重复消费问题解决
最近碰到一个storm的坑, 两个bolt都需要从kafkaSpout中获取数据进行各自的业务处理, bolt1的处理是幂等的, bolt2的处理是非幂等的, 上线后发现非幂等的bolt处理总是会处理 ...
- Big Data Ingestion and streaming product introduction
Flume Flume isdistributed system for collecting log data from many sources, aggregating it,and writi ...
- Storm源码分析--Nimbus-data
nimbus-datastorm-core/backtype/storm/nimbus.clj (defn nimbus-data [conf inimbus] (let [forced-schedu ...
- Storm基础
Storm基本概念 Storm是一个开源的实时计算系统,它提供了一系列的基本元素用于进行计算:Topology.Stream.Spout.Bolt等等. 在Storm中,一个实时应用的计算任务被打包作 ...
- Storm(2) - Log Stream Processing
Introduction This chapter will present an implementation recipe for an enterprise log storage and a ...
- Storm入门(十)Twitter Storm: Transactional Topolgoy简介
作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/736/twitter-stor ...
- Mysql增量写入Hdfs(二) --Storm+hdfs的流式处理
一. 概述 上一篇我们介绍了如何将数据从mysql抛到kafka,这次我们就专注于利用storm将数据写入到hdfs的过程,由于storm写入hdfs的可定制东西有些多,我们先不从kafka读取,而先 ...
随机推荐
- 如何实现可动态调整隐藏header的listview
(转自:http://blog.sina.com.cn/s/blog_70b9730f01014sgm.html) 需求:根据某种需要,可能需要动态调整listview的页眉页脚,譬如将header作 ...
- STM32C8T6 JTAG使用到PB3|PB4|PA13|PA14|PB15端口做普通IO时,需禁止JTAG!
GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIO ...
- Android APP 简单高效的禁用横竖屏切换
默认情况下,Android APP的界面会随着手机方向的改变而改变,当手机处于竖屏状态,APP的界面也处于竖屏状态,而当手机处于横屏状态,APP也会自动切换到横屏状态.一般情况下APP的界面都是为竖屏 ...
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...
- ORACLE 利用 REPLACE函数替换字段字符串
REPLACE(string,s1,s2) string 希望被替换的字符或变量 s1 被替换的字符串 s2 要替换的字符串 SQL> select replace(he love you,he ...
- h5+mui
参考链接http://blog.csdn.net/tbwood/article/details/42081861 待补充
- [LeetCode] Swap Nodes in Pairs 成对交换节点
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- 高品质开源工具Chloe.ORM:支持存储过程与Oracle
扯淡 这是一款高质量的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq.借助 lambda 表达式,可以完全用面向对象的方式就能轻松执行多表连接查询.分组查询.聚合查询.插入数据.批量删 ...
- .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息
在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...
- 使用Minicom基于串口调试HiKey
虽然通过adb shell调试方便,但是有些时候不得不借助于串口进行调试,比如测试suspend to ram之类的功能时,adb服务被关闭. 同时在minicom中也可以进入shell,进行操作. ...