手机网站整站下载,制作图片的软件app哪个好用,网页设计和网站制作,软件开发模型着重研究的是什么Hadoop生态圈中的Flume数据日志采集工具 一、数据采集的问题二、数据采集一般使用的技术三、扩展#xff1a;通过爬虫技术采集第三方网站数据四、Flume日志采集工具概述五、Flume采集数据的时候#xff0c;核心是编写Flume的采集脚本xxx.conf六、Flume案例实操1、采集一个网络… Hadoop生态圈中的Flume数据日志采集工具 一、数据采集的问题二、数据采集一般使用的技术三、扩展通过爬虫技术采集第三方网站数据四、Flume日志采集工具概述五、Flume采集数据的时候核心是编写Flume的采集脚本xxx.conf六、Flume案例实操1、采集一个网络端口的数据到控制台2、采集一个文件的数据控制台3、采集一个文件夹下的新文件数据到控制台4、采集一个网络端口的数据到HDFS中5、多数据源和多目的地案例6、多Flume进程组合的案例 一、数据采集的问题
数据采集一般指的是将数据采集到大数据环境下进行持久化、海量化的保存目的主要是为了我们后期的大数据处理数据统计分析、数据挖掘等等沉底数据基础。
不同的来源的数据我们一般有不同的数据采集方式
1、数据来源于我们的RDBMS关系型数据库Sqoop数据迁移工具实现数据的采集
2、数据来源于我们系统运行产生的日志文件日志文件记录的数据量特别庞大但是日志文件不属于大数据存储系统中东西因此日志文件记录不了海量的数据日志文件都会有一个定期清理规则。采集日志文件数据到大数据环境中。 一般采集日志文件数据到大数据环境使用的就是Flume技术
3、数据来源于其他网站开发一个电影网站电影网站应该具备哪些功能哪些类型的电影能受用户的欢迎。分析竞品数据这种情况竟品数据都是人家别人家网站的数据但是我们需要分析但是人家不给你数据通过爬虫获取数据一不留神就犯法。
4、数据来源于各种传感器设备不需要我们管
5、第三方提供、购买的第三方数据、开源数据集平台提供的阿里云的天池数据集、kaggle数据集平台、飞浆数据集平台、各个地区的政府公开数据集平台
二、数据采集一般使用的技术
sqoop技术采集RDBMS的数据到大数据环境中
Flume技术采集系统/网站产生的日志文件数据、端口数据等等到大数据环境中
爬虫技术采集第三方的数据爬虫一般是把采集的数据放到一个文件或者RDBMS数据库当中
三、扩展通过爬虫技术采集第三方网站数据
爬虫技术就是通过读取网页/网站的界面结构获取网页中嵌套的数据
爬虫目前主要有两种类型的爬虫
通过代码进行爬虫 python写的 优点在于可以定制化爬虫内容缺点 1、编写代码代码是非常复杂 2、很多网站做了反爬虫校验可能写了代码也无法爬取数据 通过可视化爬虫工具爬虫 优点不需要写一行代码只需要点点点就可以定制化数据爬虫反爬虫问题不用担心缺点1、无法随心所欲爬取数据2、可能会收费八爪鱼爬虫工具、集搜客爬虫工具…
四、Flume日志采集工具概述
Flume也是Apache开源的顶尖项目专门用来采集海量的日志数据到指定的目的地。
Flume采集数据采用一种流式架构思想只要数据源有数据就可以源源不断的采集数据源的数据到目的地
Flume的组成架构
Flume之所以可以实现采集不同数据源不仅仅只包含日志文件数据到指定的目的地源于Flume的设计机构。Agent一个Flume采集数据的进程一个Flume软件可以启动多个Flume采集进程AgentSourceFlume的一个数据源组件是Flume专门用来连接数据源的组件一个Flume采集进程Agent中Source组件可以有一个也可以有多个ChannelFlume中一个类似于缓存池的组件缓存池的主要作用就是用来临时保存source数据源采集的数据目的地需要数据从缓冲池中获取防止数据源数据产生过快而目的地消费数据过慢导致程序崩溃的问题。一个Agent中可以存在多个Channel组件SinkFlume中一个目的地下沉地组件是Flume专门用来连接目的地的组件一个Flume进程中sink组件也可以有多个但是一个sink只能从一个channel中获取数据。不能一个sink从不同channel拉取数据eventFlume中数据传输单位。Flume采集数据源的数据时会把数据源的数据封装为一个个的event。脚本文件xxx.conf需要用户自己编写的Flume采集数据时数据源和目的地有很多种因此如果我们采集数据时我们必须自定义一个脚本文件在脚本文件中需要定义采集的数据源的类型、channel管道的类型、sink的目的地的类型、以及source channel sink三者之间的关系。脚本文件定义成功之后我们才能去根据脚本文件启动Flume采集进程Agent【注意】一个source只能连接一个数据源一个sink只能连接一个目的地
Flume的采集数据的工作流程
首先我们先编写xx.conf脚本文件定义我们的采集的数据源、目的地、管道的类型定义成功之后我们根据脚本启动Flume采集进程Agent。一旦当Flume采集进程启动成功source就会去监听数据源的数据一旦当数据源有数据产生那么source组件会把数据源的数据封装为一个个的event然后source把event数据单位传输到channel管道中缓存然后sink组件会从channel中拉取指定个数的event将event中数据发送给sink连接的目的地。
Flume安装部署:三部曲 1、上传解压 2、配置环境变量 export FLUME_HOME/opt/app/flume-1.11.0
export PATH$PATH:$FLUME_HOME/bin3、修改配置文件 conf/flume-env.sh bin/flume-ng flume运行需要Java环境文件中需要指定Flume运行需要的内存容量
五、Flume采集数据的时候核心是编写Flume的采集脚本xxx.conf
Flume支持多种数据源、管道、目的地我们采集数据的时候并不是所有的数据源和目的地都要使用而是使用我们需要的源头和目的地。但是Flume不知道你需要什么数据源、需要什么目的地。 通过脚本文件指定我们采集的数据源、目的地、管道
脚本文件主要由五部分组成
1、起别名 我们可以根据采集脚本启动一个Flume进程Agent一个Flume支持启动多个Agent,Flume要求每一个Agent必须有自己的一个别名Flume启动的多个Agent的别名不能重复。同时Flume一个Agent进程中可以有多个source、多个channel、多个sink如何区分多个组件 我们还需要多Agent进程中的source、channel、sink起别名的Agent、source、channel、sink起别名 2、配置Source组件 我们一个Flume进程中可能存在1个或者多个数据源每一个source组件需要连接一个数据源但是数据源到底是谁如何连接我们需要配置。 3、配置channel组件 一个Agent中可能存在一个或者多个channelchannel也有很多种类型的因此我们需要配置我们channel的类型以及channel的容量。 4、配置Sink组件 一个Agent可以同时将数据下沉到多个目的地一个sink只能连接一个目的地目的地到底是谁如何连接需要配置sink。 5、组装source、channel、sink核心 一个source的数据可以发送给多个channel一个sink只能读取一个channel的数据。因此我们需要根据业务逻辑配置source、channel、sink的连接关系。
六、Flume案例实操
1、采集一个网络端口的数据到控制台
1、分析案例的组件类型
source网络端口 netcatchannel基于内存的管道即可memorysink控制台–Flume的日志输出logger
2、编写脚本文件portToConsole.conf
# 1、配置agent、source、channel、sink的别名
demo.sourcess1
demo.channelsc1
demo.sinksk1# 2、配置source组件连接的数据源--不同数据源的配置项都不一样 监听netcat type bind port
demo.sources.s1.typenetcat
demo.sources.s1.bindlocalhost
demo.sources.s1.port44444# 3、配置channel组件的类型--不同类型的管道配置项也不一样 基于内存memory的管道
demo.channels.c1.typememory
demo.channels.c1.capacity1000
demo.channels.c1.transactionCapacity200# 4、配置sink组件连接的目的地--不同类型的sink配置项不一样 基于logger的下沉地
demo.sinks.k1.typelogger# 5、配置source channel sink之间的连接 source 连接channel sink也要连接channel
# 一个source的数据可以发送给多个channel 一个sink只能拉去一个channel的数据
demo.sources.s1.channelsc1
demo.sinks.k1.channelc13、根据脚本文件启动Flume采集程序
flume-ng agent -n agent的别名必须和文件中别名保持一致 -f xxx.conf的路径 -Dflume.root.loggerINFO,console
4、测试
我们只需要给本地的44444端口发送数据看看Flume的控制台能否把数据输出即可需要新建一个和Linux的连接窗口然后使用 telnet localhost 44444 命令连接本地的44444端口发送数据telnet软件linux默认没有安装需要使用yum安装一下 yum install -y telnet必须先启动flume采集程序再telnet连接网络端口发送数据
2、采集一个文件的数据控制台
1、案例需求
现在有一个文件文件源源不断的记录用户的访问日志信息我们现在想通过Flume去监听这个文件一旦当这个文件有新的用户数据产生把数据采集到flume的控制台上
2、案例分析
sourceexec(将一个linux命令的输出当作数据源、自己写监听命令) 、taildirchannelmemorysinklogger
3、编写脚本文件
# 1、起别名
demo01.sourcess1
demo01.channelsc1
demo01.sinksk1# 2、定义数据源 exec linux命令 监听一个文件 tail -f|-F 文件路径
demo01.sources.s1.typeexec
demo01.sources.s1.commandtail -F /root/a.log
# 3、定义管道
demo01.channels.c1.typememory
demo01.channels.c1.capacity1000
demo01.channels.c1.transactionCapacity200# 4、配置sink目的地 logger
demo01.sinks.k1.typelogger# 5、关联组件
demo01.sources.s1.channelsc1
demo01.sinks.k1.channelc14、启动
flume-ng agent -n demo01 -f /root/fileToConsole.cong -Dflume.root.loggerINFO,consoleecho zs a.log 5、测试
3、采集一个文件夹下的新文件数据到控制台
1、案例需求
有一个文件夹文件夹下记录着网站产生的很多日志数据而且日志文件不止一个就想把文件夹下所有的文件数据采集到控制台同时如果这个文件夹下有新的数据文件产生也会把新文件的数据全部采集到控制台上。
2、案例分析
source:Spooling Directory Sourcechannel:memorysink:logger
3、编写配置文件
# 1、起别名
demo01.sourcess1
demo01.channelsc1
demo01.sinksk1# 2、定义数据源 Spooling Directory Source
demo01.sources.s1.typespooldir
demo01.sources.s1.spoolDir/root/demo
# 3、定义管道
demo01.channels.c1.typememory
demo01.channels.c1.capacity1000
demo01.channels.c1.transactionCapacity200# 4、配置sink目的地 logger
demo01.sinks.k1.typelogger# 5、关联组件
demo01.sources.s1.channelsc1
demo01.sinks.k1.channelc14、运行
5、测试
4、采集一个网络端口的数据到HDFS中
1、案例需求
监控一个网络端口产生的数据一旦当端口产生新的数据就把数据采集到HDFS上以文件的形式进行存放
2、案例分析
source:网络端口netcatchannel:基于内存的管道 memorysink:HDFS
3、编写脚本文件
# 1、配置agent、source、channel、sink的别名
demo.sourcess1
demo.channelsc1
demo.sinksk1# 2、配置source组件连接的数据源--不同数据源的配置项都不一样 监听netcat type bind port
demo.sources.s1.typenetcat
demo.sources.s1.bindlocalhost
demo.sources.s1.port44444# 3、配置channel组件的类型--不同类型的管道配置项也不一样 基于内存memory的管道
demo.channels.c1.typememory
demo.channels.c1.capacity1000
demo.channels.c1.transactionCapacity200# 4、配置sink组件连接的目的地--基于HDFS的
demo.sinks.k1.typehdfs
# 配置采集到HDFS上的目录 数据在目录下以文件的形式进行存放 文件的格式 FlumeData.时间戳
demo.sinks.k1.hdfs.pathhdfs://single:9000/flume
# 目录下生成的文件的前缀 如果没有配置 默认就是FlumeData
demo.sinks.k1.hdfs.filePrefixcollect
# 指定生成的文件的后缀 默认是没有后缀的 生成的文件的格式collect.时间戳.txt
demo.sinks.k1.hdfs.fileSuffixtxt
# 目录下采集的数据并不是记录到一个文件中文件是会滚动生成新的文件的
# 滚动的规则有三种:1、基于时间 2、基于文件的容量滚动 3、基于文件的记录的event数量进行滚动
# 默认值: 时间30s 容量 1024b event 10
# 时间滚动规则 如果值设置为0 那么就代表不基于时间生成新的文件
demo.sinks.k1.hdfs.rollInterval60
# 文件容量的滚动规则 单位b 如果设置为0 代表不基于容量滚动生成新的文件
demo.sinks.k1.hdfs.rollSize100
# event数量的滚动规则 一般设置为0 代表不急于event数量滚动生成新的文件
demo.sinks.k1.hdfs.rollCount0
# 文件在HDFS上的默认的存储格式是SequenceFile文件格式
demo.sinks.k1.hdfs.fileTypeDataStream
# 设置event的头部使用本地时间戳作为header
demo.sinks.k1.hdfs.useLocalTimeStamptrue# 5、配置source channel sink之间的连接 source 连接channel sink也要连接channel
# 一个source的数据可以发送给多个channel 一个sink只能拉去一个channel的数据
demo.sources.s1.channelsc1
demo.sinks.k1.channelc14、启动采集进程必须先启动HDFS
【注意】flume的依赖的guava和hadoop的guava有冲突需要将flume的lib目录下的guava依赖删除同时将hadoop的share/common/lib/guava依赖复制到flume的lib目录下
5、多数据源和多目的地案例
1、案例需求
现在有三个数据源1、网络端口 2、文件 3、文件夹 想把这三个数据源的数据全部采集到HDFS的指定目录下同时还要求把文件数据源的数据在控制台上同步进行展示
2、案例分析
sourcenetcat exec spooldirchannel两个基于内存的sink1、hdfs 2、logger
3、编写脚本文件
# 1、起别名 三个数据源 两个管道 两个sink
more.sourcess1 s2 s3
more.channelsc1 c2
more.sinksk1 k2# 2、定义数据源 三个
# 定义s1数据源 s1连接的是网络端口
more.sources.s1.typenetcat
more.sources.s1.bindlocalhost
more.sources.s1.port44444
# 定义s2的数据源 s2连接的是文件 /root/more.log文件
more.sources.s2.typeexec
more.sources.s2.commandtail -F /root/more.log
# 定义s3的数据源 s3监控的是一个文件夹 /root/more
more.sources.s3.typespooldir
more.sources.s3.spoolDir/root/more# 3、定义channel管道 两个 基于内存的
# 定义c1管道 c1管道需要接受三个数据源的数据
more.channels.c1.typememory
more.channels.c1.capacity20000
more.channels.c1.transactionCapacity5000
# 定义c2管道 c2管道只需要接收一个数据源 s2的数据
more.channels.c2.typememory
more.channels.c2.capacity5000
more.channels.c2.transactionCapacity500# 4、定义sink 两个 HDFS logger
# 定义k1这个sink 基于hdfs
more.sinks.k1.typehdfs
# hdfs支持生成动态目录--基于时间的 /more/2023-08-25
more.sinks.k1.hdfs.pathhdfs://single:9000/more/%Y-%m-%d
# 如果设置了动态目录那么必须指定动态目录的滚动规则-多长时间生成一个新的目录
more.sinks.k1.hdfs.roundtrue
more.sinks.k1.hdfs.roundValue24
more.sinks.k1.hdfs.roundUnithourmore.sinks.k1.hdfs.filePrefixcollect
more.sinks.k1.hdfs.fileSuffix.txt
more.sinks.k1.hdfs.rollInterval0
more.sinks.k1.hdfs.rollSize134217728
more.sinks.k1.hdfs.rollCount0
more.sinks.k1.hdfs.fileTypeDataStream
more.sinks.k1.hdfs.useLocalTimeStamptrue
# 定义k2 logger
more.sinks.k2.typelogger# 5、组合agent的组件
more.sources.s1.channelsc1
more.sources.s2.channelsc1 c2
more.sources.s3.channelsc1
more.sinks.k1.channelc1
more.sinks.k2.channelc26、多Flume进程组合的案例
1、案例需求
三个Flume进程其中第一个Flume采集端口的数据第二个Flume采集文件的数据要求第一个Flume进程和第二个Flume进程将采集到的数据发送给第三个Flume进程第三个Flume进程将接受到的数据采集到控制台上。
2、案例分析
first agent source :netcatchannel:memorysink:avro second agent source:execchannel:memorysink:avro third agent source:avrochannel:memorysink:logger
3、编写脚本文件 第一个脚本监听端口到avro的 first.sourcess1
first.channelsc1
first.sinksk1first.sources.s1.typenetcat
first.sources.s1.bindlocalhost
first.sources.s1.port44444first.channels.c1.typememory
first.channels.c1.capacity1000
first.channels.c1.transactionCapacity500first.sinks.k1.typeavro
first.sinks.k1.hostnamelocalhost
first.sinks.k1.port60000first.sources.s1.channelsc1
first.sinks.k1.channelc1第二脚本文件监听文件数据到avro的 second.sourcess1
second.channelsc1
second.sinksk1second.sources.s1.typeexec
second.sources.s1.commandtail -F /root/second.txtsecond.channels.c1.typememory
second.channels.c1.capacity1000
second.channels.c1.transactionCapacity500second.sinks.k1.typeavro
second.sinks.k1.hostnamelocalhost
second.sinks.k1.port60000second.sources.s1.channelsc1
second.sinks.k1.channelc1第三个脚本文件监听avro汇总的数据到logger的 third.sourcess1
third.channelsc1
third.sinksk1# avro类型当作source 需要bind和port参数 如果当作sink使用 需要hostname port
third.sources.s1.typeavro
third.sources.s1.bindlocalhost
third.sources.s1.port60000third.channels.c1.typememory
third.channels.c1.capacity1000
third.channels.c1.transactionCapacity500third.sinks.k1.typeloggerthird.sources.s1.channelsc1
third.sinks.k1.channelc14、启动脚本程序 先启动第三个脚本再启动第一个和第二脚本 flume-ng agent -n third -f /root/third.conf -Dflume.root.loggerINFO,console
flume-ng agent -n first -f /root/first.conf -Dflume.root.loggerINFO,console
flume-ng agent -n second -f /root/second.conf -Dflume.root.loggerINFO,console