storm 提交集群运行,问题处理 (ClassNotFound异常)

Storm 启动流程

1.客户端运行 storm nimbus时,会调用 storm 的python脚本,该脚本为每个命令编写一个方法,每个方法都可以生成一条相应的java命令。
命令格式:

java -server xxx.ClassName -args

nimbus -----> Running: /export/servers/jdk/bin/java -server backtype.storm.deamon.nimbus
supervisor--> Running: /export/servers/jdk/bin/java -server backtype.storm deamon.supervisor

2.nimbus 启动之后,接受客户端提交任务
命令格式:

storm jar xxx.jar xxx驱动类 参数

该命令会执行 jar 包中的 main 方法,main 方法中会执行以下代码:

  • StormSubmitTopology(“mywordcount”,config,topologyBuilder.createTopology())
    topologyBuilder.createTopology() 会将程序员写的 spout 对象 和 bolt 对象进行序列化。会将用户的jar上传到 nimbus 物理节点的 /export/data/storm/workdir/nimbus/inbox 目录下,并且改名,改名规则是添加一个UUID字符串。
    在 nimbus 物理节点 /export/data/storm/workdir/nimbus/stormdist 目录下,有当前正在运行的 topology 的jar 包和配置文件,序列化对象文件。

3.然后进行任务分配,分配会产生一个 assignment 对象,该对象会保存到 zk中,目录是 /storm/assignments,该目录只保存正在运行的 toipology任务。
4.supervisor 通过 watch 机制,感知到 nimbus 在 zk 上的任务分配信息,从zk上拉取任务信息,分辨出属于自己的任务。
5.根据自己的任务信息,启动自己的 worker,并分配一个端口。
6.worker 启动之后,连接 zk ,拉取任务。 worker 通过反序列化,得到程序员自己定义的 spout 和 bolt 对象。
7.worker 根据任务类型,分别执行 spout 任务 或者 bolt 任务。
spout 的生命周期是:open, nextTuple, outPutFiled
bolt 的生命周期是:prepare, execute(tuple), outPutFiled

提交成功,ui页面
在这里插入图片描述

任务状态修改

在这里插入图片描述
查找任务名称,点击进入任务详情
修改任务状态即可

在这里插入图片描述

问题(ClassNotFound异常)

1.本地可以读取本地文件系统及java项目中的文件,但是提交集群后就不能读取了,storm只是将topology提交到了集群,所以只能在main方法中将需要读取的配置在提交topology之前读出来,然后再解析,而不是在spout和bolt中读取配置文件;

2.外部jar包也不会提交到集群,会有ClassNotFound异常,解决办法是将依赖包全部放进集群storm目录的lib目录下。

3.提交:storm jar .###.jar 包明.主类名 然后在ip:8080/index.html页面查看topology运行情况

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Storm是一个分布式实时计算系统,它可以在一个集群中运行多个计算节点,实时处理数据流。下面是Storm集群的工作流程以及运行时的原理: 1. 架构概述 Storm的集群架构包括以下几个主要的组件: - Nimbus:是Storm集群的主节点,负责协调和管理整个集群的运行。它负责分配任务、监控任务的执行情况、调度和负载均衡等工作。 - Supervisor:是Storm集群的工作节点,负责实际执行计算任务。每个Supervisor节点都会运行一个或多个工作进程(Worker),每个Worker执行一个或多个计算任务(Topology)。 - ZooKeeper:是一个分布式协调系统,用于协调Storm集群中各个组件之间的通信和协作。 - Topology:是Storm集群中的一个计算任务,由多个Spout和Bolt组成,用于实时处理数据流。Topology可以在Storm集群中部署和运行,由Nimbus节点分配到各个Supervisor节点上执行。 2. 工作流程 Storm集群的工作流程如下: - 开发Topology:首先需要开发一个Topology,包括定义Spout和Bolt的计算逻辑、数据流的处理方式等。 - 提交Topology:将Topology提交到Nimbus节点,由Nimbus节点负责分配任务到各个Supervisor节点上执行。 - 分配任务:Nimbus节点根据集群资源情况和负载均衡策略,将Topology的各个组件分配到不同的Supervisor节点上执行。 - 执行任务:Supervisor节点接收到任务后,启动对应的Worker进程,执行Topology的计算任务。 - 数据处理:Spout和Bolt组件接收输入数据,并按照定义好的处理方式进行数据转换、过滤、聚合等操作。 - 数据传输:Spout和Bolt之间通过数据流进行数据传输。数据流是Storm的核心概念,它用于实时传输数据,可以在Spout和Bolt之间建立任意的连接关系。 - 拓扑调度:Nimbus节点会监控集群中各个组件的运行情况,根据需要进行拓扑调度,例如动态调整任务分配、调整数据流连接方式等。 - 容错处理Storm集群具有较强的容错性,可以在节点失效、网络故障等情况下自动进行容错处理,确保数据处理的正确性和可靠性。 3. 运行时原理 Storm集群的运行时原理主要包括以下几个方面: - 数据流传输:Storm集群中的数据流是基于Tuple的,每个Tuple包含一个或多个字段,可以表示任意类型的数据。Spout和Bolt之间通过数据流传输Tuple,实现数据的实时处理和传输。 - 执行模型:Storm采用的是多线程模型,每个Worker进程会启动多个线程,用于处理数据流和计算任务。Spout和Bolt之间采用异步方式传递数据,可以充分利用多线程处理数据。 - 容错处理Storm集群具有较强的容错性,可以在节点失效、网络故障等情况下自动进行容错处理。例如,当一个节点出现故障时,Nimbus节点会将该节点上的任务重新分配到其他节点上执行,确保数据处理的正确性和可靠性。 - 负载均衡:Storm集群采用的是负载均衡策略,可以根据集群资源情况和任务负载情况,动态调整任务分配和数据流传输,实现集群资源的充分利用和任务的高效执行。 总的来说,Storm集群的架构和工作流程比较复杂,但是它提供了一种高效、可靠、实时的数据处理方案,可以应用于各种实时数据分析和处理场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值