大数据电商流量分析项目实战:Flume 数据采集及ETL入仓(五)

在这里插## 标题入图片描述

> 						大家好,我是程序员小羊!

✨博客主页: https://blog.csdn.net/m0_63815035?type=blog

💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

在这里插入图片描述

前言&课程重点

大家好,我是程序员小羊!接下来一周,咱们将用 “实战拆解 + 技术落地” 的方式,带大家吃透一个完整的大数据电商项目 ——不管你是想靠项目经验敲开大厂就业门,还是要做毕业设计、提升技术深度,这门课都能帮你 “从懂概念到能落地”。

毕竟大数据领域不缺 “会背理论” 的人,缺的是 “能把项目跑通、能跟业务结合” 的实战型选手。咱们这一周的内容,不搞虚的,全程围绕 “电商业务痛点→数据解决方案→技术栈落地” 展开,每天聚焦 1 个核心模块,最后还能输出可放进简历的项目成果。

进入正题:

本项目是一门实战导向的大数据课程,专为具备Java基础但对大数据生态系统不熟悉的同学量身打造。你将从零开始,逐步掌握大数据的基本概念、架构原理以及在电商流量分析中的实际应用,迅速融入当下热门的离线数据处理技术。

在这门课程中,你将学会如何搭建和优化Hadoop高可用环境,了解HDFS存储、YARN资源调度的核心原理,为数据处理打下坚实的基础。同时,你将掌握Hive数据仓库的构建和数仓建模方法,了解如何将海量原始数据经过层次化处理,转化为高质量的数据资产。

课程还将引领你深入Spark SQL的世界,通过实际案例学习如何利用Spark高效计算PV、UV以及各类衍生指标,提升数据分析效率。此外,你还将学习Flume的安装与配置,实现Web日志的实时采集和ETL入仓,确保数据传输的稳定与高效。

为了贴近企业实际运作,本项目还包括定时任务的设置和自动化数据管道构建,教你如何编写Shell脚本并利用crontab定时调度Spark作业,让数据处理过程实现自动化与智能化。最后,通过可视化展示模块,你将学会用FineBI等工具将数据分析结果直观呈现

总之,这是一门集大数据基础、系统搭建、数据处理与智能分析于一体的全链路实战课程。无论你是初入大数据领域的新手,还是希望提升数据处理能力的开发者,都将在这里收获满满,掌握最前沿的大数据技术。

课程计划:

天数 主题 主要内容
Day 1 大数据基础+项目分组 (ZK补充) 大数据概念、数仓建模、组件介绍、分组;简单介绍项目。
Day 2 Hadoop初认识+ HA环境搭建 初认识Hadoop,了解HDFS 基本操作,YARN 资源调度,数据存储测试等,并且完成Hadoop高可用的环境搭建。
Day 3 Hive 数据仓库 Hive SQL 基础、表设计、加载数据,搭建Hive环境并融入Hadoop实现高可用
Day 4 Spark SQL 基础 讲解Spark基础,DataFrame & SQL 查询,Hive 集成和环境的搭建
Day 5 Flume 数据采集及ETL入仓 安装Flume高可用,学习基础的Flume知识并且使用Flume 采集 Web 日志,存入 HDFS;数据格式解析,数据传输优化
Day 6 数据入仓 & 指标计算 解析 PV、UV 计算逻辑,Hive 数据清洗、分层存储(ODS → DWD)
Day 7 Spark 计算 & 指标优化 使用 Spark SQL 计算 PV、UV 及衍生指标(如跳出率、人均访问时长等)
Day 8 定时任务 & 数据管道 编写 Shell 脚本,使用 crontab 实现定时任务,调度 Spark SQL
Day 9 可视化 & 数据分析 搭建一个简单的项目使用 FineBI 进行数据展示,分析趋势。
Day 10 项目答辩 小组演示分析结果,可以后台联系程序员小羊点评

今日学习重点(flume采集):

你已经搭建好环境,现在要实现 Flume → Hive 入仓 → Spark 处理 的完整流程,并提取时间戳中的 小时 作为一个指标。下面是详细的步骤:

flume是什么

Flume 是一个分布式、可靠且可扩展的日志采集系统,专门设计用于高吞吐量的日志数据传输。它能够将来自不同来源(如 Web 服务器、应用服务器)的日志数据实时传输到存储系统,如 HDFS 或 Hive。在这里,他要帮我们处理典型的日志数据,将数据入仓。

特点:高可靠性,高扩展性、高灵活性、高实时,典型用于日志文件采集、监控数据传输、业务指标实时统计等。

Flume 的核心架构由 Source(数据源)Channel(通道)Sink(数据目的地) 三部分组成,每个组件在整个数据流中都发挥着关键作用:

在这里插入图片描述

日志文件(服务器) --> Source (采集日志) --> Channel (临时缓冲) --> Sink (输出到 HDFS) --> Hive(外部表映射)

Agent(核心):

在每一个采集任务中,无论是实时的数据采集还是离线的批量数据采集,都有一个任务的核心,通常我们定义为 Agent,在创建项目的时候我们也要配置 例如 a1.xxx 作为核心的配置

Source(数据源):
从外部数据源(如日志文件、系统命令输出)中读取数据。常用的类型包括:TailDir(实时监控目录下文件)、Exec(执行命令并采集输出)等。

Channel(通道):
作为数据的临时存储区域,连接 Source 和 Sink。常见类型有内存队列和文件队列,保证数据的缓冲和传递安全。

Sink(数据目的地):
将数据输出到指定存储系统中,如 HDFS、Hive、Kafka 等。对于日志数据入仓 Hive,通常会将数据先写入 HDFS,再由 Hive 建立外部表进行映射和查询。

安装Flume

接下来我们开始安装Flume,首先请先准备 apache-flume-1.11.0-bin.tar.gz 文件,并确保打开集群的三个节点(node01 node02 node03)。

  1. 将 Flume 安装包上传至服务器并解压
[root@node01 ~]# tar -zxvf apache-flume-1.11.0-bin.tar.gz -C /opt/yjx/
  1. 修改环境配置脚本文件flume-env.sh
[root@node01 ~]# cd /opt/yjx/apache-flume-1.11.0-bin/conf
[root@node01 conf]# cp flume-env.sh.template flume-env.sh
[root@node01 conf]# vim flume-env.sh

>>>>在文件末尾添加下面内容

export JAVA_HOME=/usr/java/jdk1.8.0_351-amd64
# 设置使用内存大小
export JAVA_OPTS="-Xms512m -Xmx1024m -Dcom.sun.management.jmxremote"
  1. 删除内置的Guava包,将apache-flume-1.11.0-bin/lib目录下的guava-11.0.2.jar包删除以兼容 Hadoop。
[root@node01 ~]# ls /opt/yjx/apache-flume-1.11.0-bin/lib/guava*/opt/yjx/apache-flume-1.11.0-bin/lib/guava-11.0.2.jar
[root@node01 ~]# rm /opt/yjx/apache-flume-1.11.0-bin/lib/guava-11.0.2.jar -rf
  1. 将 node01 配置好的 Flume 拷贝至 node02 和 node03。
[root@node02 ~]# scp -r root@node01:/opt/yjx/apache-flume-1.11.0-bin/ /opt/yjx/
[root@node03 ~]# scp -r root@node01:/opt/yjx/apache-flume-1.11.0-bin/ /opt/yjx/
  1. 修改三个机器环境变量,修改环境变量vim /etc/profile,在文件末尾添加以下内容
export FLUME_HOME=/opt/yjx/apache-flume-1.11.0-bin
export PATH=$FLUME_HOME/bin:$PATH

修改完成后source /etc/profile重新加载环境变量。

  1. 校验安装是否成功
[root@node01 ~]# flume-ng version
Flume 1.11.0
Source code repository: https://git.apache.org/repos/asf/flume.git
Revision: 1a15927e594fd0d05a59d804b90a9c31ec93f5e1
Compiled by rgoers on Sun Oct 16 14:44:15 MST 2022
From source with checksum bbbca682177262aac3a89defde369a37

Flume介绍

Flume 在大数据生态系统中扮演着数据流动的关键角色。它将分散在各个业务系统中的海量日志数据高效、实时地汇聚到大数据平台中,为后续的数据存储、处理与分析提供了坚实的基础。

通过灵活的 Source、Channel 和 Sink 架构,Flume 能够无缝对接 Hadoop、Hive、Kafka 等系统,确保数据从生成到入仓的全过程既稳定又高效。其高扩展性和可靠性,使得在面对不断增长的数据量和复杂业务场景时,Flume 成为支撑大数据平台的重要一环,为企业决策和业务优化提供了实时数据支撑。

如果我们要使用这个首先安装完成之后你需要创建一个 xxx.conf 的文件,一般建议放置在 Flume 根目录下的 conf/ 文件夹,运行时只需要使用 -f 参数指定配置文件 即可。

运行:bin/flume-ng agent -n <agent_name> -c conf -f conf/<xxx.conf>
演示:bin/flume-ng agent -n a1 -c conf -f conf/flume-nginx.conf

source机制

Flume 的 Source 负责从外部数据源获取数据,并将数据转换为 Event(事件) 传递给 Channel。常见的数据源包括 日志文件、执行命令输出、消息队列、网络流数据等。Flume 支持多种 Source 类型,每种 Source 适用于不同的应用场景。

多个 Source 可以组成 Source 组,同时采集不同来源的数据,并通过 Channel 统一管理。

通过灵活的参数配置,你可以让 Flume 适应各种业务需求,比如监听远程日志、处理文件流式数据、接收 HTTP 请求等。

source的多种数据源:
Source 类型 描述 适用场景 主要配置参数
Exec 通过执行 shell 命令获取数据 监控日志文件(如 tail -F)或运行自定义脚本 command(要执行的命令)
Spooling Directory 监控指定目录下的新文件 采集应用程序生成的日志文件 spoolDir(目录路径)
Netcat 监听 TCP/UDP 端口 从远程服务器推送日志数据 bind(监听 IP)、port(端口)
Syslog 监听 syslog 协议日志 采集系统日志(支持 TCP/UDP) port(监听端口)、protocol(tcp/udp)
Kafka 订阅 Kafka 消息队列 采集分布式日志数据 kafka.bootstrap.servers(Kafka 地址)、kafka.topics(订阅的主题)
Avro 监听 Avro RPC 请求 适用于 Flume 与 Flume 之间的数据传输 bind(监听地址)、port(端口)
HTTP 通过 HTTP 接口接收数据 处理 Web 应用的日志上报 port(监听端口)
Source端的基本配置

在 Flume 的配置文件中,我们可以按照 a1.source = r1 创建一个单一的Source源并且给他配置source的类型和对应类型要绑定的参数来声明一个source。

同时source必须要绑定一个channel,这边我们简单提一嘴,后续在channel你会了解到。

# 定义 Source
a1.source = r1
a1.sources.r1.type = <Source 类型>
a1.sources.r1.<参数名> = <参数值>

# a1 代表 Flume agent 的名称
# r1 代表 Source 的名称

# 绑定 Channel
a1.sources.r1.channels = c1
Source的多数据源采集

如果你的数据来源于 多个机器、多种数据源,Flume 允许你定义多个 Source,并使用 Source 组(Source Groups) 来协调它们。你可以这样配置他们

# 组一个 Source 组
a1.sources = r1 r2

# 定义多个 Source并 用不同的方案连接
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/app1.log
a1.sources.r1.channels = c1

a1.sources.r2.type = netcat
a1.sources.r2.bind = 0.0.0.0
a1.sources.r2.port = 4444
a1.sources.r2.channels = c1
多Soure数据采集
# 定义多个 Source
agent.sources = source1 source2 source3

# source1 - 从本地日志文件读取
agent.sources.source1.type = exec
agent.sources.source1.command = tail -F /var/log/syslog
agent.sources.source1.channels = memoryChannel

# source2 - 从远程 TCP 端口接收日志数据
agent.sources.source2.type = netcat
agent.sources.source2.bind = 0.0.0.0
agent.sources.source2.port = 44444
agent.sources.source2.channels = memoryChannel

# source3 - 从 Kafka 订阅数据
agent.sources.source3.type = org.apache.flume.source.kafka.KafkaSource
agent.sources.source3.kafka.bootstrap.servers = kafka1:9092,kafka2:9092
agent.sources.source3.kafka.topics = log_topic
agent.sources.source3.channels = fileChannel
多Source源采集的案例实战
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数开小羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值