一flume的基本概念Flume是一中分布式的日志收集系统为什么要有日志收集上图中日志在网页上产生,并进入后台业务服务器,通常在运用hive 在处理日志数据时我们并不会直接在后台业务服务器上直接进行处理,因为那样会给后台业务服务器带来很大的压力。因此我们将日志统一从后台业 务服务器上收集起来,传递到另一他服务器上(HDFS)在这台服务器上对这些信息进行日志分析处理。为什么要有flume如果不用flum e那么我们需要自己写shell脚本或java代码,来对日志进行收集如果数据变大,我们还需要修改代码。若有ha的话,还需要有另外 一种方案。若最终存储的位置改变,则我们设计的程序也要发生变化自己干数据采集:(1)灵活性不够(2)自己写代码还需要额外的开发系统, 去监控你的代码正确执行(3)如果考虑性能(分部式)(4)要求实现业务的人,还必须会写代码(5)如上种种问题就有可flumefl ume是一个日志收集工具。实现数据移动的时候,只需要配置相关的文件就可以了Flume的核心概念在flume里面只有一个角色,这个 角色叫做agent在agent中包含sourcechannelsinksource:用于采集数据的,是生产数据的地方,类似于k affka里面的生产者channel:连接source和sink的,类似于一个缓存队列。好比kafka里面的brokersink: 从channel里面取数据,将数据写入到目的地,类似于kafka里面的消费者为什么flume要设置成3个组件去组成因为这样灵活性非 常高,因为具体用什么样的组件我们可以自己配置如:我们通过配置source组件就可以控制flume从哪里去获取数据通过配置sink就 可以使数据传递到哪里。例如HDFSSink---》就是将收集到的数据传入到hdfs中。六、flume的配合使用flume的配置 使用例如:监控某个目录,如果这个目录里面有文件数据,就把数据打印到屏幕上。source:只需要在文档里面找到一个能监控目录的sou rce,sink:在文档里面找到一个把数据放到屏幕上的sink就可以了数据从哪里来?数据库网络日志数据----------- -----------------------------不会将大数据技术嵌入到Java项目中的,因此将数据收集,(1)项目之间解 耦收集数据(2)常见的日志收集工具Flume/Scribe/chuwa(3)模型SourcechannelSin k为什么需要channel?这是因为source与sink不一定会同步Flume的角色Source:表示从哪个数据源收集数据Si nk:表示将收集的数据存入哪个目的地channel:作为Source和Sink的中间件,目的就是缓存数据Flume的版本:Flum eNG:new1.x后FlumeOG:old0.9.xflume为什么不直接存到hdfs上?这是因为flume是一点一 点的收集数据,而我们最好是成块成块的将数据写入到hdfs上,因此我们需要在中间借助kafka------------------- --------------flume的运行需要java1.8(1)解压flume文件(2)编辑conf/flume-env文 件修改其中的java_home的路径-----------------------------------通过flume 来监控一个目录,当目录中有新的文件时,将文件的内容输出到控制台。过程:1、创建一个flumetest目录,呆一会就利用flame对 flumetest进行监控并将其中的内容展示出来--------首先配置一个Agent命名为directory.propert ies(agent的名称可以自定义)然后分别指定agent的sources、sinks、channels的名称(之所以都带有s, 是因为一个flume可以对应多个source,sink,channel)----------------------------- ----------------------------------------------------------------- -----------------------------------a1.sources=r1a1.sinks=k1a1 .channel=c1(其中a1是flume的名,r1,k1,c1分别是给sources、sinks、channels名的别名 )然后分别配置3个组件:--------------------------------------------------配置s ources根据agent的source的名称来对source进行配置不同的连接,配置不同a1.sources.r1.type= spooldir//指定了source的类型为spooldira1.sources.r1.spoolDir=/user/l ocal/flumetest//指明你用flume监测数据的来源--------------------- --------------------------------------------配置channels根据channel的名 称进行配置a1.channels.c1.type=memory//指定channel的类型----------------- ------------------------------------配置sinks配置一个loggersinka1.sink s.s1.type=logger//指定sink的类型为logger----------------------------- --------------------------------绑定注:source的channel的绑定有s,sink的chan nel的绑定没有sa1.sources.r1.channels=c1//将source与channel进行邦定a1. sinks.s1.channel=c1//将sinks与channel进行绑定--------------------------------------------------------------------------------------------------------------------------------- |
|