日志分析

一、日志分析
Lamda架构,常规的做法是使用两个数据库来存储数据输出表,一个存储事实表,相应实时查询需求,另外一个存储批处理表,返回离线计算结果。
由三层组成:
1.批处理层:Hadoop,Spark,Tez都可以作为批处理层的处理工具,HDFS,HBase都可以作为数据持久化系统。
2.服务层:用于加载和实现数据库中的批处理视图,以便用户能够查询,不一定需要随机写,但是支持批更新和随机度,例如采用ElephantDB、Voldemort。
3.快速处理层:主要处理新数据和服务层更新造成的高延迟补偿,利用流处理系统(如Storm、S4、Spark Streaming)和随机读写数据存储库来计算实时视图(HBase)。批处理和服务层定期处理和转换实时视图为批处理视图。为了获得完整结果,批处理和实时视图都必须被同事查询和融合(实时代表新数据)

日志分析流水线大致步骤
1.数据采集:采用Flume NG进行数据采集
2.数据汇总与转发:通过Flume将数据转发汇总到实时消息系统Kafka
3.数据处理:采用Spark Streaming进行实时数据处理
4.结果呈现:采用Flask作为可视化呈现工具进行结果呈现
离线日志分析流水线大致步骤
1.数据存储:通过Flume蒋书记转出到HDFS
2.数据处理:通过SparkSQL进行数据预处理
3.结果呈现:结果汇总存储到MySQL最后通过Flask进行结果呈现

Flume的核心是把数据从数据源手机过来,在送到数据接收方。为了保证送达成功,在送达目的地之前,会先缓存数据,待数据真正到达目的地之后,删除自己缓存的数据,传输数据的基本单位是Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。Event从Source传输到Channel,再到数据输出槽Sink,本身为一个byte数组,并可携带消息头headers消息。
Flume运行核心是Agent,由Source、Channel、Sink。
Source可以接受外部源发送过来的数据,不同的Source可接受不同的数据格式。比如有目录池(Spooling Directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。
Channel是一个存储池,接受Source的输出,知道有Sink消费掉Channel中的数据,Channel中的数据知道进入到下一个Channel中或者进入终端才会被删除。当Sink写入失败后,可以自动重启,不会造成数据丢失,因此是可靠性reliable
Sink会消费Channel中的数据,然后送给外部元或者其他Source。如数据可以写入到HDFS或者HBase中
Flume允许多个Agent连载一起,形成串联的多级数据传输通道
下面配置可以同时将数据输出到kafka和Hdfs:

#同时输出到Kafka和HDFS,Kafka使用内存通道
#define the sink k1,定义HDFS输出端
a1.sinks.k1.type=hdfs
a1.sinks.k1.channel=c1
a1.sinks.k1.hdfs.useLocalTimeStamp=true
a1.sinks.k1.hdfs.path=hdfs://192.168.163.145:9000/flume/events/%Y/%m/%d
a1.sinks.k1.hdfs.filePrefix=cmcc-%H
a1.sinks.k1.hdfs.fileType=DataStream
a1.sinks.k1.hdfs.minBlockReplicas=1
a1.sinks.k1.hdfs.rollInterval=3600
a1.sinks.k1.hdfs.rollSize=0
a1.sinks.k1.hdfs.rollCount=0
a1.sinks.k1.hdfs.idleTimeout=0
#define the sink k2,定义Kafka输出端
a1.sinks.k2.channel=c2
a1.sinks.k2.type=com.cmcc.chiwei.kafka.CmccKafkaSink
a1.sinks.k2.metadata.broker.list=192.168.163.145:9092,192.168.163.146:9092,192.168.163.147:9092
a1.sinks.k2.partition.key=0
a1.sinks.k2.partitioner.class=com.cmcc.chiwei.Kafka.CmccPartition
a1.sinks.k2.serializer.class=Kafka.serializer.StringEncoder
a1.sinks.k2.request.required.acks=0
a1.sinks.k2.cmcc.encoding=UTF-8
a1.sinks.k2.cmcc.topic.name=cmcc
a1.sinks.k2.producer.type=async
a1.sinks.k2.batchSize=100
#以上配置将同样数据无差异输出传递到多个输出端
a1.sources.r1.selector.type=replicating

a1.sources=r1
a1.sinks=k1 k2
a1.channels=c1 c2

#define the channel c1
a1.channel.c1.type=file
a1.channels.c1.checkpointDir=/app/flume/flumeCheckpoint
a1.channels.c1.dataDirs=/app/flume/flumeData,/app/flume/flumeDataExt
a1.channels.c1.capacity=2000000
a1.channels.c1.transactionCapacity=100
#define the channel c2
a1.channels.c2.type=memory
a1.channels.c2.capacity=2000000
a1.channels.c2.transactionCapacity=100
[hadoop@master tailsource]$ kafka-topics.sh --zookeeper master:2181,worker1:2181,worker2:2181 --replication-factor 3 --partition 3 --create --topic mytopic
Created topic "mytopic".
flume-ng agent --conf conf --conf-file ../conf/flume-kafka-spark-collect.conf --name a1 -Dflume.root.logger=INFO,console
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值