strom 概述
Apache Strom 是自由开源的分布式实时计算系统
- 擅长处理海量数据
- 适用于数据实时处理而非批处理(比如Hadoop)
- 分布式系统,可以充分利用计算机集群资源
- 模型简单,易于适用
Strom 有以下几个核心概念:
- Topolopy: 计算拓扑,包含了应用程序的逻辑
- Stream: 消息流,关键抽象,没有边界的Tuple 序列
- Spout:消息流的源头,Topolog的消息生产者
- Bolt 消息处理单元,可以过滤,聚合,查询数据库
- Stream grouping: 消息分发策略,一共有6种,定义每个Bolt接受何种输入
- Reliability:可靠性,Strom 保证每个Tuple 都会被处理
- Task : 任务,每个Spout 和 Bolt 都是一个任务,每个任务都是一个线程
- Worker : 工作进程,每个工作进程中有多个Task.
Strom 计算模型
计算模型比较
Strom 优势
- 实时性
- 可伸缩性
- 容错性
- 确保数据不丢失
- 对多种程序设计语言的广泛支持
Strom 相关术语
- Nimbus
Strom 集群主节点,负责资源分配和任务调度
- Supervisor
Strom 集群工作节点,接受Nimbus分配任务,管理Worker
- Worker
Supervisor 下的工作进程,具体任务执行
- Task
Worker下的 工作线程,0.8版本之后表示逻辑线程
- Topology
实时计算逻辑,计算拓扑,由Spout 和Bolt组成的图状结构
- Spout
Strom 编程模型中的消息源,可进行可靠传输(ACK/Fail 机制)
- Bolt
Strom 编程模型中的处理组件,定义execute 方法进行实际的数据处理逻辑
- Stream
拓扑中的消息流,传输的对象是Tuple
- Tuple
一次消息传递的基本单元
- Stream Groupings 数据分组策略
- Shuffle Grouping : 随机分组,保证bolt 接受的tuple 数据相同
- Fields Grouping: 按字段分组,相同tuple会分到同一个bolt中。
- All Grouping : 按字段分组,相同tuple会分到同一个bolt中
- Global Grouping : 广播发送,每个tuple 会发送所有bolt中。
- Non Grouping : 全局分组,所有tuple 发送给task_id 最小的bolt
- Direct Grouping: 直接分组,需要手动制定bolt
- Custom Grouping: 自定义分组,自己实现分组方式
Strom 原理架构
Strom 架构图
数据处理流程图
Storm 的扩展 : 与YARN结合
YARN介绍:
YARN是Hadoop在2.0 中引入的资源管理器,Hadoop的资源管理组件
- Hadoop1.x 系列MapReduce 工作流程,JobTracker 负责资源管理以及任务调度,TaskTracer负责监控所在机器资源以及监控task执行情况。
- 架构存在的问题: JobTracker 单点故障,JobTrac ker 负荷过重,资源单一,资源分配不合理。
- Hadoop 2.x 解决方案,资源管理与任务调度拆分,Yarn负责资源管理,YARN组成,ResouceManager,NodeManager ,ApplicationMaster.
Strom 和YARN结合的优势
- 资源的弹性计算
- 共享底层存储
- 支持多版本共存
- 整体架构的统一
Linux 搭建 Strom 集群
Linux 下安装配置Zookeeper
查看linux 内核版本,版本号
uname -r
cat /etc/redhat-release
修改hostname
vim /etc/hosts
下载解压Zookeeper(git下载地址:git@git.coding.net:gaohueric/SoftWare.git)
tar -zxvf zookeeper-3.4.10.tar.gz
进入zookeeper 目录下
ls conf/
拷贝示例配置文件
cp conf/zoo_sample.cfg conf/zoo.cfg
添加host映射
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.129 hadoop
192.168.200.130 hadoop01
192.168.200.131 hadoop02
配置文件信息 :
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/hadoop/zookeeper/zkdata
dataLogDir=/usr/zookeeper/logs
server.1=hadoop:2888:3888
server.2=hadoop01:2888:3888
server.3=hadoop02:2888:3888
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
创建 dataDir
mkdir /usr/hadoop/zookeeper/zkdata
创建dataLogDir
mkdir /usr/hadoop/zookeeper/logs
创建pid文件 对应 三台服务器的server.X
server.1=hadoop:2888:3888
server.2=hadoop01:2888:3888
server.3=hadoop02:2888:3888
echo "1" > /usr/hadoop/zookeeper/zkdata/myid
echo "2" > /usr/hadoop/zookeeper/zkdata/myid
echo "3" > /usr/hadoop/zookeeper/zkdata/myid
配置zookeeper 环境变量,先pwd获取安装路径
路径 : /usr/hadoop/zookeeper/zookeeper-3.4.10
配置文件 :
vim /etc/profile
添加
export ZOOKEEPER_HOME=/usr/hadoop/zookeeper/zookeeper-3.4.10
export PATH=$ZOOKEEPER_HOME/bin:$PATH
执行命令让配置生效 . /etc/profile
启动Zookeeper 服务
zkServer.sh start
查看启动信息命令
zkServer.sh status
Linux 环境安装 Java 环境
解压jdk:tar -zxvf jdk-1.8XXX.gz
将下载的解压jdk 复制到 /usr/hadoop/java
配置环境变量:
vim /etc/profile
配置内容如下:
export JAVA_HOME=/usr/hadoop/java/jdk1.8.0_171
export JDK_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH
验证安装是否成功:
java -version
Linux 环境下安装Python (源码文件安装)
- 下载源码安装包文件 : 下载地址:git@git.coding.net:gaohueric/SoftWare.git
- 解压压缩包 : tar -zvcf python-2.7.1XXX.tgz
- 执行配置文件 :进入python 目录下执行 ./configure
- 执行编译命令 make
- 执行安装命令: make install
- 验证是否安装成功 : python –version
安装 Storm
storm ui >/dev/null 2>&1 &
storm nimbus >/dev/null 2>&1 &
storm supervisor >/dev/null 2>&1 &
-Djava.net.preferIPv4Stack=true
vim /usr/hadoop/storm/apache-storm-1.1.2/conf/storm.yaml
nohup storm supervisor &
nohup storm nimbus &
storm.zookeeper.servers:
- "hadoop"
- "hadoop01"
- "hadoop02"
nimbus.seeds: ["hadoop"]
storm.local.dir: "/usr/hadoop/storm/status"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
storm.zookeeper.servers:
- "hadoop"
- "hadoop01"
- "hadoop02"
nimbus.host: "hadoop"
storm.local.dir: "/usr/hadoop/storm/status"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703