设计一套实时分布式日志流收集平台(tail Logs --->HDFS)

本文档详细介绍了如何设计并实现一套实时的日志流收集系统,该系统能够从各种来源捕获日志数据,并将其高效地存储到Hadoop分布式文件系统(HDFS)中,为大数据分析提供稳定的数据源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前业界大概这么几个开源的分布式日志系统,notify+rsync,Facebook 的Scribe,apache的chukwa,linkin的kafa和cloudera的flume。
对这几款开源分布式日志系统的比较,参见这篇文章,讲的比较细致
之所以自己设计一台这么一个平台,而没有采用开源,主要是基于这么考虑
   1、以上这几种开源日志系统,虽然提供了日志tail实时输出的功能,但是在tail进程宕掉后,无法从收集的点开始收集,只能重新开始,这样有很多重复的日志
   2、这几种开源的日志系统功能比较全面,但是对我们平台来说,只用部分的功能,设计一个简单可用可控的平台是我们的一个目标
这篇文章讲述了笔者以前自己设计的一个日志收集平台的技术细节,在电商开放平台中有应用到。
应用场景是这样的,
平台中各个应用客户端会实时产生大量的日志,需要实时把各个应用客户端的日志收集起来,发送到分布式文件系统中,供后续的数据挖掘和分析。
数据会收集到HDFS中,每天定时生成一个文件(文件前缀为日期,后缀为序列号从0开始),并且当文件的大小超多一定大小时,自动生成一个新的文件,文件前缀为当前日期,后缀为当前序列号递增。
系统的运行架构图,以及相关说明

 
<configuration> <!-- 把多个NameNode的地址组装成一个集群mycluster --> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/ha/hadoop-3.1.3/data</value> </property> </configuration> <configuration> <!-- NameNode数据存储目录 --> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/name</value> </property> <!-- DataNode数据存储目录 --> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/data</value> </property> <!-- JournalNode数据存储目录 --> <property> <name>dfs.journalnode.edits.dir</name> <value>${hadoop.tmp.dir}/jn</value> </property> <!-- 完全分布式集群名称 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- 集群中NameNode节点都有哪些 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2,nn3</value> </property> <!-- NameNode的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>hadoop101:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>hadoop102:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn3</name> <value>hadoop103:8020</value> </property> <!-- NameNode的http通信地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>hadoop101:9870</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>hadoop102:9870</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn3</name> <value>hadoop103:9870</value> </property> <!-- 指定NameNode元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/myclus ter</value> </property> <!-- 访问代理类:client用于确定哪个NameNode为Active --> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyP rovider</value> </property> <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 --> <value>shell(true)</value> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> <value>shell(true)</value> </property> <!-- 使用隔离机制时需要ssh秘钥登录--> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/root/.ssh/id_rsa</value> </property> </configuration> 这是我的两个配置文件的内容,有没有问题
最新发布
06-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值