storm--基础面试题2
-
1.提高storm并发度?
1.worker进程
2.exectors(线程)
3.Task(线程)
在worker下可以可以采用多线程的方式运行程序。task是运行在exector里面的
文章图片
worker运行在从节点里面,从节点可以启动多个worker。灰色的是exectors.一个work下多个exector。exector下可以运行一个task也可以运行两个task.task是最小的处理单元。spout和bolt都是运行在task之上。
一个worker进程执行的是一个topo的子集。
一个worker进程会启动1…n个executor线程来执行一个topo的component
一个运行topo就是由集群多台物理机上的多个worker进程组成。
executor是一个被worker进程启动的单独线程,每个executor只会运行一个topo的一个component.
task是spout或者bolt代码的最小执行单元。
ack会占用一个task。
supervisor节点上可以运行多个worker进程,一个进程可以启动多个线程的,所以我们可以在worker多个executor,在executor中运行task。默认情况下task的数目等于executor线程数目,即1个executor线程只运行1个task。
worker --默认是1个
文章图片
调整
worker>executor(执行线程)>task
增加worker进程,增加executor 增加task
setNumberworker setnumbertasks 来提高并行度。
-
2.当Nimbus或Supervisor守护进程死亡时会发生什么?
Nimbus或supervisor的死亡不会影响worker流程。这与Hadoop形成鲜明对比,如果JobTracker死亡,所有正在运行的作业都将丢失.
-
3.Nimbus是单点故障吗?
storm可以配置HA
-
4.Storm如何保证数据处理?
worker死了
nimbus可以启动worker.如果它在启动时连续失败并且无法接受Nimbus的心跳,Nimbus将重新安排worker。
节点死了
分配给该计算机的任务将超时,Nimbus会将这些任务重新分配给其他计算机。
-
5.storm的可靠性如何实现,包括spout和bolt两部分?
spout端:
对于tuple树上的每个bolt进行确认应答,spout才会调用ack来表明这个消息被完全处理,如果任何一个bolt处理的tuple报错。调用ack.
ack机制与fail机制
在编写spout的nextTuple时,最终你必须要emit一个Tuple,记住,要这么做:
//发射出去的是数据信息和数据唯一编号。
this.collector.emit(new Values(…), msgID);
一定要有msgID这个参数,一定要有!否则Storm便不会跟踪这个Tuple。
collector.emit(tuple, new Values(…));
而不是:
collector.emit(new Values(…));
为了保证数据能正确的被处理, 对于spout产生的每一个tuple, storm都会进行跟踪, 这里面涉及到ack/fail的处理, 如果一个tuple处理成功, 会调用spout的ack方法, 如果失败, 会调用fail方法. 而在处理tuple的每一个bolt都会通过OutputCollector来告知storm, 当前bolt处理是否成功. 为了了解OutputCollector的ack/fail与Spout的ack/f ail之间的关系, 我调试跟踪了一下storm代码.
bolt的可靠性:bolt也是一样,通过ack和fail机制。
-
6.storm的如何处理反压机制?
2.最新版本是自动反压机制,监控bolt中的接收队列,当超过高水位时专门的线程把反压信息写入到zookeeper中。zookeeper上watch会通知所有worker进程反压,降低spout发送速度。
-
7.storm分组策略方式?
2.Fields Grouping:按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的Bolts里的一个task,而不同的userid则会被分配到不同的bolts里的task。
3.All Grouping:广播发送,对于每一个tuple,所有的bolts都会收到–同一份数据可能被处理三次。
-
8.storm怎么实现对单词的计数?可靠的单词计数?
spout 动态的接受数据源信息。
语句分割bolt:将每个句子分割成单词
单词技术bolt:把语句分割的bolt的输出作为输入,统计每个单词的数量。
上报bolt.当收到一个tuple时,上报bolt会更新表中的计数数据,并且将值在终端打印。
推荐阅读
- python|python 第7讲 面向对象
- kafka|kafka 基础知识 第一讲
- 大数据|15道经典大数据面试题
- 大数据|大数据面试题汇总
- 【面试】社招斩获大厂Offer全攻略
- 这样|这样 PDF 的技术简历,HR根本不想看,谈何到面试官手中()
- 字符集编码(三)(Unicode)
- c/c++|step1 . day2(Linux系统基础知识)
- 大学计算机基础徐久成pdf,大学计算机基础徐久成王岁花版第1章.pptx
- 大学计算机基础徐久成pdf,大学计算机基础徐久成王岁花版第7章.pptx