Flume 安装部署

文章目录

  • Flume 概述
  • Flume 安装部署
    • 官方网址
    • 下载安装
    • 配置文件
    • 启动 Flume 进程
    • 启动报错
    • 输出文件乱码问题

Flume 概述

Flume(Apache Flume)是一个开源的分布式日志收集、聚合和传输系统,属于 Apache 软件基金会的项目之一。其主要目标是简化大规模数据处理中日志数据的采集、移动和处理过程。Flume 的设计灵感来自于 Google 的 Chubby 论文和 Facebook 的 Scribe 系统。

以下是 Flume 的主要概述:

  • 架构模型: Flume 采用了分布式、可扩展的架构。它的基本架构包括多个组件,其中关键组件包括代理(Agent)、通道(Channel)和收集器(Collector)等。
  • 代理(Agent): 代理是 Flume 中的基本工作单元,负责从数据源采集数据,并将数据传输到目的地。代理可以部署在数据源和目的地之间,负责数据的传输和整理。
  • 通道(Channel): 通道是代理之间的缓冲区,用于存储传输的数据。通道允许代理之间异步、可靠地传输数据,确保即使在某个环节发生故障时,数据也不会丢失。
  • 收集器(Collector): 收集器是 Flume 的目的地组件,负责接收代理传递的数据,并将数据存储到指定的存储系统中,如 Hadoop HDFS、HBase 等。
  • 事件(Event): Flume 中的基本数据单元被称为事件,代表被传输的数据。事件由代理采集,并通过通道传递到收集器。
  • 拓扑结构: Flume 支持多种拓扑结构,包括单一代理、多代理、多通道等,使其适用于不同规模和需求的数据处理场景。
  • 可插拔性: Flume 具有良好的可插拔性,允许用户根据需要选择适当的组件,如数据源、通道、拦截器等,以定制数据采集和传输过程。
  • 监控和管理: Flume 提供了监控和管理工具,使用户能够实时跟踪数据的流动和性能指标,以及对代理进行配置和管理。

总体而言,Flume 被设计用于解决大规模数据采集和传输的问题,使得数据工程师能够更轻松地搭建可靠的数据流水线,将数据从源头传递到目的地,以支持各种数据分析和处理需求。

Flume 安装部署

官方网址

  • Flume 官网地址:Welcome to Apache Flume — Apache Flume
  • 文档查看地址:Flume 1.9.0 User Guide — Apache Flume
  • 下载地址:Index of /dist/flume (apache.org)

下载安装

apache-flume-1.9.0-bin.tar.gz 上传到 hadoop102 的 /root/software 目录下

tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /opt/

apache-flume-1.9.0-bin 改名为 flume-1.9.0

cd /opt/
mv apache-flume-1.9.0-bin flume-1.9.0

配置文件

flume-1.9.0/conf 下的 flume-env.sh.template 文件修改为 flume-env.sh,并配置 flume-env.sh 文件

mv flume-env.sh.template flume-env.sh
vim flume-env.sh

在末尾添加:

export JAVA_HOME=/usr/java/default

flume-1.9.0/conf 中添加文件 file-flume-log.conf,该文件是一个 Flume 作业的核心文件

vim file-flume-log.conf

文件添加内容如下:

# 定义组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1############ source 部分 ############
a1.sources.r1.type = spooldir
# 配置读取文件的目录(本地目录)
a1.sources.r1.spoolDir = /opt/flume-1.9.0/logs############ channel 部分 ############
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 1000############ sink 部分 ############
a1.sinks.k1.type = hdfs
# 使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
# 配置输出到 HDFS 的路径,根据日期格式分开存储文件
a1.sinks.k1.hdfs.path = hdfs://hadoop102:9000/flume/%Y-%m-%d/%H%M
# 上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = log
# 多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
# 重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = minute
# 设置文件格式 DataStream 不会压缩输出文件,默认为 SequenceFile
a1.sinks.k1.hdfs.fileType = DataStream# 把 source 和 sink 绑定到 channel 中
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

启动 Flume 进程

Flume 目录下输入命令:

bin/flume-ng agent -c /opt/flume-1.9.0/conf/ -n a1 -f /opt/flume-1.9.0/conf/file-flume-log.conf -Dflume.root.logger=info,console

令开一个窗口,随便传个文件到 /opt/flume-1.9.0/logs 目录下,蓝色说明 Flume 控制台在滚动打印

可以进入 HDFS Web 页面查看生成的文件

在这里插入图片描述

启动报错

如果出现下述报错内容

flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:459)] process failed
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)Vat org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)at org.apache.hadoop.conf.Configuration.setBoolean(Configuration.java:1679)at org.apache.flume.sink.hdfs.BucketWriter.open(BucketWriter.java:221)at org.apache.flume.sink.hdfs.BucketWriter.append(BucketWriter.java:572)at org.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:412)at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:67)at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:145)at java.lang.Thread.run(Thread.java:748)

原因是 Hadoop 3.3.1 中的 guava 包版本和 Flume 1.9.0 中的版本不一致

用 Hadoop 中高版本的 guava 包覆盖 Flume 中低版本的 guava 包

cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar /opt/flume-1.9.0/lib/guava-11.0.2.jar

输出文件乱码问题

在 sink 部分添加下述配置

# 设置文件格式 DataStream 不会压缩输出文件,默认为 SequenceFile
a1.sinks.k1.hdfs.fileType = DataStream

查看官方文档 Flume 1.9.0 User Guide — Apache Flume 在 hdfs-sink 部分的配置中写到文件类型默认为 SequenceFile,数据以二进制格式编码,并且将数据压缩了,数据下载下来是二进制格式,不能直接查看,无法可视化。如果想要直接查看输出文件,使用 DataStream,其不会压缩输出文件。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

预约系统源码解析:打造智能定制化预约服务的技术奇迹

在当今数字化时代,预约系统的重要性日益凸显,而预约系统源码的开放将为各行业带来更加灵活、智能的预约解决方案。本文将深入探讨预约系统源码的技术内幕,为开发者提供实用的代码示例,助力打造智能定制化的预约服务。 技术栈概览…

【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标☆

【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标 (1)前缀和后缀(2)前缀表(最长相同的前缀和后缀的长度)(3)匹配过程示意(4)next数组的…

Python----练习:使用面向对象实现报名系统开发

第一步:分析哪些动作是由哪些实体发出的 学生提出报名 学生提供相关资料 学生缴费 机构收费 教师分配教室 班级增加学生信息 于是,在整个过程中,一共有四个实体:学生、机构、教师、班级!在现实中的一个具体的实…

xxl-job(分布式调度任务)

简介 针对分布式任务调度的需求,市场上出现了很多的产品: 1)TBSchedule:淘宝推出的一款非常优秀的高性能分布式调度框架,目前被应用于阿里,京东,支付宝,国美等很多互联网企业的流程调度系统中。…

【深度学习】Adversarial Diffusion Distillation,SDXL-Turbo 一步出图

代码: https://huggingface.co/stabilityai/sdxl-turbo 使用 SDXL-Turbo 是SDXL 1.0的精炼版本,经过实时合成训练。SDXL-Turbo 基于一种称为对抗扩散蒸馏 (ADD) 的新颖训练方法(请参阅技术报告),该方法允许在高图像质…

GPT实现开放式世界游戏实践【生化危机】

最近开始研究如何基于GPT构建一个游戏引擎,于是先从简单的文字游戏开始探索。 从最简单的选择机制、故事机制,完善成一个包括天气、事件、技能、属性、伙伴、建造系统的-生化危机版文字游戏-。 我唯一的体验是:AI游戏,大有可为! …

Linux socket编程(9):IO复用之poll和epoll详解

在之前的文章中,我们学习了IO复用模型之select原理及例子,但是select有监听描述符个数的限制,而且select的效率并不高,所以这篇文章就来学习效率更高的poll和Linux特有的epoll方法。 文章目录 1 select/poll/epoll对比2 poll2.1 p…

《小满生活》连续8天收视破2,生活剧怎么拍才好看?

拍生活剧从不失手的导演汪俊回归统治区,新剧《小满生活》以连续8天收视率破2的骄人成绩笑傲国产剧市场。 ​秦昊、蒋欣主演的《小满生活》是“小系列”的第四部作品,聚焦都市中年夫妻为了二胎换新房的社会问题,这次没有和老搭档黄磊合作&…

Day49力扣打卡

打卡记录 需要添加的硬币的最小数量(归纳法) 链接 按着已经加入的数,以此偏移对应距离,从而得到新的连续数,若是出现断层则计入最小次数中,再以此偏移对应距离。 class Solution:def minimumAddedCoins(s…

国际语音通知系统有哪些优点?国际语音通知系统有哪些应用场景?

国际语音通知是一种全球性的通信工具,它通过语音方式向用户发送各种重要信息和提示。无论是快递到货的取件提醒、机场航班的延误通知,还是银行账户的余额提醒,国际语音通知都能准确、迅速地将信息传达给用户。 三、国际语音通知系统有哪些优…

排序算法介绍(二)冒泡排序

0. 简介 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排…

unordered_map与unordered_set的实现(含迭代器)

unordered_map与unordered_set的实现 文章目录 unordered_map与unordered_set的实现前言一、问题一HashTable.h 二、问题二&问题三1.封装时如何取出key2.不同类型key如何建立对应关系 三、问题四&问题五问题四问题五 四、实现代码MyUnorderedSet.hMyUnorderedMap.hHash…

WebGL笔记:矩阵缩放的数学原理和实现

矩阵缩放的数学原理 和平移一样,以同样的原理,也可以理解缩放矩阵让向量OA基于原点进行缩放 x方向上缩放:sxy方向上缩放:syz方向上缩放:sz 最终得到向量OB 矩阵缩放的应用 比如我要让顶点在x轴向缩放2,y轴…

python爬虫AES魔改案例:某音乐素材下载网

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行 atob(‘aHR0cHM6Ly93d3cuYWlnZWkuY29tL3NvdW5kL2NsYXNzLw’) 拿到网址,F12打开调…

html动漫网页设计分享 紫罗兰永恒花园网页作业成品带视频,注册登录,表格,表单

html5静态网页设计要是用HTML DIVCSS JS等来完成页面的排版设计,一般的网页作业需要融入以下知识点:div布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,学生网页作业源码可以…

数据挖掘实战-基于word2vec的短文本情感分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

鸿蒙基础入门与高频知识点梳理

介绍鸿蒙高频知识点,持续更新中 一、鸿蒙代码结构 ├──entry/src/main/ets // 代码区 │ ├──common │ │ └──Constant.ets // 常量类 │ ├──entryability │ │ └──EntryAbility.ts // 程序入口类 │ ├──p…

【算法】单调队列 滑动窗口最大值

文章目录 例题——239. 滑动窗口最大值相关练习1438. 绝对差不超过限制的最长连续子数组解法1——两个单调队列分别维护最大值和最小值解法2——有序集合TreeMap 2398. 预算内的最多机器人数目解法1——二分答案 单调队列解法2——双指针 单调队列 (不固定大小的滑…

并发编程1:线程的基本概念

一、进程、线程、用户线程&原生线程、优先级、守护线程 什么是进程 是程序一次执行的过程,是系统运行程序的基本单位。系统运行一次程序,就是一个进程从创建到关闭的过程。Java 项目从 main 方法启动,就是启动了一个 JVM 进程&#xff…

C++面试宝典第1题:爬楼梯

题目 小乐爬楼梯,一次只能上1级或者2级台阶。楼梯一共有n级台阶,请问总共有多少种方法可以爬上楼? 解析 这道题虽然是一道编程题,但实际上更是一道数学题,着重考察应聘者的逻辑思维能力和分析解决问题的能力。 当楼梯只…