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 数据接入策略:批量、微批量与实时流

接入策略的选择取决于业务对数据新鲜度的要求与系统负载能力。下图展示了三种策略的架构对比:

数据接入策略对比架构图 数据接入策略对比 批量接入(Batch) 定时调度(T+1 / 每小时) Sqoop / 定时 Spark Job 微批量(Micro-Batch) 分钟级窗口(1~5 min) Spark Streaming / Flink 实时流(Real-Time) 毫秒级延迟 Kafka + Flink / Storm 延迟:高 吞吐:最高 一致性:强 延迟:中 吞吐:高 一致性:最终 延迟:低 吞吐:中 一致性:最终 选型建议 • 离线报表 / 历史回溯 → 批量接入(Sqoop) • 近实时监控 / 秒级预警 → 微批量(Spark Streaming) • 事件驱动 / 毫秒级响应 → 实时流(Kafka + Flink)

3.4 接入策略选型矩阵

在实际项目中,通常需要根据数据源类型、延迟要求与运维成本综合决策:

业务场景 推荐策略 推荐工具链 数据源类型
财务对账 / 离线报表 批量(T+1) Sqoop → Hive / HDFS 结构化
用户行为日志采集 实时流 Flume → Kafka → HDFS 半结构化
IoT 传感器数据 微批量 Kafka → Spark Streaming → HBase 半结构化 / 非结构化
图片 / 视频元数据提取 批量 + 事件触发 对象存储 → Kafka → 处理管道 非结构化
核心原则: 数据接入不是一次性工作。建议在接入层统一添加 Schema Registry(如 Confluent Schema Registry)和 数据质量探针(空值率、唯一性、时间戳乱序检测),将质量左移到采集阶段,避免“垃圾进、垃圾出”。