版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《大数据技术实战案例教程》实验指导书实验6Flume实战编写者:徐鲁辉实验6Flume实战6.1实验目的1.理解Flume体系架构及Source、Sink、Channel功能。2.理解Flume部署要点包括运行环境、运行模式、配置文件flume-env.sh。3.熟练掌握在Linux环境下部署Flume,灵活编写Agent属性文件和使用FlumeShell命令进行实时日志收集。6.2实验环境本实验所需的软件环境Linux操作系统、Java环境、Flume安装包。6.3实验内容1.规划Flume。2.安装和配置Flume。3.验证Flume。4.编写Agent属性文件,并使用FlumeShell命令进行实时日志收集。6.4实验原理6.4.1初识FlumeFlume是Cloudera开发的实时日志收集系统,受到了业界的认可和广泛使用,于2009年7月开源,后成为Apache的顶级项目之一。Flume采用Java语言编写,致力于解决大量日志流数据的迁移问题,它可以高效地收集、聚合和移动海量日志,是一个纯粹为流式数据迁移而产生的分布式服务。Flume支持在日志系统中定制各类数据发送方,用于收集数据,同时Flume提供对数据进行简单处理,并写到各类数据接收方。Flume具有基于数据流的简单灵活的架构、高可靠性机制、故障转移和恢复机制,它使用一个简单的可扩展数据模型,允许在线分析应用程序。Flume目前有两种版本,0.9.x和1.x。第一代指0.9.x版本,隶属于Cloudera,称为FlumeOG(OriginalGeneration),随着Flume功能的不断扩展,其代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点一一暴露出来,尤其是在FlumeOG最后一个发行版本0.94.0中,日志传输不稳定的现象尤为严重。为了解决这些问题,2011年10月Cloudera重构了Flume的核心组件、核心配置和代码架构,形成1.x版本,重构后的版本统称为FlumeNG(NextGeneration),即第二代Flume,并将Flume贡献给了Apache,ClouderaFlume改名为ApacheFlume。Flume变成一种更纯粹的流数据传输工具。6.4.2Flume体系架构ApacheFlume由一组以分布式拓扑结构相互连接的Agent(代理)构成,FlumeAgent是由持续运行的Source(数据来源)、Sink(数据目标)以及Channel(用于连接Source和Sink)三个Java进程构成。Flume的Source产生事件,并将其传送给Channel,Channel存储这些事件直至转发给Sink,可以把Source-Channel-Sink的组合看作是Flume的基本构件。ApacheFlume的体系架构如图6-1所示。AgentHDFSSourceChannelSinkWebServer图6-1AgentHDFSSourceChannelSinkWebServerFlume处理数据的最小单元是Event,一个Agent代表一个Flume进程,一个Agent=Source+Channel+Sink,Flume可以进行各种组合选型。Flume提供了大量内置的Source、Channel和Sink类型,它们的简单介绍如表6-1所示,关于这些组件配置和使用的更多信息,请参考Flume用户指南,网址/releases/content/1.9.0/FlumeUserGuide.html。表6-1Flume内置Source、Channel和Sink类型类型组件描述SourceAvro监听由AvroSink或FlumeSDK通过AvroRPC发送的事件所抵达的端口Exec运行一个Unix命令,并把从标准输出上读取的行转换为事件。请注意,此类Source不能保证事件被传递到Channel,更好的选择可以参考SpoolingDirectorySource或FlumeSDKHTTP监听一个端口,并使用可插拔句柄把HTTP请求转换为事件JMS读取来自JMSQueue或Topic的消息并将其转换为事件Kafka是ApacheKafka的消费者,读取来自KafkaTopic的消息Legacy允许Flume1.xAgent接收来自Flume0.9.4的Agent的事件NetCat监听一个端口,并把每行文本转换为一个事件SequenceGenerator依据增量计数器来不断生成事件Scribe另一种收集系统。要采用现有的Scribe,Flume应该使用基于Thrift的ScribeSource和兼容的传输协议SpoolingDirectory按行读取保存在文件缓冲目录中的文件,并将其转换为事件Syslog从日志中读取行,并将其转换为事件Taildir该Source不能用于WindowsThrift监听由ThriftSink或FlumeSDK通过ThriftRPC发送的事件所抵达的端口Twitter1%firehose通过StreamingAPI连接到1%的样本Twitter信息流并下载这些tweet,并将tweet转换为事件Custom用户自定义SourceSinkAvro通过AvroRPC发送事件到一个AvroSourceElasticSearchSink使用Logstash格式将事件写到Elasticsearch集群FileRoll将事件写到本地文件系统HBase使用某种序列化工具将事件写到HBaseHDFS以文本、序列文件将事件写到HDFSHive以分割文本或JSON格式将事件写到HiveHTTP从Channel获取事件,并使用HTTPPOST请求发送事件到远程服务IRC将事件发送给IRC通道Kafka导出数据到一个KafkaTopicKiteDataset将事件写到KiteDatasetLogger使用INFO级别把事件内容输出到日志MorphlineSolrSink从Flume事件提取数据并转换,在ApacheSolr服务端实时加载Null丢弃所有事件Thrift通过ThriftRPC发送事件到ThriftSourceCustom用户自定义SinkChannelMemory将事件存储在一个内存队列中JDBC将事件存储在数据库中(嵌入式Derby)Kafka将事件存储在Kafka集群中File将事件存储在一个本地文件系统上的事务日志中SpillableMemory将事件存储在内存缓存中或者磁盘上,内存缓存作为主要存储,磁盘则是接收溢出时的事件PseudoTransaction只用于单元测试,不用于生产环境Flume允许表中不同类型的Source、Channel和Sink自由组合,组合方式基于用户设置的配置文件,非常灵活。例如,Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上;Sink可以把日志写入HDFS、HBase、ElasticSearch甚至是另外一个Source等。Flume支持用户建立多级流,也就是说多个Agent可以协同工作。6.4.3Flume部署要点1.Flume运行环境运行Flume所需要的系统环境包括操作系统和Java环境两部分。1)操作系统Flume支持不同平台,在当前绝大多数主流的操作系统上都能够运行,例如Linux、Windows、MacOSX等。编者采用的操作系统为Linux发行版CentOS7。2)Java环境Flume采用Java语言编写,因此它的运行环境需要Java环境的支持,Flume1.9.0需要Java1.8及以上版本支持。编者采用的Java为OracleJDK1.8。另外,需要为Source、Channel、Sink配置足够的内存和为Channel、Sink配置足够的磁盘,还需要设置Agent监控目录的读写权限。2.Flume运行模式Flume支持单机模式和集群模式。单机模式就是在单个服务器上部署Flume,现实生产中采用的多为集群模式,即在多台服务器上部署Flume,例如某网站有多台Web服务器分摊用户访问压力,且用户访问网站产生的日志数据需要写入Web服务器,为了分析网站用户行为,需要通过Flume将用户日志数据采集到大数据平台,每台Web服务器都需部署Flume采集服务,若每台Flume采集服务直接将数据写入大数据平台,会造成很大的I/O压力,为减少大数据平台压力,需要增加Flume聚合层对来自采集节点的数据进行聚合,这样Flume采集层、聚合层就共同形成了Flume集群。编者采用单机模式。3.Flume配置文件Flume启动时,默认读取$FLUME_HOME/conf/flume-env.sh文件,该文件用于配置Flume的运行参数。Flume安装后,在安装目录下有一个示例配置文件flume-env-template.sh,该模板中已有JAVA_HOME等配置项的注释行,Flume的基本配置很简单,添加Java安装路径即可。6.4.4FlumeShell常用命令FlumeShell命令的语法格式如下所示:flume-ng<command>[options]...通过命令“flume-nghelp”来查看flume-ng命令使用方法,具体如下所示。[xuluhui@master~]$flume-nghelpUsage:/usr/local/flume-1.9.0/bin/flume-ng<command>[options]...commands:help displaythishelptextagent runaFlumeagentavro-client runanavroFlumeclientversion showFlumeversioninfoglobaloptions:--conf,-c<conf> useconfigsin<conf>directory--classpath,-C<cp> appendtotheclasspath--dryrun,-d donotactuallystartFlume,justprintthecommand--plugins-path<dirs> colon-separatedlistofplugins.ddirectories.Seetheplugins.dsectionintheuserguideformoredetails.Default:$FLUME_HOME/plugins.d-Dproperty=value setsaJavasystempropertyvalue-Xproperty=value setsaJava-Xoptionagentoptions:--name,-n<name> thenameofthisagent(required)--conf-file,-f<file> specifyaconfigfile(requiredif-zmissing)--zkConnString,-z<str> specifytheZooKeeperconnectiontouse(requiredif-fmissing)--zkBasePath,-p<path> specifythebasepathinZooKeeperforagentconfigs--no-reload-conf donotreloadconfigfileifchanged--help,-h displayhelptextavro-clientoptions:--rpcProps,-P<file> RPCclientpropertiesfilewithserverconnectionparams--host,-H<host> hostnametowhicheventswillbesent--port,-p<port> portoftheavrosource--dirname<dir> directorytostreamtoavrosource--filename,-F<file> textfiletostreamtoavrosource(default:stdinput)--headerFile,-R<file> Filecontainingeventheadersaskey/valuepairsoneachnewline--help,-h displayhelptext其中,通用选项—“--conf”或者“-c”用于指定Flume通用配置,例如环境设置。命令“flume-ngagent”的选项“--name”或者“-n”必须指定,其用于指定代理的名称,一个Flume属性文件可以定义多个代理,因此必须指明运行的是哪一个代理,选项“--conf-file”或者“-f”用于指定Flume属性文件。命令“flume-ngavro-client”的选项“--rpcProps”或者“--host”和“--port”必须指定。使用命令“flume-ngagent”之前,需要在$FLUME_HOME/conf下创建Agent属性文件,该属性文件内容的一般格式如下所示。#Namethecomponentsonthisagentagent1.sources=source1agent1.sinks=sink1agent1.channels=channel1#Describe/configurethesourceagent1.sources.source1.type=XXX#Describethesinkagent1.sinks.sink1.type=XXX#Useachannelwhichbufferseventsinfileagent1.channels.channel1.type=XXX#Bindthesourceandsinktothechannelagent1.sources.source1.channels=channel1agent1.sinks.sink1.channel=channel1上述属性文件中,只定义了一个FlumeAgent,其名称为agent1,agent1中运行一个Source即source1、一个Sink即sink1和一个Channel即channel1。接下来分别定义了source1、sink1、channel1的属性。最后,定义Source、Sink连接Channel的属性,本例的source1连接channel1,sink1连接channel1。读者请注意,Source的属性是“channels”(复数),Sink的属性是“channel”(单数),这是因为一个Source可以向一个以上的Channel输送数据,而一个Sink只能吸纳来自一个Channel的数据。另外,一个Channel可以向多个Sink输入数据。6.5实验步骤6.5.1规划Flume1.Flume部署规划Flume支持集群模式和单机模式。这里采用单机模式,因此安装Flume仅需要1台机器,需要操作系统、Java环境作为支撑。本实验拟将Flume运行在Linux上,在主机名为master的机器上安装Flume。具体Flume规划表如表6-2所示。表6-2Flume部署规划表主机名IP地址运行服务软硬件配置master30根据Source、Sink、Channel的属性部署组件和启动相应服务内存:4GCPU:1个2核硬盘:40G操作系统:CentOS7.6.1810Java:OracleJDK8u191Flume:Flume1.9.0Eclipse:EclipseIDE2018-09forJavaDevelopers2.软件选择本实验部署Flume所使用各种软件的名称、版本、发布日期及下载地址如表6-3所示。表6-3本实验部署Flume使用的软件名称、版本、发布日期及下载地址软件名称软件版本发布日期下载地址VMwareWorkstationProVMwareWorkstation14.5.7ProforWindows2017年6月22日/products/workstation-pro.htmlCentOSCentOS7.6.18102018年11月26日/download/JavaOracleJDK8u1912018年10月16日/technetwork/java/javase/downloads/index.htmlFlumeFlume1.9.02019年1月8日/download.html由于实验1已完成VMwareWorkstationPro、CentOS、Java的安装,故本实验直接从安装Flume开始讲述。6.5.2安装和配置Flume1.初始软硬件环境准备(1)准备机器,安装操作系统,编者使用CentOSLinux7。请读者参见教材实验1。(2)安装和配置Java,编者使用OracleJDK8u191。请读者参见教材实验1。(3)部署所需组件,例如MySQL、HBase、Hive、Avro、Kafka、Scribe、Elasticsearch等,此步可选,要根据实际需要解决的问题决定部署哪些组件和启动服务,请读者参见其他实验指导书或者查阅其它资料。2.获取FlumeFlume官方下载地址为/download.html,编者选用的Flume版本是2019年1月8日发布的Flume1.9.0,其安装包文件apache-flume-1.9.0-bin.tar.gz例如存放在master机器的/home/xuluhui/Downloads中。3.安装FlumeFlume支持集群模式和单机模式,编者采用单机模式,在master一台机器上安装,以下所有步骤均在master一台机器上完成。切换到root,解压apache-flume-1.9.0-bin.tar.gz到安装目录如/usr/local下,使用命令如下所示。[xuluhui@master~]$suroot[root@masterxuluhui]#cd/usr/local[root@masterlocal]#tar-zxvf/home/xuluhui/Downloads/apache-flume-1.9.0-bin.tar.gz默认解压后的Flume目录为“apache-flume-1.9.0-bin”,名字过长,编者为了方便,将此目录重命名为“flume-1.9.0”,使用命令如下所示。[root@masterlocal]#mvapache-flume-1.9.0-binflume-1.9.0注意,读者可以不用重命名Flume安装目录,采用默认目录名,但请注意,后续步骤中关于Flume安装目录的设置与此步骤保持一致。4.配置Flume安装Flume后,在$FLUME_HOME/conf中有一个示例配置文件flume-env.sh.template,Flume启动时,默认读取$FLUME_HOME/conf/flume-env.sh文件,该文件用于配置Flume的运行参数。1)复制模板配置文件flume-env.sh.template为flume-env.sh使用命令“cp”将Flume示例配置文件flume-env-template.sh复制并重命名为flume-env.sh。使用如下命令完成,假设当前目录为“/usr/local/flume-1.9.0”。[root@masterlocal]#cdflume-1.9.0[root@masterflume-1.9.0]#cpconf/flume-env.sh.templateconf/flume-env.sh2)修改配置文件flume-env.sh读者可以发现,模板中已有JAVA_HOME等配置项的注释行,使用命令“vimconf/flume-env.sh”修改Flume配置文件,添加Java安装路径,修改后的配置文件flume-env.sh内容如下所示。exportJAVA_HOME=/usr/java/jdk1.8.0_1915.设置$FLUME_HOME目录属主为了在普通用户下使用Flume,将$FLUME_HOME目录属主设置为Linux普通用户例如xuluhui,使用以下命令完成。[root@masterflume-1.9.0]#chown-Rxuluhui/usr/local/flume-1.9.06.在系统配置文件目录/etc/profile.d下新建flume.sh使用“vim/etc/profile.d/flume.sh”命令在/etc/profile.d文件夹下新建文件flume.sh,添加如下内容。exportFLUME_HOME=/usr/local/flume-1.9.0exportPATH=$FLUME_HOME/bin:$PATH其次,重启机器,使之生效。此步骤可省略,之所以将$FLUME_HOME/bin加入到系统环境变量PATH中,是因为当输入Flume命令时,无需再切换到$FLUME_HOME/bin,这样使用起来会更加方便,否则会出现错误信息“bash:****:commandnotfound...”。6.5.3验证Flume切换到普通用户例如xuluhui下,可以使用命令“flume-ngversion”来查看Flume版本,进而达到测试Flume是否安装成功的目的。命令运行效果如图6-2所示,从图6-2中可以看出,Flume安装成功。图6-2验证Flume6.5.4使用Flume【案例6-1】使用Flume实现以下功能:监视本地服务器上的指定目录,每当该目录中有新文件出现时,就把该文件采集到HDFS中。其中,新增文件由手工完成。在本案例中,Flume仅运行一个Source-Channel-Sink组合,Source类型是SpoolingDirectory,Channel类型是Memory,Sink类型是HDFS,即SpoolingDirectorySource-MemoryChannel-HDFSSink。整个系统如图6-3所示。FlumeAgentFlumeAgent文件事件事件/tmp/spooldirSpoolingDirectorySourceMemoryChannelHDFSSink本地文件系统agent2source2channel2sink2/flume/events/%y-%m-%d/%H%M/HDFS文件系统文件图6-3通过MemoryChannel连接的SpoolingDirectorySource和HDFSSink的FlumeAgent(1)创建Agent属性文件在$FLUME_HOME/conf下创建Agent属性文件perties,使用如下命令完成。[xuluhui@master~]$cd/usr/local/flume-1.9.0[xuluhui@masterflume-1.9.0]$vimconf/perties然后在perties文件中写入以下内容。#Namethecomponentsonthisagentagent2.sources=source2agent2.sinks=sink2agent2.channels=channel2#Describe/configurethesourceagent2.sources.source2.type=spooldiragent2.sources.source2.spoolDir=/tmp/spooldiragent2.sources.source2.fileHeader=true#不能向监控目录中新增同名文件#Describethesinkagent2.sinks.sink2.type=hdfsagent2.sinks.sink2.hdfs.path=/flume/events/%y-%m-%d/%H%M/agent2.sinks.sink2.hdfs.filePrefix=events-agent2.sinks.sink2.hdfs.round=trueagent2.sinks.sink2.hdfs.roundValue=10agent2.sinks.sink2.hdfs.roundUnit=minuteagent2.sinks.sink2.hdfs.rollInterval=3agent2.sinks.sink2.hdfs.rollSize=20agent2.sinks.sink2.hdfs.rollCount=5agent2.sinks.sink2.hdfs.batchSize=1agent2.sinks.sink2.hdfs.useLocalTimeStamp=true#生成的文件类型,默认是Sequencefile,DataStream则为普通文本agent2.sinks.sink2.hdfs.fileType=DataStream#Useachannelwhichbufferseventsinfileagent2.channels.channel2.type=memoryagent2.channels.channel2.capacity=1000agent2.channels.channel2.transactionCapacity=100#Bindthesourceandsinktothechannelagent2.sources.source2.channels=channel2agent2.sinks.sink2.channel=channel2本案例中source2的类型是“spooldir”,它是一个SpoolingDirectorySource,用于监视缓冲目录中的新增文件,source2的缓冲目录是“/tmp/spooldir”;sink2的类型是“hdfs”,它是一个HDFSSink,用于将事件以文本、序列文件形式写到HDFS中;channel2的类型是“memory”,它是一个MemoryChannel,用于将事件存储在一个内存队列中。(2)启动FlumeAgent在启动FlumeAgent前,首先打开第一个终端,切换到root下在本地文件系统上创建一个待监视的缓冲目录“/tmp/spooldir”,使用如下命令完成。[root@masterxuluhui]$mkdir/tmp/spooldir其次,在root下将缓冲目录“/tmp/spooldir”的属主赋予给Flume普通用户如xuluhui,使用如下命令完成。[root@masterxuluhui]$chown-Rxuluhui/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手术准备与操作规范管理制度
- 手术环境管理制度
- 2022年三年级语文下册第四单元主题阅读+答题技巧(含答案、解析)部编版
- 2024年客运证考什么的
- 2024年嘉峪关小型客运从业资格证考试题答案
- 2024年宜春客运从业资格证模拟考试练习题
- 2024年道路客运从业资格证继续教育模拟考试
- 2024年绵阳a1客运资格证
- 2024年海口客运从业资格证的考试题目
- 2024年河北客运上岗考试都考什么科目
- 中国书法简史
- 防水施工方案28433
- 磷石膏综合利用调查报告
- 防水工程施工报价表
- 生产条件未发生变化情况声明
- 二年级数学小故事(课堂PPT)
- 国家开放大学《生产与运作管理》形考作业1-4参考答案
- 《观沧海》说课(课堂PPT)
- SF305无卤阻燃型聚酰亚胺薄膜挠性覆铜板-PCBGlobal
- 政府采购会议领导讲话稿
- 交警大队协勤人员管理制度-规章制度文书
评论
0/150
提交评论