安装地址:
安装部署:
本地使用的是CDH 6.3.1 版本,已安樱缺装Flume,此处略过安装步骤
使用 Flume 监听一个端口,收集该端口数据,并打印到控制台。
安装netcat并检查端口是否被占用
在Flume的安装目录下创建conf/lib目录,并创建flume的配置文件
添加内容如下:
第一种写法:
第二种写法:
参数说明:
--conf/-c:表示配置文件存储在 conf/目录
--name/-n:表示给 agent 起名为 a1
--conf-file/-f:flume 本次启动读取的配置文件是在 job 文件夹下的 flume-telnet.conf
文件。
-Dflume.root.logger=INFO,console :-D 表示 flume 运行时动态修改 flume.root.logger
参数属性值,并将控制台日志打印级别设置为 INFO 级别。日志级别包括:log、info、warn、
error。
通过nc输入的数据,flume监听页面都接受到了,并且输出到了控制台
实时监控 Hive 日志,并上传到 HDFS 中
注:要想读取 Linux 系统中的文件,就得按照 Linux 命令的规则执行命令。由于 Hive 日志在 Linux 系统中所以读取文件的类型选择:exec 即 execute 执行的意思。表示执行Linux 命令来读取文件。
添加如下内容:
注意: 对于所有与时间相关的转义序列,Event Header 中必须存在以 “timestamp”的key(除非 hdfs.useLocalTimeStamp 设置为 true,此方法会使用 TimestampInterceptor 自动添加 timestamp)。
a3.sinks.k3.hdfs.useLocalTimeStamp = true
从日志可以看到文件已经上传到HDFS:
在HDFS上查看:
1小时自动生产一个目录
1分钟自动生产一仿早个文件
tmp结尾的文件为正在写入的文件,时间到了后就会自动重命名
使用 Flume 监脊大辩听整个目录的文件,并上传至 HDFS
添加如下内容:
flume日志:
从日志输出可以看到原目录的 c.txt直接被修改为 c.txt.COMPLETED,然后c.txt上传到一个另外名字的文件,而且从输出可以看到,多个文件的内容会合并上传到一个hdfs上的文件。
hdfs上看输出:
同样是1分钟一个文件,但是有写入才会创建,如果没有写入是不行的。
Exec source 适用于监控一个实时追加的文件,不能实现断点续传;Spooldir Source 适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步;而 Taildir Source 适合用于监听多个实时追加的文件,并且能够实现断点续传。
案例需求:
使用 Flume 监听整个目录的实时追加文件,并上传至 HDFS 。
添加如下内容:
flume控制台输出:
HDFS查看输出文件:
Taildir Source 维护了一个 json 格式的 position File,其会定期的往 position File中更新每个文件读取到的最新的位置,因此能够实现断点续传
注:
Linux 中储存文件元数据的区域就叫做 inode,每个 inode 都有一个号码, *** 作系统用 inode 号码来识别不同的文件,Unix/Linux 系统内部不使用文件名,而使用 inode 号码来识别文件。
改名后inode不会发生变化,这点要注意
项目的架构是使用flume直接从kafka读取数据Sink HDFS
HDFS上每个文件都要在NameNode上建立一卖余个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生中颂滚很多的索引文件,一方面会大樱猛量占用NameNode的内存空间,另一方面就是索引文件过大使得索引速度变慢。但注意,存储小文件所需要的磁盘容量和数据块的大小无关。例如,一个1MB的文件设置为128MB的块存储,实际使用是1MB的磁盘空间,而不是128M,但他的索引在NameNode中占用的内存是150byte。
小文件的优化无非以下几种方式:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)