http://www.cnblogs.com/lujinhong2/p/4686512.html

http://blog.csdn.net/paul_wei2008/article/details/20830329

http://shiyanjun.cn/archives/1472.html

一、topology拓扑图

Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:
(1)Worker(进程)
(2)Executor(线程)
(3)Task

1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服务)。1个worker进程会启动1个或多个executor线程来执行1个topology的component(spout或bolt)。因此,1个运行中的topology就是由集群中多台物理机上的多个worker进程组成的。

executor是1个被worker进程启动的单独线程。每个executor只会运行1个topology的1个component(spout或bolt)的task(注:task可以是1个或多个,storm默认是1个component只生成1个task,executor线程里会在每次循环里顺序调用所有task实例)。

task是最终运行spout或bolt中代码的单元(注:1个task即为spout或bolt的1个实例,executor线程在执行期间会调用该task的nextTuple或execute方法)。topology启动后,1个component(spout或bolt)的task数目是固定不变的,但该component使用的executor线程数可以动态调整(例如:1个executor线程可以执行该component的1个或多个task实例)。这意味着,对于1个component存在这样的条件:#threads<=#tasks(即:线程数小于等于task数目)。默认情况下task的数目等于executor线程数目,即1个executor线程只运行1个task。

5. 并发

1)worker工作进程级别的并发设置

2)executor线程级别的并发

真正能够提高Topology性能的并发级别

3)Task任务级别的并发

builder.setBolt(BOLT, BOLT, 2).setNumberTasks(4)

指定2个executor跑4个task。

即每个executor执行2个task,这两个task并不是并发执行,而是轮流执行。

6. 消息可靠性机制

1)Bolt消息可靠性机制

每处理完接收到Tuple,发送确认信息

2)tuple锚定

二、Trident

1. 概念

1)Storm高层次的抽象

2)在Trident中保留了Spout,但是不再有Bolt组件。封装成了一系列的Operation,比如过滤、函数、分组等

3)Trident封装好了消息可靠性保障机制

4)Trident批次概念

将固定条数的Tuple划分为一个批次

给每个批次一个编号

更新统计结果状态,要严格按照批次顺序进行更新

5)事务控制

3个层次:

(1)NON-Transactional:非事务控制

允许同一个批次内的Tuple部分处理成功,失败的Tuple,可以在其他批次内进行重试,也有可能不进行重试。

(2)Transactional:严格的事务控制

要求批次内处理失败的Tuple,只能在本批次内进行重试。

如果tuple一直重试不成功,就会将整个任务程序挂起,不会进行下个批次的处理。没有容错。

(3)Opaque-Transactional:透明事务处理

批次内的tuple处理完成过后,先把成功共的更新掉,失败的tuple允许在其他批次内进行重试,只会有一次成功处理。有容错。

2. Trident的编码开发

1)构造Topology

trident中的Spout:

从数据源上获取数据,将获取到的数据封装到一个批次,并给每个批次执行一个批次号。

2)each方法

过滤操作Filter

对满足条件的Filter,

isKeep方法

3)Filter

在Trident编码中,要注意的:

Stream流在经过各种操作后,Tuple的演变,Tuple中keyvalue对的演变。

比如:Filter

仅仅只是在Stream保留或者丢弃tuple,而不会对tuple进行改变

4)Function

Stream经过函数操作后,将新产生的keyvalue对追加到原来的Tuple中,

需要注意的是,如果没有新产生keyvalue对,那么相应的tuple将会被丢弃掉。

5)指定保留哪些keyvalue、丢弃哪些keyvalue

.project

3. 并发

3)Operation的特性

是否同一分区、是否需要跨网络。

分区:指的就是一个在executor线程中运行的task。

Filter Function project

分区内的操作,只是对本分区内的Tuple进行操作

4)重分区操作 数据流分组

partitionBy ——分区

.partitionBy(new Fields("word"))

取Tuple,key名称为word的keyvalue的value值,求hashcode,然后根据哈希值 % 分区数进行取模。

相同的keyvalue对,进入同一个分区。

同一个分区内keyvalue对是否都相同?不一定

groupBy ——分区加分组

例如 .groupBy(new Fields("word"))

实际进行了两步操作:

(1)partitionBy

(2)在将同一个分区内相同的keyvalue,分配到到一个组。

启动DRPC server服务

drpc.srevers:

hostname

drpc.port:

273

先说一下场景,日志文件中有大约三千万行数据,大小为1.2G,格式为IP,TIME,现在要针对IP字段进行数量统计重复的次数,以便制定规则来控制用户的恶意注册。

shell版【15分钟统计完成】

date
cat regIp.txt | awk -F'\t' '{ print $1}' | sort | uniq -c | sort -rn | head -n100
date

《OD学storm》20160827的更多相关文章

  1. 《OD学storm》20160828

    一.Storm项目 1. 架构 javasdk -> nginx -> 日志文件 -> flume agent(collector) -> hdfs -> kafka - ...

  2. 《OD学hive》第四周0717

    一.Hive基本概念.安装部署与初步使用 1. 后续课程 Hive 项目:hadoop hive sqoop flume hbase 电商离线数据分析 CDH Storm:分布式实时计算框架 Spar ...

  3. 《OD学hadoop》20160903某旅游网项目实战

    一.大数据的落地点 1.数据出售 数据商城:以卖数据为公司的核心业务 2. 数据分析 百度统计 友盟 GA IBM analysis 3.搜索引擎 4. 推荐系统 mahout 百分比 5.精准营销 ...

  4. 《OD学HBase》20160821

    一.HBase性能调优 1. JVM内存调优 MemStore内存空间,设置合理大小 memstore.flush.size 刷写大小 134217728 = 128M memstore.mslab. ...

  5. 《OD学Oozie》20160807Oozie

    一.引入 MapReduce Job Hive 脚本任务 同一个业务:先后.定时调度 工作流: 定义工作流程 activity jbpm oozie: 大数据工作流定义与调度框架 专门定义与调度Map ...

  6. 《OD学Flume》20160806Flume和Kafka

    一.Flume http://flume.apache.org/FlumeUserGuide.html Flume是一个分布式的,可靠的,可用的,非常有效率的对大数据量的日志数据进行收集.聚集.移动信 ...

  7. 《OD学spark》20160924scala基础

    拓展: Hadoop 3.0 NameNode HA NameNode是Active NameNode是Standby可以有多个 HBase Cluster 单节点故障? HBaster -> ...

  8. 《OD学HBase》20160820

    一.案例 微博: 微博内容: 关注用户和粉丝用户: 添加或移除关注用户 查看关注用户的微博内容 微博数据存储: 响应时间 秒级 无延迟 (1)mysql分布式 (2)hbase数据库 使用HBase数 ...

  9. 《OD学HBase》20160814

    一.HBase引入 http://hbase.apache.org/ 大数据的数据库 1. 概述 Hadoop生态系统中的一个分布式.可拓展.面向列.可伸缩,具有自动容错功能的数据库. NoSQL数据 ...

随机推荐

  1. Matlab中diag函数注意事项

    在给李X写SVD代码的时候注意到的. >> a = magic(3) a = 8 1 6 3 5 7 4 9 2 >> diag(a) ans = 8 5 2 >> ...

  2. JS中函数的基础知识

    函数 一.  函数定义 函数又叫方法,在程序里面函数是用来执行某些特定功能的代码.为了减少重复使用代码,可以把特定功能的代码做成函数,需要使用时拿出来调用.alert();就是一个很常见的.简单的函数 ...

  3. js中的null VS undefined

    var a;------>undefined. JS变量的默认值.注意点在于判断变量的值为null.这是错误的.比如 if( a === null ) { // TODO; }; 实际上是und ...

  4. 8086CPU各寄存器的用途

    8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器.(2)指令指针.(3)标志寄存器和(4)段寄存器等4类. 1.通用寄存器有8个, 又可以分成2组,一组是数据寄存器(4个) ...

  5. DevSecOps简介(二)

    越来越多的组织机构开始采取 DevOps 实践,作为呼应,本文将概括强调很多人认为这一实践缺失的部分:安全.随着 NV (网络虚拟化) 和 NFV (网络功能虚拟化)的使用率逐步攀升,在开发和部署流程 ...

  6. 为什么主流网站无法捕获 XSS 漏洞?

    二十多年来,跨站脚本(简称 XSS)漏洞一直是主流网站的心头之痛.为什么过了这么久,这些网站还是对此类漏洞束手无策呢? 对于最近 eBay 网站曝出的跨站脚本漏洞,你有什么想法?为什么会出现这样的漏网 ...

  7. 【基本算法】 KMP文本串模式串的字符串匹配算法

    看了两个晚上的KMP,加上基本的“暴力匹配” 今晚看懂next[j]递归求解时,突然觉得算法真的好美妙,虽然觉悟的晚但晚胜过没有是吧! 我的博客都是应试性的学习笔记,不具备指导性,还是大神们写的好,例 ...

  8. 【剑指offer】题目38 数字在排序数组中出现的次数

    思路: 应该是用二分查找分别找到该数字第一次和最后一次出现的位置,相减即可.O(logn) int findLeft(int a[], int n, int num) { , r = n - ; wh ...

  9. iOS-CALayer遮罩效果

       self.view.backgroundColor = [UIColor blackColor];     , , , );     self.imageLayer.contents = (__ ...

  10. sql server 2008 修改sa密码

    问题: 当我们用windows本身验证之后需要修改sa密码,出现这样的错误. 解决方案: