3. 数据采集与接入:数据源类型、采集工具与接入策略
数据采集与接入是数据工程流水线的起点,其质量直接决定后续数据清洗、建模与可视化的上限。本章围绕三类数据源、三大主流采集工具以及接入策略展开,帮助学员建立从源头到通道的完整认知。
3.1 数据源类型:结构化、半结构化、非结构化
根据数据组织方式与模式约束的强弱,数据源可分为以下三类:
| 类型 | 特征 | 典型格式 | 存储系统 | 采集难度 |
|---|---|---|---|---|
| 结构化 | 严格的行列模式,字段类型固定 | CSV、Parquet、Avro | RDBMS(MySQL、PostgreSQL) | 低 |
| 半结构化 | 自描述模式,结构可变 | JSON、XML、YAML | NoSQL(MongoDB、Elasticsearch) | 中 |
| 非结构化 | 无固定模式,依赖元数据 | 文本、图片、音视频 | 对象存储(HDFS、S3) | 高 |
实战提示: 在数据质量评估阶段,半结构化数据的模式漂移(如 JSON 字段新增/缺失)是常见风险点,建议在采集层预先做 Schema-on-Read 校验。
3.2 数据采集工具:Sqoop、Flume、Kafka
不同数据源对应不同的采集工具,以下从适用场景、传输模式与可靠性三个维度进行对比:
| 工具 | 适用场景 | 传输模式 | 可靠性机制 | 典型吞吐 |
|---|---|---|---|---|
| Sqoop | RDBMS ↔ Hadoop 批量导入/导出 | 批量(MapReduce) | 事务快照、断点续传 | GB/min 级 |
| Flume | 日志流、事件流实时采集 | 流式(Channel-Sink) | Channel 事务、故障转移 | MB/s 级 |
| Kafka | 高吞吐消息总线、多消费者解耦 | 流式(Pub-Sub) | 分区副本、ISR 机制 | MB~GB/s 级 |
Sqoop 典型用法示例
# 从 MySQL 导入到 Hive
sqoop import \
--connect jdbc:mysql://host:3306/db \
--username user --password pass \
--table orders \
--hive-import \
--hive-table dw.orders \
--split-by order_id \
--num-mappers 8
Flume 配置文件示例
# flume.conf:采集 Web 日志到 HDFS
agent.sources = tailSrc
agent.channels = memCh
agent.sinks = hdfsSink
agent.sources.tailSrc.type = spooldir
agent.sources.tailSrc.spoolDir = /var/log/web
agent.sources.tailSrc.channels = memCh
agent.channels.memCh.type = memory
agent.channels.memCh.capacity = 10000
agent.sinks.hdfsSink.type = hdfs
agent.sinks.hdfsSink.hdfs.path = /data/logs/%Y%m%d
agent.sinks.hdfsSink.channel = memCh
避坑指南: Flume 的 Memory Channel 在 Agent 宕机时会丢失数据,生产环境建议使用 File Channel 或 Kafka Channel 保证持久性。
3.3 数据接入策略:批量、微批量与实时流
接入策略的选择取决于业务对数据新鲜度的要求与系统负载能力。下图展示了三种策略的架构对比:
3.4 接入策略选型矩阵
在实际项目中,通常需要根据数据源类型、延迟要求与运维成本综合决策:
| 业务场景 | 推荐策略 | 推荐工具链 | 数据源类型 |
|---|---|---|---|
| 财务对账 / 离线报表 | 批量(T+1) | Sqoop → Hive / HDFS | 结构化 |
| 用户行为日志采集 | 实时流 | Flume → Kafka → HDFS | 半结构化 |
| IoT 传感器数据 | 微批量 | Kafka → Spark Streaming → HBase | 半结构化 / 非结构化 |
| 图片 / 视频元数据提取 | 批量 + 事件触发 | 对象存储 → Kafka → 处理管道 | 非结构化 |
核心原则: 数据接入不是一次性工作。建议在接入层统一添加 Schema Registry(如 Confluent Schema Registry)和 数据质量探针(空值率、唯一性、时间戳乱序检测),将质量左移到采集阶段,避免“垃圾进、垃圾出”。