数仓开发——数据采集

1.大数据组件介绍

Hadoop:

功能:大数据存储和处理框架,提供分布式存储(HDFS)和计算(MapReduce)。

节点:NameNode:管理文件系统的元数据和文件到数据块的映射。

DataNode:存储实际的数据块,负责数据的读写。

ResourceManager:调度和管理计算资源,负责资源分配。

NodeManager:运行在每个数据节点上,负责任务的执行和资源监控。

Kafka:

功能:分布式消息队列,用于处理和传输实时数据流。

节点:Broker:处理消息的接收、存储和分发。

Producer:将数据发布到Kafka的主题中。

Consumer:从主题中读取数据。

Zookeeper(通常用于Kafka的元数据管理和集群协调):负责协调Kafka节点的工作,管理Broker的元数据。

Zookeeper:

功能:分布式协调服务,提供分布式应用的协调和同步功能。

节点:Leader:负责处理写请求,协调集群的操作。

Follower:从Leader节点接收更新,处理读请求。

Observer:接收数据更新,但不参与写操作,主要用于增加系统的读取性能。

Flume:

功能:分布式数据收集、聚合和传输系统,用于将日志数据从多个源传输到目标系统。

节点:Source:从外部系统接收数据。

Channel:存储数据,作为数据流的中间环节。

Sink:将数据写入最终存储系统,如HDFS、HBase等。

DataX:

功能:数据同步工具,支持各种数据源之间的数据迁移和同步。

节点:Reader:从源数据源读取数据。

Writer:将数据写入目标数据源。

Plugin:包括各种读取和写入插件,用于支持不同类型的数据源。

Maxwell:

功能:MySQL变更数据捕获(CDC)工具,用于实时数据同步和流式处理。

节点:Maxwell Process:捕获MySQL的变更日志,转换为JSON格式,并将其发布到Kafka等流处理系统。

Kafka/其他流系统:用于存储和进一步处理捕获的变更数据。

2.数据采集流程

日志数据:

Logdata(本地)--flume(采集方式)-->kafka---flume(采集方式)-->hdfs---load-->hive

(1)配置flume到kafka的文件创建job文件写一个conf脚本

示例如下:

# 定义Flume agent的名称为a1,配置source和channel

a1.sources = r1

a1.channels = c1

# 配置source r1

# 使用TAILDIR类型来监控目录中的日志文件

a1.sources.r1.type = TAILDIR

# 定义文件组f1

a1.sources.r1.filegroups = f1

# 指定要监控的日志文件路径

a1.sources.r1.filegroups.f1 = /opt/module/applog/log/app.*

# 指定Flume存储文件位置的路径

a1.sources.r1.positionFile = /opt/module/flume/taildir_position.json

# 配置channel c1

# 使用KafkaChannel类型的channel,将数据传输到Kafka

a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel

# Kafka服务器的地址

a1.channels.c1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092

# Kafka的topic

a1.channels.c1.kafka.topic = topic_log

# 是否将数据解析为Flume事件

a1.channels.c1.parseAsFlumeEvent = false

# 将source r1 绑定到channel c1

a1.sources.r1.channels = c1

(2)配置kafka到hdfs

# 定义Flume agent的名称为a1,配置source、channel和sink

a1.sources = r1

a1.channels = c1

a1.sinks = k1

# 配置source r1

# 使用KafkaSource从Kafka读取数据

a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource

# 批处理的大小

a1.sources.r1.batchSize = 5000

# 批处理的时间间隔(毫秒)

a1.sources.r1.batchDurationMillis = 2000

# Kafka服务器的地址

a1.sources.r1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092

# 从Kafka读取的主题

a1.sources.r1.kafka.topics = topic_db

# Kafka消费者组ID

a1.sources.r1.kafka.consumer.group.id = flume

# 将Kafka消息中的主题设置到Flume事件的header中

a1.sources.r1.setTopicHeader = true

a1.sources.r1.topicHeader = topic

# 使用拦截器i1来处理事件

a1.sources.r1.interceptors = i1

a1.sources.r1.interceptors.i1.type = com.atguigu.gmall.flume.interceptor.TimestampAndTableNameInterceptor$Builder

# 配置channel c1

# 使用file类型的channel来存储数据

a1.channels.c1.type = file

# 存储检查点数据的目录

a1.channels.c1.checkpointDir = /opt/module/flume/checkpoint/behavior2

# 存储数据文件的目录

a1.channels.c1.dataDirs = /opt/module/flume/data/behavior2/

# 单个文件的最大大小

a1.channels.c1.maxFileSize = 2146435071

# channel的容量

a1.channels.c1.capacity = 1000000

# channel的保持时间(秒)

a1.channels.c1.keep-alive = 6

# 配置sink k1

# 将数据写入HDFS

a1.sinks.k1.type = hdfs

# HDFS中的路径

a1.sinks.k1.hdfs.path = /origin_data/gmall/db/%{tableName}_inc/%Y-%m-%d

# 文件前缀

a1.sinks.k1.hdfs.filePrefix = db

# 不进行文件轮换

a1.sinks.k1.hdfs.round = false

# HDFS文件轮换配置

a1.sinks.k1.hdfs.rollInterval = 10

a1.sinks.k1.hdfs.rollSize = 134217728

a1.sinks.k1.hdfs.rollCount = 0

# HDFS文件类型和压缩配置

a1.sinks.k1.hdfs.fileType = CompressedStream

a1.sinks.k1.hdfs.codeC = gzip

# 将source r1 绑定到channel c1

a1.sources.r1.channels = c1

# 将sink k1 绑定到channel c1

a1.sinks.k1.channel = c1

业务数据:

(1)Mysql(binlog)--maxwell(增量数据)-->kafka--flume-->hdfs

Maxwell-bootstrap也可以采集历史全量

配置maxwell

# 设置日志级别为信息

log_level=info

# Kafka生产者配置

producer=kafka

# Kafka集群的Bootstrap服务器列表

kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092

# Kafka主题

kafka_topic=topic_db

# MySQL登录信息

# MySQL主机地址

host=hadoop102

# MySQL用户名

user=maxwell

# MySQL密码

password=maxwell

# JDBC连接选项,包含SSL、时区和公钥检索设置

jdbc_options=useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true

# 过滤条件:排除gmall中的z_log表的数据,该表是日志数据的备份,不需要采集

filter=exclude:gmall.z_log

# 数据分区策略:按主键分组,以避免数据倾斜

producer_partition_by=primary_key

# 模拟的日期,用于修改数据时间戳的日期部分

mock_date=2024-08-19

(2)

Mysql --全量数据(datax)--mysqlreader>datax--hdfswriter-->hdfs

dataX一些配数据库(数据库名,表名,驱动等)和hdfs的信息(json格式)

退出安全模式:hdfs dfsadmin -safemode leave

                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值