zoukankan      html  css  js  c++  java
  • Storm入门,看这篇就够了

    部分一:Srorm 简介

    1.1 Storm是实时的数据流,Hadoop是批量离线数据

    起源背景

    • Twitter 开源的一个类似于Hadoop的实时数据处理框架
    • Storm是由Nathan Marz 在BackType公司【做社交数据分析,数据量大】工作中实现的,这家公司后来被Twitter收购。

    Ps:·Hadoop分布式存储和分布式计算两个难题全部解决了。但是缺点就是不能实时处理数据,Storm的作者就像写一个这样实时数据处理场景的框架出来

    1.2 Storm应用场景【实时处理数据】
    • 推荐系统:实时推荐,根据下单或加入购物车等操作
    • 网站统计:实时销量,流量统计
    • 监控预警系统,金融系统
    1.3Storm特性
    • 扩展性强,当计算能力不足时,可以进行横向扩展机器
    • 保证数据不丢失,且数据可以消费一次或多次
    • 容错性好,消息处理过程出现异常,会进行重试
    • 语言无关性:storm程序可以使用各种语言进行编写

    部分2 Storm原理

    2.1拓展:大数据框架都有哪些架构类型?

    主从架构:简单高效,单主节点存在单点问题
    HDFSYARNStormHbaseSparkFlink

    对称架构:复杂,效率较低,无单点问题,更加可靠
    ZookeeperKafka [会进行主节点的选举]

    Storm的主从架构

    • Nimbus 主节点
    • Sipervisor 从节点

    Nimbus—zookeeper--supervisor

    Storm组件:Nimbus

    • 接收客户端的topo代码,拆分成多个task,将task信息存入zk,并将task分配给Supervisor,将映射关系存入ZK,并进行故障检测

    • 类比:部门经理将需求拆分为 多个任务(每个任务有多个模块) 将这些任务写入项目文档中去,,并将每个任务与每一程序员进行对应

    Storm组件:Supervisor

    • 从Nimbus目录读取代码,从zk上读取Nimbus分配的task
    • 启动工作进程Worker
    • 监控每一个工作进程Worker

    Storm 组件:Worker

    • 从zk上读取分配的task,并计算出task需要给哪些task发信息
    • 启动一个或多个Execucor线程执行任务Task

    Storm组件:Zookeeper

    • Nimbus与Supervisor进行通信(分配任务与心跳)
    • Supervisor与Worker进行通信(分配任务和心跳)
    • Nimbus高可用(HA机制)

    动手实践

    • Zookeeper简介与集群配置【Storm的各个组件间是通过这个组件进行通信】
    • Zookeeper 的核心,单机和集群的配置方法
    • Storm的单机和集群环境的搭建

    部分3.Zookeeper简介与集群配置【Storm的各个组件间是通过这个组件进行通信】

    简介:
    Zookeeper是一个开源的分布式协调服务的框架,使各个机器进行之间进行通信

    3.1核心功能:
    • 文件系统
    • 通知机制

    文件系统:
    类似于linux的文件系统目录结构,从根目录(/)开始

    1.每一个目录都是一个znode节点

    2.每一个znode节点可直接存储数据

    3.类型:持久化,持久化顺序,临时,临时顺序

    通知机制:

    • 客户端监听关心的znode节点
    • Znode节点有变化(数据改变、删除、子目录添加删除),通知客户端处理
    3.2 zookeeper的安装

    下载:直接去官网:zookeeper.apache.org或CDH5进行下载
    /opt/soft [下载位置]
    /opt/module 【解压位置】
    下载 *.tar.gz
    解压 tar –zxvf *tar.gz –C /apps

    解压后的主要目录结构:
    bin:包含

    • zkCli.sh 【命令行客户端,可以去连接到这个文件系统,类似于hadoop fs】
    • zkCleanup.sh [zk是一个小型文件系统,用于清理数据信息,保证各个节点的数据一致]
    • zkEnv.sh [环境变量的一些东西]
    • zkServer.sh 【zk服务器的启动停止等操作】

    conf:包含

    • log4j.properties 日志输出级别
    • zoo_sample.cfg mv zoo_sample.cfg zoo.cfg
    • [tickTime:客户端与zk服务器的心跳时间,各个znode节点也要保持心跳]
    • InitLimit 启动集群时候,选举Nimbus节点的最大时间 tickTime* InitLimit
    • SyncLimit 集群中各个znode节点进行数据同步时候,保持数据一致性,进行数据同步的最大时间,超过这个时间,数据会同步失败
    • dataDir zookeeper是一个小型的文件系统,将数据存放在哪里配置
    • clientPort 客户端访问zk服务器的端口号2181去连接到这个服务器

    在解压后的目录新建一个data的目录用于存放zk的数据
    将$ZK_HOME/data 替换conf/zoo.cfg 中的dataDir

    启动bin/zkServer.sh start
    Jps
    Or
    bin/zkServer.sh status

    • standalone状态
    3.3 zk的命令行客户端

    去连接zk服务器
    bin/zkCli.sh
    这样会连接本地的zk服务器‘
    里面的操作类似于linux的操作
    输入ls
    查看根目录有什么 ls /
    查看目录下面的数据 get /
    创建目录 create /test 111
    查看数据 get /test 得到111
    修改数据 set /test 222
    再次查看: get /test 得到222
    删除数据rmr /test
    再次查看 ls / 无test目录

    3.4 zookeeper的集群搭建(推荐1,3,5这样的节点数,在进行节点选举的时候,保证能选举一个主节点出来)

    启动三个机器
    配置第一台
    步骤一:在单机的基础(解压后修改dataDir的目录)上,添加配置项
    server. 这个id是唯一的
    2888端口 服务器之间是需要进行数据的同步的
    3888端口 集群在启动的时候进行选举Nimbus节点

    server.1=192.168.1.1:2888:3888
    server.2=192.168.1.2:2888:3888
    server.3=192.168.1.3:2888:3888
    步骤二: 在什么地方进行存储,当前机器是哪一个ID
    在$ZK_HOME/data 目录下 新建文件myid 用于存储这个id
    Vim $ZK_HOME/data/myid 写入1 :wq即可
    步骤三:拷贝第一台服务器到其余两台服务器上面去

    Scp –r zookeeper-3.4.5/ root@192.168.1.2:/opt/module
    即可
    在这之前可以配置ssh的免密码登录

    拓展:
    1.HOSTNAME主机名:vim /etc/sysconfig/network

    2.配置ip与主机名之间的映射关系
    Vim /etc/hosts
    192.168.1.1 hadoop001
    192.168.1.2 hadoop002
    192.168.1.3 hadoop003

    启动zk集群
    在每一台上面都要进行启动,bin/zkServer.sh start
    Bin/zkServer.sh status 状态为:leader 主节点
    Bin/zkServer.sh status 状态为:follower 从节点

    ZKcli从1-2-3
    192.168.1.1可以使用bin/zkCli.sh -server 192.168.1.2:2181
    进入之后,connect 192.168.1.3:2181

    部分4 Storm的安装配置

    单机环境的安装配置
    下载啊storm.apache.org 或CDH5 1.1.0 ,1.2.1等版本
    解压 tar –zxvf storm.tar.gz –C /opt/module

    Storm的启动是需要依赖于zookeeper服务的
    在这之前,先使用单个zk服务(单节点)

    Storm解压后的目录
    bin 包含

    • storm 核心脚本,可以通过这个脚本进行启动
    • Storm.py 是一个python脚本

    Conf 包含

    • Storm.yaml最核心的配置文件
    • storm.zookeeper.servers
    • nimbus.seeds
    • drpc.servers
      暂时不做任何修改

    启动主节点
    bin/storm nimbus &
    启动从节点
    bin/storm supervisor &
    启动UI
    bin/storm ui &
    启动日志
    bin/storm logviewer &

    ps:nohup java –jar hh.jar &
    nohup + & 客户端和虚拟机是不需要保持连接的,即当前输入的命令界面是可以进行关闭的

    Storm性能调优
    为了解决数据不一致的问题,我们先把zookeeper的data目录下先删除,保持一致
    每个机器上执行
    rm –rf $ZK_HOME/data
    mkdir $ZK_HOME/data
    vim $ZK_HOME/data/myid 写入相应的 1,2,3等 :wq

    每个机器上启动zookeeper
    bin/zkServer.sh start

    开始配置storm的单机环境为集群环境配置

    Vim #STORM_HOME/conf/storm.yaml
    storm.zookeeper.servers:

    • “192.168.1.1”
    • “192.168.1.2”
    • “192.168.1.3”
      Nimbus.seeds: [“192.168.1.1”,”192.168.1.2”]

    就简单做这样的操作就 可以了
    接着 拷贝storm文件到其余的机器上面去

    就可以启动storm了

    启动主节点【第一台机器上】
    Nohup bin/storm nimbus &
    启动从节点【第二台机器上】
    Nohup bin/storm supervisor &
    启动UI
    可以在第一台 也可以在第二台上面
    nohup bin/storm ui
    WebUI查看:
    192.168.1.2:8080/index.html

    这里可以做节点故障转义的实验

    更多文章 Storm构建实时流处理 https://blog.csdn.net/liuge36/article/category/8004011

  • 相关阅读:
    百万级数据迁移方案测评小记
    EFCore-一对一配置外键小记2
    mpvue实战-手势滑动导航栏
    React-Native WebView使用本地js,css渲染html
    Dubbo测试环境服务调用隔离这么玩对么
    Kitty中的动态线程池支持Nacos,Apollo多配置中心了
    嘘!异步事件这样用真的好么?
    一时技痒,撸了个动态线程池,源码放Github了
    熬夜之作:一文带你了解Cat分布式监控
    这个Maven依赖的问题,你敢说你没遇到过
  • 原文地址:https://www.cnblogs.com/liuge36/p/10261011.html
Copyright © 2011-2022 走看看