一、概述

  今天起就正式进入了流式计算。这里先解释一下流式计算的概念

  离线计算

离线计算:批量获取数据、批量传输数据周期性批量计算数据、数据展示

代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据、***任务调度

,hivesql
、调度平台
、Hadoop集群运维
、数据清洗(脚本语言)
、元数据管理
、数据稽查
、数据仓库模型架构

相关技术栈与应用

  流式计算

    

流式计算:数据实时产生、数据实时传输、数据实时计算实时展示

代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。

一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果

实时计算,强调的是实时。比如小明要查看他去年一年的消费总额度,那么当小明点下统计按钮的时候,服务器集群就在噼里啪啦的赶紧计算了,必须在小明能够忍耐的时间范围内得出结果。这种计算的背后实现,一般都是冗余 + 各种高性能部件在做支撑,算法也对实时性做了优化,但实时计算并没有强调用那种算法,只要能保证高实时性的就行。实时计算与离线计算的最大区别,就是离线计算是人无法忍耐的时间进行计算,因此人不需要等待,把任务丢给计算机后,自己该干嘛就去干嘛。流式计算,比实时计算要稍微迟钝些,但比离线计算又实时的多,而且主要强调的是计算方法。比如,服务器端,有一个值,是记录小明订单数量。当小明每买一件东西后,服务端立即发出一个交易成功的事件,该值接收到这个事件后就立即加1。如果用离线计算的方式来做,估计是在查询时,才慢腾腾的从低速存储中,把小明的所有订单取出来,统计数量。流式计算有点像数据库领域的触发器,又有些像事件总线、中间件之类的计算模式。

作者:pig pig
链接:https://www.zhihu.com/question/38996005/answer/114339820
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

与实时计算概念的区别详解

  1.什么是storm

    根据storm官网:http://storm.apache.org/

  Apache Storm is a free and open source distributed realtime computation system. Storm makes it easy to reliably process unbounded streams of data, doing for realtime processing what Hadoop did for batch processing. Storm is simple, can be used with any programming language, and is a lot of fun to use!

   Apache Storm是一款免费且开源的分布式实时计算系统。Storm可以轻松地可靠地处理无限数据流,从而实时处理Hadoop进行批处理的操作。Storm很简单,可以与任何编程语言一起使用,并且使用起来非常有趣!

  2.与Hadoop的区别

    w3c的教程https://www.w3cschool.cn/apache_storm/apache_storm_introduction.html

Storm用于实时计算,Hadoop用于离线计算。
Storm处理的数据保存在内存中,源源不断;Hadoop处理的数据保存在文件系统中,一批一批。
Storm的数据通过网络传输进来;Hadoop的数据保存在磁盘中。
Storm与Hadoop的编程模型相似

    

Job:任务名称
JobTracker:项目经理
TaskTracker:开发组长、产品经理
Child:负责开发的人员
Mapper/Reduce:开发人员中的两种角色,一种是服务器开发、一种是客户端开发 Topology:任务名称
Nimbus:项目经理
Supervisor:开组长、产品经理
Worker:开人员
Spout/Bolt:开人员中的两种角色,一种是服务器开发、一种是客户端开发

名词解释

    简单来说:Apache Storm执行除持久性之外的所有操作,而Hadoop在所有方面都很好,但滞后于实时计算。

  3.应用场景

    Storm用来实时计算源源不断产生的数据,如同流水线生产。 

     日志分析

      从海量日志中分析出特定的数据,并将分析的结果存入外部存储器用来辅佐决策。

    管道系统

      将一个数据从一个系统传输到另外一个系统,比如将数据库同步到Hadoop

    消息转化器

      将接受到的消息按照某种格式进行转化,存储到另外一个系统如消息中间件

  更多概述与特性,参加上文官网与w3c相关介绍!

二、storm核心组件与编程模型

  1.核心组件

  

  

   Nimbus:负责资源分配和任务调度。

   Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。---通过配置文件设置当前supervisor上启动多少个worker。

   Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。(一worker就是一个JVM。)

   Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。

  2.编程模型

  

  

  Topology:Storm中运行的一个实时应用程序的名称。(拓扑)

   Spout:在一个topology中获取源数据流的组件。

      通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。

   Bolt:接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作。

   Tuple:一次消息传递的基本单元,理解为一组消息就是一个Tuple。

   Stream:表示数据的流向。

DataSource:外部数据源
Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt
Bolt:接受Spout发送的数据,或上游的bolt的发送的数据。根据业务逻辑进行处理。发送给下一个Bolt或者是存储到某种介质上。介质可以是Redis可以是mysql,或者其他。
Tuple:Storm内部中数据传输的基本单元,里面封装了一个List对象,用来保存数据。
StreamGrouping:数据分组策略
7种:shuffleGrouping(Random函数),Non Grouping(Random函数),FieldGrouping(Hash取模)、Local or ShuffleGrouping 本地或随机,优先本地。

  

    这些概念在官网中的concepts章节有相关介绍http://storm.apache.org/releases/1.0.6/Concepts.html

              并发编程网中文storm翻译教程http://ifeve.com/getting-started-with-stom-index/

  3.一般架构

  

  

  其中flume用来获取数据。

  Kafka用来临时保存数据。

  Strom用来计算数据。

  Redis是个内存数据库,用来保存数据。

三、storm集群的安装

  1.下载

    windows或者linux中使用wget命令下载皆可

  2.解压

[hadoop@mini1 ~]$ tar -zxvf apache-storm-1.0..tar.gz -C apps/

  解压后如果有需要,可以参考这里创建软连接

cd apps/
ln -s apache-storm-1.0. storm

  3.配置环境变量

sudo vim /etc/profile
export STORM_HOME=/home/hadoop/apps/apache-storm-1.0.
export PATH=$PATH:$STORM_HOME/bin
source /etc/profile

  4.配置storm

[hadoop@mini1 conf]$ mv storm.yaml storm.yaml.bak
[hadoop@mini1 conf]$ vim storm.yam

  通过mv或者cp命令备份出厂配置,这是一个比较推荐的好习惯

#指定storm使用的zk集群
storm.zookeeper.servers:
- "mini1"
- "mini2"
- "mini3"
#指定storm集群中的nimbus节点所在的服务器
nimbus.host: "mini1"
#指定nimbus启动JVM最大可用内存大小
nimbus.childopts: "-Xmx1024m"
#指定supervisor启动JVM最大可用内存大小
supervisor.childopts: "-Xmx1024m"
#指定supervisor节点上,每个worker启动JVM最大可用内存大小
worker.childopts: "-Xmx768m"
#指定ui启动JVM最大可用内存大小,ui服务一般与nimbus同在一个节点上。
ui.childopts: "-Xmx768m"
#指定supervisor节点上,启动worker时对应的端口号,每个端口对应槽,每个槽位对应一个worker
supervisor.slots.ports:
-
-
-
-

  5.分发安装包

[hadoop@mini1 apps]$ scp -r apache-storm-1.0./ mini2:/home/hadoop/apps/
[hadoop@mini1 apps]$ scp -r apache-storm-1.0./ mini3:/home/hadoop/apps/

  // 这里使用的是相对路径,分发时请注意所在目录

  另外两台机器也分别配置一下环境变量,以及如果有需要可以建立软连接(推荐)

  6.启动

    在master(这里是mini1上)上启动

nohup storm nimbus &
nohup storm ui &

    supervisor上启动:

nohup storm supervisor &

  停止storm进程只有一种方式,就是kill

  这里发现storm会有自动停止的问题,目前百度到的方法参考如下:http://roadrunners.iteye.com/blog/2229894

  启动的东西还是挺多的,从hadoop到这里,应该搞一个统一的启动脚本!

    输出的信息设置:

[root@log1 ~]# nohup storm ui >/dev/null >& &
[root@log1 ~]# nohup storm nimbus >/dev/null >& &

  默认情况下,nohup执行的日志在当前目录下的nohup.out中,除非重定向
  此处重定向到了/dev/null,即空白设备,即丢弃了。

  访问nimbus的主机即可:(如果有时候刚开始加载不了,注意稍等一会儿)

http://mini1:8080

大数据入门第十六天——流式计算之storm详解(一)入门与集群安装的更多相关文章

  1. 大数据入门第十六天——流式计算之storm详解(三)集群相关进阶

    一.集群提交任务流程分析 1.集群提交操作 参考:https://www.jianshu.com/p/6783f1ec2da0 2.任务分配与启动流程 参考:https://www.cnblogs.c ...

  2. 大数据入门第十六天——流式计算之storm详解(二)常用命令与wc实例

    一.常用命令 1.提交命令 提交任务命令格式:storm jar [jar路径] [拓扑包名.拓扑类名] [拓扑名称] torm jar examples/storm-starter/storm-st ...

  3. 大数据入门第十四天——Hbase详解(一)入门与安装配置

    一.概述 1.什么是Hbase 根据官网:https://hbase.apache.org/ Apache HBase™ is the Hadoop database, a distributed, ...

  4. 大数据入门第十九天——推荐系统与mahout(一)入门与概述

    一.推荐系统概述 为了解决信息过载和用户无明确需求的问题,找到用户感兴趣的物品,才有了个性化推荐系统.其实,解决信息过载的问题,代表性的解决方案是分类目录和搜索引擎,如hao123,电商首页的分类目录 ...

  5. 大数据入门第十天——hadoop高可用HA

    一.HA概述 1.引言 正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 2.运行机制 实现高可用最关键的是消除单点故障 hadoop-ha严格来说应该分成各个组件的HA机制——H ...

  6. 大数据入门第十四天——Hbase详解(三)hbase基本原理与MR操作Hbase

    一.基本原理 1.hbase的位置 上图描述了Hadoop 2.0生态系统中的各层结构.其中HBase位于结构化存储层,HDFS为HBase提供了高可靠性的底层存储支持, MapReduce为HBas ...

  7. 大数据入门第十四天——Hbase详解(二)基本概念与命令、javaAPI

    一.hbase数据模型 完整的官方文档的翻译,参考:https://www.cnblogs.com/simple-focus/p/6198329.html 1.rowkey 与nosql数据库们一样, ...

  8. 大数据入门第十五天——HBase整合:云笔记项目

    一.功能简述 1.笔记本管理(增删改) 2.笔记管理 3.共享笔记查询功能 4.回收站 效果预览: 二.库表设计 1.设计理念 将云笔记信息分别存储在redis和hbase中. redis(缓存):存 ...

  9. 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装

    一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...

随机推荐

  1. css inline元素和inline-block元素之间缝隙产生原因和解决办法

    行内元素产生水平空隙的原因及解决方案 这篇文章讲的很好,但是提供的解决方案没有这篇好实现 去除inline-block元素间间距的N种方法

  2. apt-get update 系列作用

    sudo apt-get update 更新源 sudo apt-get upgrade 更新已安装的包 sudo apt-get dist-upgrade 升级系统 下面摘自知乎用户回答: apt- ...

  3. 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    基于python实现的http+json协议接口自动化测试框架(实用改进版)   by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436     目录 1.      ...

  4. SQLServer 2005客户端远程连接sql2008 数据库服务器

    SQL2005客户端远程连接sql2008 数据库服务器 by:授客 QQ:1033553122 准备工作: 客户端所在pc机配置: 配置数据源 控制面板-管理工具-ODBC数据源-系统DSN-添加- ...

  5. windows 10安装jdk8

    1.下载jdk,选择jdk软件版本和对应windows 32/64位版本 jdk下载链接:https://www.oracle.com/technetwork/java/javase/download ...

  6. LeetCode题解之Binary Tree Postorder Traversal

    1.题目描述 2.问题分析 递归 3.代码 vector<int> postorderTraversal(TreeNode* root) { vector<int> v; po ...

  7. SQL2005的SSMS连接SQL2012会有问题

    SQL2005的SSMS连接SQL2012会有问题 如果用SQL2005的SSMS连接SQL2012会产生“索引数组越界”的问题并且使用不了 反过来使用SQL2012的SSMS连接SQL2005就没有 ...

  8. java网页数据抓取实例

    在很多行业中,要对行业数据进行分类汇总,及时分析行业数据,对于公司未来的发展,有很好的参照和横向对比.所以,在实际工作,我们可能要遇到数据采集这个概念,数据采集的最终目的就是要获得数据,提取有用的数据 ...

  9. MySQL隐形索引简介

    不可见索引允许您将索引标记为查询优化器不可用.MySQL维护不可见索引,并在与索引关联的列中的数据发生更改时使其保持最新. 默认情况下,索引是可见的.要使它们不可见,您必须在创建时或使用ALTER T ...

  10. pt-table-checksum工具MySQL主从复制数据一致性

    所使用的工具是pt-table-checksum 原理是: 在主上执行检查语句去检查 mysql主从复制的一致性,生成 replace 语句,然后通过复制传递到从库,再通过update 更新 mast ...