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拓展:大数据框架都有哪些架构类型?
主从架构:简单高效,单主节点存在单点问题
HDFS\YARN\Storm\Hbase\Spark\Flink
对称架构:复杂,效率较低,无单点问题,更加可靠
Zookeeper\Kafka [会进行主节点的选举]
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
Storm入门,看这篇就够了的更多相关文章
- React入门看这篇就够了
摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...
- [转帖]Zookeeper入门看这篇就够了
Zookeeper入门看这篇就够了 https://my.oschina.net/u/3796575/blog/1845035 Zookeeper是什么 官方文档上这么解释zookeeper,它是一个 ...
- [转]React入门看这篇就够了
摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...
- .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...
- Zookeeper入门看这篇就够了!!
Zookeeper是什么 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名 ...
- ZooKeeper 入门看这篇就够了
什么是 ZooKeeper? ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务.ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原 ...
- EFCore 6.0入门看这篇就够了
前言 作为一直在dotNet行业耕耘的码农,这几年在大大小小项目中也涉及到了许多ORM框架,比如:EFCore,Dapper,NHibernate,SqlSugar等等,这些ORM都有各自的优缺点,大 ...
- Zookeeper入门看这篇就够了
https://blog.csdn.net/java_66666/article/details/81015302
- .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了
作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...
随机推荐
- Java虚拟机详解(七)------虚拟机监控和分析工具(1)——命令行
通过前面的几篇博客,我们介绍了Java虚拟机的内存分配以及内存回收等理论知识,了解这些知识对于我们在实际生产环境中提高系统的运行效率是有很大的帮助的.但是话又说回来,在实际生产环境中,线上项目正在运行 ...
- Codeforces 697D
题意略. 思路: 对于随机产生的一个数列,对于某个儿子,其兄弟在其前面的概率为 1 / 2. 所以这个兄弟对期望的贡献为son[v] / 2,所有兄弟加起来即为(tot - 1) / 2. 详见代码: ...
- GMTC 2019-前端夜话《聊聊前端工程师的成长和发展》会后简要总结
今天晚上去参加了winter主持的前端夜话:聊聊前端工程师的成长和发展圆桌论坛分享会,真的是收益颇多,这次的这个嘉宾阵容也是很有诚意的,在现在前端领域都是有一定影响力的嘉宾,嘉宾阵容也列一下: 主 ...
- Nginx 实用配置
1 防盗链 相关配置: valid_referers location ~* \.(gif|jpg|png)$ { # 只允许 192.168.0.1 请求资源 valid_referers none ...
- JMeter特点&性能测试工具选型的原则&模拟压力的原理
1.JMeter自身的特点 1)开源.轻量级.更适合自动化和持续集成(100M左右,LoadRunner 4G左右) 2)学习难度大 3)资料少.全英文 2. 性能测试工具选型的原则 1)成本 a.工 ...
- uva 796 C - Critical Links(tarjan求桥)
题目链接:https://vjudge.net/contest/67418#problem/C 题意:求出桥的个数并且按顺序输出 题解:所谓桥就是去掉这条边后连通块增加,套用一下模版就行. #incl ...
- 第 14 篇:交流的桥梁“评论功能”——HelloDjango 系列教程
截止到目前为止我们的 django blog 文章展示部分,已经实现的"八九不离十"了.你以为本系列文章就要结束了吗?不能够!新的征程才刚刚开始,HelloDjango 系列文章刚 ...
- JS执行机制详解,定时器时间间隔的真正含义
壹 ❀ 引 通过结果倒推过程是我们常用的思考模式,我在上一篇学习promise笔记中,有少量关于promise执行顺序的例子,通过倒推,我成功让自己对于js执行机制的理解一塌糊涂,js事件机制,事件 ...
- DevExpress的GridView,为每行的动态绑定不同的RepositoryItemLookUpEdit
有时需要动态为RepositoryItemLookUpEdit绑定数据源,比如联动选择的场景或者我们仅仅是需要一个下拉选择框而并不想要GridView的列与RepositoryItemLookUpEd ...
- JS千分位格式化方法,以及多种方法性能比较
方法一字符串版 function toThousands(num) { var result = '', counter = 0; num = (num || 0).toString(); for ( ...