一、概念
大数据中包含两种处理方式:流处理和批处理。
- 流处理:即流式处理。流式处理假设数据的潜在价值是数据的新鲜度,需要尽快处理得到结果。在这种方式下,数据以流的方式到达。在数据连续到达的过程中,由于流携带了大量数据,只有小部分的流数据被保存在有限的内存中。流处理方式用于在线应用,通常工作在秒或毫秒级别。
- 批处理:批处理方式中,数据首先被存储,然后再分析。MapReduce是非常重要的批处理模型。MapReduce的核心思想是,数据首先被分为若干小数据块chunks,随后这些数据块被并行处理并以分布的方式产生中间结果,最后这些中间结果被合并产生最终结果。
二、主流组件
目前主流的流处理组件包括:Strom、Spark Streaming、KafKa、Flume、Flink、S3等,接下来将对上述组件做简要介绍。
- Flume:一个可以收集例如日志、事件等数据资源,并将这些庞大数据从各项数据资源中集中存储的工具/服务。其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。其结构图如下:
Flume优势
1)Flume可以将源数据存储到任何集中存储器中,如:HDFS、HBase;
2)数据收集速度超过写入速度时,提供平衡机制;
3)提供上下文路由特征;
4)Flume管道基于事务,保证数据传送和接受的一致性;
5)Flume是可靠,高容错性的,提供定制。·
Flume结构
如图所示,数据发生器产生的数据被单个运行在数据发生器所在服务器上的agent所通过事件event的方式被收集,之后数据收容器从各个agent上汇聚数据存入HDFS或HBase。
Flume事件
事件是Flume内部数据传输的最基本单元,由一个转载数据的字节数组(该数据组是从数据源接入点传入,并传输给传输器,也就是HDFS/HBase)和一个可选头部构成。其结构如下图所示:
Flume Agent
Flume内部有一个或者多个Agent,每一个Agent就是一共独立的守护进程(JVM),它从客户端或其他Agent接收数据,然后迅速将获取的数据传给下一个目的节点sink或者agent。其结构如下图所示,主要由source、channel、sink三部分组成。
Source:
从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channal,Flume提供多种数据接收的方式,比如Avro,Thrift等;
Channel:
channal是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性。并且它可以和任意数量的source和sink链接,支持的类型有: JDBC channel ,File System channel, Memort channel等;
Sink:
sink将数据存储到集中存储器比如Hbase、HDFS,它从channals消费数据(events)并将其传递给目标地,目标地可能是另一个sink,也可能HDFS,HBase。