1. 业务现状分析

    • WebServer/ApplicationServer分散在各个机器上,想在大数据平台hadoop上进行统计分析,就需要先把日志收集到hadoop平台上。
    • 思考:如何解决我们的数据从其他的server上移动到Hadoop之上?
      • 脚本shell,用cp拷贝到hadoop集群上,再通过hadoop fs -put xxxx存储到hdfs上,但是这种方式会有如下问题:

        • 如何做监控?如果拷贝过程中某台机器断掉了怎么做到很好的监控?
        • 采用cp方式,需要设定一个复制的间隔时间,这样做时效性如何?
        • log一般存为txt文本文件,如果把文本格式的数据直接通过网络传输,对i/o的开销很大
        • 如何做负载均衡,压缩等等
  2. Flume概述
    • Flume is a distributed, reliable, and available service for efficiently collecting(收集), aggregating(聚合), and moving(移动) large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.
    • Flume设计目标:可靠性,扩展性,管理性
    • 业界同类产品的对比
      • Flume:Cloudera/Apache  java
      • Scribe:Facebook  c/c++  不再维护
      • Chuka:Yahoo/Apache java 不再维护
      • kafka:
      • Fluentd:Ruby
      • Logstash:ELK
  3. Flume架构及核心组件
    •  
    • Source :收集,常用的Source:Avro Source,Exce Source,Spooling,NetCat TCP Source,Kafka Source
    • Channel : 聚集,常用的Channels:Memory Channels,File Channels,Kafka Channels
    • Sink :输出,常用的Sink:HDFS Sink,Hive Sink,Logger Sink,Avro Sink,Hbase,Kafka
    • 设置multi-agent flow(可参看官网)
  4. Flume环境搭建
    • 安装JDK
    • 安装Flume
  5. Flume实战案例
    • 案例一的需求:从指定网络端口采集数据输出到控制台

      # example.conf: A single-node Flume configuration
      
      #使用Flume的关键就是写配置文件
      #配置Source
      #配置Channel
      #配置Sink
      #把以上三个组件串起来
      #a1:agent名称;r1:source名称;k1:sink名称;c1:channels的名称
      # Name the components on this agent
      a1.sources = r1
      a1.sinks = k1
      a1.channels = c1 # Describe/configure the source
      a1.sources.r1.type = netcat
      a1.sources.r1.bind = localhost
      a1.sources.r1.port = # Describe the sink
      a1.sinks.k1.type = logger # Use a channel which buffers events in memory
      a1.channels.c1.type = memory
      a1.channels.c1.capacity =
      a1.channels.c1.transactionCapacity = # Bind the source and sink to the channel
      a1.sources.r1.channels = c1
      a1.sinks.k1.channel = c1

      启动agent:

      bin/flume-ng agent --name a1 -c $FLUME_HOME/conf  --conf-file xxx(刚刚定义的example.conf) -Dflume.root.logger=INFO,consol
    • 案例二的需求:监控一个文件实时采集新增的数据输出到控制台
      #agent选型:exec source + memory channel + logger sink
      #文件名:exec-memory-logger.conf a1.sources = r1
      a1.sinks = k1
      a1.channels = c1 a1.sources.r1.type = exec
      a1.sources.r1.command= tail -F /home/hadoop/data.log#要监控的文件 a1.sinks.k1.type = logger a1.channels.c1.type = memory # Bind the source and sink to the channel
      a1.sources.r1.channels = c1
      a1.sinks.k1.channel = c1

      启动agent命令同上:

      bin/flume-ng agent --name a1 -c $FLUME_HOME/conf  --conf-file exec-memory-logger.conf
    • 案例三的需求:将A服务器上的日志实时采集到B服务器上
      #技术选型:
      #exec source + memory channel + avro sink
      #avro source + menory channel + logger sink #第一个conf文件内容如下:exec-memry-avro.conf
      exec-memory-avro.source = exec-source
      exec-memory-avro.sink = avro-sink
      exec-memory-avro.channels = memory-channel exec-memory-avro.sources.exec-source.type=exec
      exec-memory-avro.sources.exec-source.command=tail - F /home/hadoop/data.log exec-memory-avro.sinks.avro-sink.type=avro
      exec-memory-avro.sinks.avro-sink.hostname=hadoop000
      exec-memory-avro.sinks.avro-sink.port= exec-memory-avro.channels.memory-channel.type = memory exec-memory-avro.source.exec-memory.channels=memory-channel
      exex-memory-avro.sinks.avro-sinks.channel = memory-channel #第二个conf文件内容如下:avro-memory-logger.conf
      avro-memory-logger.source = avro-source
      avro-memory-logger.sink = logger-sink
      avro-memory-logger.channels = memory-channel avro-memory-logger.source.exec-source.type=avro
      avro-memory-logger.source.exec-source.bind=hadoop000
      avro-memory-logger.source.exec-source.port= avro-memory-logger.sinks.logger-sink.type=logger avro-memory-logger.channels.memory-channel.type = memory avro-memory-logger.source.avro-memory.channels=memory-channel
      avro-memory-logger.sinks.logger-sinks.channel = memory-channel

      启动两个对应的conf文件:

      bin/flume-ng agent --name avro-memory-logger  -c $FLUME_HOME/conf --conf-file avro-memory-logger.conf
      bin/flume-ng agent --name exec-memory-logger  -c $FLUME_HOME/conf --conf-file exec-memory-logger.conf

学习笔记:分布式日志收集框架Flume的更多相关文章

  1. 分布式日志收集框架Flume

    分布式日志收集框架Flume 1.业务现状分析 WebServer/ApplicationServer分散在各个机器上 想在大数据平台Hadoop进行统计分析 日志如何收集到Hadoop平台上 解决方 ...

  2. 在.NET Core中使用Exceptionless分布式日志收集框架

    一.Exceptionless简介 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF, ...

  3. 分布式日志收集系统 —— Flume

    一.Flume简介 Apache Flume 是一个分布式,高可用的数据收集系统.它可以从不同的数据源收集数据,经过聚合后发送到存储系统中,通常用于日志数据的收集.Flume 分为 NG 和 OG ( ...

  4. 日志收集框架flume的安装及简单使用

    flume介绍 Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS.hbase.h ...

  5. 分布式日志收集之Logstash 笔记(一)

    (一)logstash是什么? logstash是一种分布式日志收集框架,开发语言是JRuby,当然是为了与Java平台对接,不过与Ruby语法兼容良好,非常简洁强大,经常与ElasticSearch ...

  6. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  7. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  8. Net Core免费开源分布式异常日志收集框架Exceptionless

    asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 https://www.cnblogs.com/yilezhu/p/9193723.htm ...

  9. 【转】asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

随机推荐

  1. Fortran程序调试中的“吐核”错误

    在CentOS7上安装了PGI编译器,但是调试过程中遇到的“段错误(吐核)”一直让人很头疼. 通常采用在程序中增加屏幕输出代码的方式来追踪和定位出错的变量,比如下面这个样例程序就在第16行和第18行增 ...

  2. windows异步通知I/O模型

    回声服务器端: #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #define BUF_S ...

  3. php 查询mysql数据批量转为PDF文件二(批量使用wkhtmltopdf html导出PDF)

    上节讲到配置wkhtmltopdf,这节讲下如何批量操作 首先讲下wkhtmltopdf如何使用 直接命令行输入: wkhtmltopdf http://www.baidu.com/  baidu.p ...

  4. shell脚本学习之for循环

    1.数字循环 [root@zabbix ~]# for i in {1..10};do echo $(expr $i \* 3);done;36912151821242730 [root@zabbix ...

  5. 苹果笔记本安装windows正版操作系统

    http://vip.dzzysm.cn/mac/ http://www.windows7en.com/Win7/20439.html windows 7之家的网友很多,其中不缺乏土豪网友购买苹果的M ...

  6. presto 函数中使用子查询

    我们已知 在sql中子查询可以配合  in 或者 exists 来使用,但是如何把子查询的结果传给函数呢? 场景: 我们有一个  省份表  数据如下: id   province 1    广东 2  ...

  7. 201671010142 java内部类

    内部类可以拥有private访问权限.protected访问权限.public访问权限及包访问权限. 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方 ...

  8. java的http请求实例

    package vqmp.data.pull.vqmpull.common.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory ...

  9. Git设置旧邮箱与现邮箱不一致问题

    设置名字和邮箱git config user.name 'lhr' git config user.email 'lhr@qq.com' 工程根目录创建email.sh文件粘贴以下代码 #!/bin/ ...

  10. C++之 类型定义语句--typedef

    typedef的作用是给一个已经存在的数据类型起个别名. 使用的语法形式是:typedef   已有类型名  新类型名表;. 新类型名表中可以有多个标识符,它们之间用逗号分开,就是在一个typedef ...