This commit is contained in:
luoxiang 2019-05-30 23:42:29 +08:00
parent b2a53fa493
commit 642c344ecb
3 changed files with 19 additions and 18 deletions

View File

@ -89,7 +89,8 @@ maven-assembly-plugin是官方文档中介绍的打包方法来源于官方
```xml
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0
http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>

View File

@ -26,21 +26,21 @@
### 1.2 Streams
`stream`是Storm中的核心概念。一个`stream`是一个无界的、以分布式方式并行创建和处理的`Tuple`序列。Tuple可以包含大多数基本类型以及自定义类型的数据。简单来说Tuple就是流数据的实际载体stream就是一系列Tuple。
`Stream`是Storm中的核心概念。一个`Stream`是一个无界的、以分布式方式并行创建和处理的`Tuple`序列。Tuple可以包含大多数基本类型以及自定义类型的数据。简单来说Tuple就是流数据的实际载体Stream就是一系列Tuple。
### 1.3 Spouts
`Spouts`是流数据的源头一个Spout 可以向不止一个`Streams`中发送数据。`Spout`通常分为**可靠**和**不可靠**两种:可靠的` Spout`能够在失败时重新发送 Tuple, 不可靠的`Spout`一旦把Tuple 发送出去就置之不理了。
`Spouts`是流数据的源头一个Spout 可以向不止一个`StreamS`中发送数据。`Spout`通常分为**可靠**和**不可靠**两种:可靠的` Spout`能够在失败时重新发送 Tuple, 不可靠的`Spout`一旦把Tuple 发送出去就置之不理了。
### 1.4 Bolts
`Bolts`是流数据的处理单元,它可以从一个或者多个`Streams`中接收数据,处理完成后再发射到新的`Streams`中。`Bolts`可以执行过滤(filtering),聚合(aggregations),连接(joins)等操作,并能与文件系统或数据库进行交互。
`Bolts`是流数据的处理单元,它可以从一个或者多个`StreamS`中接收数据,处理完成后再发射到新的`StreamS`中。`Bolts`可以执行过滤(filtering),聚合(aggregations),连接(joins)等操作,并能与文件系统或数据库进行交互。
### 1.5 Stream groupings分组策略
<div align="center"> <img width="400px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/topology-tasks.png"/> </div>
`spouts``bolts`在集群上执行任务时是由多个Task并行执行如上图每一个圆圈代表一个Task。当一个tuple需要从Bolt A发送给Bolt B执行的时候程序如何知道应该发送给Bolt B的哪一个Task执行呢
`spouts``bolts`在集群上执行任务时是由多个Task并行执行(如上图每一个圆圈代表一个Task)。当一个Tuple需要从Bolt A发送给Bolt B执行的时候程序如何知道应该发送给Bolt B的哪一个Task执行呢
这是由Stream groupings分组策略来决定的Storm中一共有如下8个内置的Stream Grouping。当然你也可以通过实现 `CustomStreamGrouping`接口来实现自定义Stream分组策略。
@ -50,9 +50,9 @@
2. **Fields grouping**
Streams通过grouping指定的字段(field)来分组。假设通过`user-id`字段进行分区,那么具有相同`user-id`的Tuple就会发送到同一个Task。
Streams通过grouping指定的字段(field)来分组。假设通过`user-id`字段进行分区,那么具有相同`user-id`的Tuples就会发送到同一个Task。
3. **Partial Key grouping **
3. **Partial Key grouping**
Streams通过grouping中指定的字段(field)来分组,与`Fields Grouping`相似。但是对于两个下游的Bolt来说是负载均衡的可以在输入数据不平均的情况下提供更好的优化。
@ -64,17 +64,17 @@
整个Streams会进入Bolt的其中一个Task。通常会进入id最小的Task。
6. **None grouping **
6. **None grouping**
当前None grouping 和Shuffle grouping等价都是进行随机分发。
7. **Direct grouping **
7. **Direct grouping**
Direct grouping只能被用于direct streams 。使用这种方式需要由Tuple的**生产者**直接指定由哪个Task进行处理。
Direct grouping只能被用于direct streams 。使用这种方式需要由Tuple的生产者直接指定由哪个Task进行处理。
8. **Local or shuffle grouping**
如果目标bolt有tasks和当前bolt的tasks处在同一个worker进程中那么则优先将tuples shuffled到处于同一个进程的目标bolt的tasks上这样可以最大限度地减少网络传输。否则就和普通的`Shuffle Grouping`行为一致。
如果目标Bolt有Tasks和当前Bolt的Tasks处在同一个Worker进程中那么则优先将Tuple Shuffled到处于同一个进程的目标Bolt的Tasks上这样可以最大限度地减少网络传输。否则就和普通的`Shuffle Grouping`行为一致。
@ -87,19 +87,19 @@
也叫做Master Node是Storm集群工作的全局指挥官。主要功能如下
1. 通过Thrift接口监听并接收Client提交的Topology
2. 根据集群Workers的资源情况将Client提交的Topology进行任务分配分配结果写入zookeeper ;
2. 根据集群Workers的资源情况将Client提交的Topology进行任务分配分配结果写入Zookeeper;
3. 通过Thrift接口监听Supervisor的下载Topology代码的请求并提供下载 ;
4. 通过Thrift接口监听UI对统计信息的读取zookeeper上读取统计信息返回给UI;
4. 通过Thrift接口监听UI对统计信息的读取Zookeeper上读取统计信息返回给UI;
5. 若进程退出后,立即在本机重启,则不影响集群运行。
### 2.2 Supervisor进程
也叫做Worker Node , 是Storm集群的资源管理者按需启动worker进程。主要功能如下
也叫做Worker Node , 是Storm集群的资源管理者按需启动Worker进程。主要功能如下
1. 定时从Zookeeper检查是否有新Topology代码未下载到本地 并定时删除旧Topology代码 ;
2. 根据Nimbus的任务分配计划在本机按需启动1个或多个Worker进程并监控所有的worker进程的情况
2. 根据Nimbus的任务分配计划在本机按需启动1个或多个Worker进程并监控所有的Worker进程的情况
3. 若进程退出,立即在本机重启,则不影响集群运行。
@ -114,7 +114,7 @@ Nimbus和Supervisor进程都被设计为**快速失败**(遇到任何意外情
Storm集群的任务构造者 构造Spoult或Bolt的Task实例启动Executor线程。主要功能如下
1. 根据Zookeeper上分配的Task在本进程中启动1个或多个Executor线程将构造好的Eask实例交给Executor去运行;
1. 根据Zookeeper上分配的Task在本进程中启动1个或多个Executor线程将构造好的Task实例交给Executor去运行
2. 向Zookeeper写入心跳

View File

@ -96,7 +96,7 @@ supervisor.slots.ports:
先启动Zookeeper集群之后再启动Storm集群。因为要启动多个进程所以统一采用后台进程的方式启动进入到`${STORM_HOME}/bin`目录下,依次执行下面的命令:
**hadoop001**
**hadoop001 **
因为hadoop001是nimbus节点所以需要启动nimbus服务和ui服务同时hadoop001也是supervisor节点所以需要启动supervisor服务和logviewer服务
@ -111,7 +111,7 @@ nohup sh storm ui &
nohup sh storm logviewer &
```
**hadoop002 & hadoop003**
**hadoop002 & hadoop003 **
hadoop002和hadoop003都只需要启动supervisor服务和logviewer服务