1.storm概述

应用于实时的流式计算,结合消息队列和数据库进行使用。

Spouts:拓扑的消息源

Bolts:拓扑的处理逻辑单元,每个bolt可以在集群当中多实例的并发执行

tuple:消息元组,数据传递的封装形式

streams:流,不同的消息所经过的路径是不一样的

stream groupings:流的分组策略

  Shuffle Grouping——随机分组,随机派发stream里面的tuple

  Fields Grouping——按字段分组,具有同样字段的tuple会被分到相同的Bolts里的一个task,而不同的字段则会被分配到不同的bolts里的task

  All Grouping——广播发送,对于每一个tuple,所有的bolts都会收到。

  Global Grouping——全局分组,这个tuple被分配到storm中的一个bolt的其中一个task,再具体一点就是分配给id值最低的那个task

  Non Grouping——不分组,和shuffle Grouping不同的是,Storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行

  直接分组——

Tasks:任务处理单元

Executor:工作线程

Workers:工作进程

Configuration:topology的配置

运行结构:supervisor------>多个worker进程------>多个executor线程------>多个task实例

默认一个supervisor对应4个工作槽位

supervisor负责对worker进行负载均衡调度,当supervisor进程被终止后,worker会继续运行

Nimbus进程被终止后,新任务无法提交,但是原来的任务仍然可以继续运行。

2.集群的物理结构及安装

Nimbus负责集群的协调管理

supervisor负责具体的运算。

1)安装一个zookeeper集群

2)上传storm的安装包,解压

3)修改配置文件storm.yaml

#所使用的zookeeper集群主机 storm.zookeeper.servers:      - "weekend05"      - "weekend06"      - "weekend07"

#nimbus所在的主机名 nimbus.host: "weekend05"

supervisor.slots.ports -6701 -6702 -6703 -6704 -6705

启动storm 在nimbus主机上 nohup ./storm nimbus 1>/dev/null 2>&1 &

nohup ./storm ui 1>/dev/null 2>&1 &

在supervisor主机上 nohup ./storm supervisor 1>/dev/null 2>&1 &

storm的深入学习:    分布式共享锁的实现    事务topology的实现机制及开发模式    在具体场景中的跟其他框架的整合(flume/activeMQ/kafka(分布式的消息队列系统)       /redis/hbase/mysql cluster)

3.Storm与Hadoop的对比

1)Topology与MapReduce一个关键的区别是,一个MapReduce job最终会结束,而一个topology永远会运行。除非手动杀死进程

2)Nimbus 与 ResourManager 在Storm的集群里面有两种节点: 控制节点(master node)和工作节点(worker node)。控制节点上面运行一个叫Nimbus后台程序,它的作用类似Hadoop里面的JobTracker。Nimbus负责在集群里面分发代码,分配计算任务给机器, 并且监控状态。

3)Supervisor (worker进程)与NodeManager(YarnChild) 每一个工作节点上面运行一个叫做Supervisor的节点。Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程。每一个工作进程执行一个topology的一个子集;一个运行的topology由运行在很多机器上的很多工作进程组成。

4.Nimbus和Supervisor

Nimbus和Supervisor之间的所有协调工作都是通过Zookeeper集群完成。

Nimbus进程和Supervisor进程都是快速失败(fail-fast)和无状态的。所有的状态要么在zookeeper里面, 要么在本地磁盘上。

这也就意味着你可以用kill -9来杀死Nimbus和Supervisor进程, 然后再重启它们,就好像什么都没有发生过。这个设计使得Storm异常的稳定。

5.

conf.setNumWorkers(4) 表示设置了4个worker来执行整个topology的所有组件

builder.setBolt("boltA",new BoltA(),  4)  ---->指明 boltA组件的线程数excutors总共有4个 builder.setBolt("boltB",new BoltB(),  4) ---->指明 boltB组件的线程数excutors总共有4个 builder.setSpout("randomSpout",new RandomSpout(),  2) ---->指明randomSpout组件的线程数excutors总共有4个

-----意味着整个topology中执行所有组件的总线程数为4+4+2=10个 ----worker数量是4个,有可能会出现这样的负载情况,  worker-1有2个线程,worker-2有2个线程,worker-3有3个线程,worker-4有3个线程

如果指定某个组件的具体task并发实例数 builder.setSpout("randomspout", new RandomWordSpout(), 4).setNumTasks(8); ----意味着对于这个组件的执行线程excutor来说,一个excutor将执行8/4=2个task

6.kafka

1)kafka是一个分布式的消息系统

2)kafka集群中的服务器都叫做broker

3)kafka有两类客户端,一类叫producer,一类叫做consumer,客户端和broker服务器之间采用tcp协议连接

4)kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载。

5)每一个分区都可以有多个副本,以防止数据的丢失

6)某一个分区中的数据如果需要更新,都必须通过该分区所有副本中的leader来更新

7)消费者可以分组,比如有两个消费者A和B,共同消费一个topic:order_info,A和B所消费的消息不会重复。

hadoop day 7的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. 初识Hadoop、Hive

    2016.10.13 20:28 很久没有写随笔了,自打小宝出生后就没有写过新的文章.数次来到博客园,想开始新的学习历程,总是被各种琐事中断.一方面确实是最近的项目工作比较忙,各个集群频繁地上线加多版 ...

  3. hadoop 2.7.3本地环境运行官方wordcount-基于HDFS

    接上篇<hadoop 2.7.3本地环境运行官方wordcount>.继续在本地模式下测试,本次使用hdfs. 2 本地模式使用fs计数wodcount 上面是直接使用的是linux的文件 ...

  4. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  5. 【Big Data】HADOOP集群的配置(一)

    Hadoop集群的配置(一) 摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问 ...

  6. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  7. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  8. Hadoop 2.x 生态系统及技术架构图

    一.负责收集数据的工具:Sqoop(关系型数据导入Hadoop)Flume(日志数据导入Hadoop,支持数据源广泛)Kafka(支持数据源有限,但吞吐大) 二.负责存储数据的工具:HBaseMong ...

  9. Hadoop的安装与设置(1)

    在Ubuntu下安装与设置Hadoop的主要过程. 1. 创建Hadoop用户 创建一个用户,用户名为hadoop,在home下创建该用户的主目录,就不详细介绍了. 2. 安装Java环境 下载Lin ...

  10. 基于Ubuntu Hadoop的群集搭建Hive

    Hive是Hadoop生态中的一个重要组成部分,主要用于数据仓库.前面的文章中我们已经搭建好了Hadoop的群集,下面我们在这个群集上再搭建Hive的群集. 1.安装MySQL 1.1安装MySQL ...

随机推荐

  1. 中文乱码 URLEncode之后,后台获取仍是乱码问题详解

    java中获取到参数的时候,这时候默认使用的是iso8859-1进行解码的,那么就再使用URLEncode的encoe方法对其进行编码一次,编码格式使用iso8859-1,这样我们就获得最初使用utf ...

  2. 【调试基础】Part 2 文本字符

    01 字节存储顺序 大端:低字节存在高地址,高字节存在低地址.eg:IBM: 小端:低字节存在低地址,高字节存在高地址.eg:INTEL: 02 字符集 ASCII:128=26小写 + 26大写 + ...

  3. 【技巧】easyUI的datagrid,如何在翻页以后仍能记录被选中的行

    easyUI的datagrid在复选框多选时,如何在翻页以后仍能记录被选中的行: 注意datagrid中需要配置idField属性,一般为数据的主键

  4. Qt 适合做界面

    确实感觉的Qt的界面开发相比MFC方便了许多,不用为设计和实现窗口烦恼.不需要太细研究界面的实现,从Qt自带的例子中就能轻松学习和应用.在界面开发上Qt的实用比MFC前进了许多.做C++开发不管怎样如 ...

  5. 第三天:numpy库

    PS: 这个好像是Python2.X版本的使用. 这个课件的numpy的介绍还是太少了,有点凌乱的感觉,要是后面还是要以<利用Python进行数据分析>做numpy和pandas课件笔记比 ...

  6. Road of computer tec 01

    回顾自己过去将近3年的学习经历 当初报考的时候,自己是真正喜欢这个专业的么? 当初报这个专业的时候,对计算机还没有什么很明显的概念,只知道这个专业以后是要每天面对电脑的,喜欢不喜欢谈不上吧,但是还蛮感 ...

  7. 详解Python的作用域和命名空间

    最近在学习Python,不得不说,Python真的是一门很好用的语言.但是学习的过程中关于变量作用域(scope)的命名空间(namespace)的问题真的把我给搞懵了.在查阅了相关资料之后,觉得自己 ...

  8. Linux VPS自动定时备份网站文件和MYSQL数据库到FTP空间(LNMP)

    如果我们网站更新不是很频繁,我们可以定期手动进行备份网站文件和MYSQL数据库导出.如果我们网站数据更新频繁,且数据尤为重要,建议要采用定期自动 备份,至少需要多备份数据,无论我们选择何种优秀的VPS ...

  9. Kubernetes 常用命令

    文章摘自:https://blog.csdn.net/felix_yujing/article/details/51622132 1 查看类命令--- # 查看集群信息 kubectl cluster ...

  10. grid-layout

    <!-- 创建三个网格布局--> .wrapper { <!--创建一个网格布局 --> display: grid; <!--创建3列 且每列都等距 --> gr ...