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