Storm详解与集群环境搭建

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 相关术语
  1. Nimbus

Strom 集群主节点,负责资源分配和任务调度

  1. Supervisor

Strom 集群工作节点,接受Nimbus分配任务,管理Worker

  1. Worker

Supervisor 下的工作进程,具体任务执行

  1. Task

Worker下的 工作线程,0.8版本之后表示逻辑线程

  1. Topology

实时计算逻辑,计算拓扑,由Spout 和Bolt组成的图状结构

  1. Spout

Strom 编程模型中的消息源,可进行可靠传输(ACK/Fail 机制)

  1. Bolt

Strom 编程模型中的处理组件,定义execute 方法进行实际的数据处理逻辑

  1. Stream

拓扑中的消息流,传输的对象是Tuple

  1. Tuple

一次消息传递的基本单元

  1. 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结合
  1. 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 (源码文件安装)
  1. 下载源码安装包文件 : 下载地址:git@git.coding.net:gaohueric/SoftWare.git
  2. 解压压缩包 : tar -zvcf python-2.7.1XXX.tgz
  3. 执行配置文件 :进入python 目录下执行 ./configure
  4. 执行编译命令 make
  5. 执行安装命令: make install
  6. 验证是否安装成功 : 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

  目录