跳转到内容

Apache Hadoop与流计算

来自代码酷

Hadoop与流计算[编辑 | 编辑源代码]

Hadoop与流计算(Hadoop and Stream Processing)是指利用Hadoop生态系统处理实时数据流的技术。传统Hadoop(如MapReduce)主要用于批处理,而流计算则专注于连续到达的数据,适用于需要低延迟分析的场景(如金融交易监控、物联网传感器数据处理)。

核心概念[编辑 | 编辑源代码]

流计算与批处理的区别[编辑 | 编辑源代码]

特性 批处理 流计算
数据处理方式 处理完整数据集 处理连续数据流
延迟 高(分钟至小时) 低(毫秒至秒)
典型框架 MapReduce Apache Storm/Flink/Spark Streaming

Hadoop生态中的流计算框架[编辑 | 编辑源代码]

  • Apache Storm:纯流处理框架,支持毫秒级延迟。
  • Apache Flink:统一批流处理,支持状态管理和精确一次语义。
  • Spark Streaming:微批处理(将流数据切分为小批次)。

技术实现[编辑 | 编辑源代码]

示例:Spark Streaming词频统计[编辑 | 编辑源代码]

以下代码演示如何使用Spark Streaming处理TCP socket输入的文本流:

from pyspark import SparkContext
from pyspark.streaming import StreamingContext

# 初始化StreamingContext(每2秒一个批次)
sc = SparkContext("local[2]", "NetworkWordCount")
ssc = StreamingContext(sc, 2)

# 监听本地9999端口
lines = ssc.socketTextStream("localhost", 9999)

# 按空格分割单词并计数
words = lines.flatMap(lambda line: line.split(" "))
pairs = words.map(lambda word: (word, 1))
word_counts = pairs.reduceByKey(lambda x, y: x + y)

# 打印结果
word_counts.pprint()

ssc.start()             # 启动计算
ssc.awaitTermination()  # 等待终止

输入示例(通过Netcat发送):

hello world
hello hadoop

输出示例

-------------------------------------------
Time: 2023-07-20 08:00:02
-------------------------------------------
('hello', 2)
('world', 1)
('hadoop', 1)

架构设计[编辑 | 编辑源代码]

flowchart LR A[数据源\n如Kafka/Sensor] --> B[流处理引擎\nStorm/Flink] B --> C{输出方向} C --> D[实时仪表盘] C --> E[HDFS存储] C --> F[数据库]

关键组件说明: 1. 数据源:持续生成数据的系统(如Kafka、IoT设备) 2. 处理引擎:执行窗口聚合、过滤等操作 3. 输出:可同时支持实时响应和持久化存储

实际应用案例[编辑 | 编辑源代码]

案例1:电商实时推荐[编辑 | 编辑源代码]

  • 场景:用户浏览商品时实时推荐相似商品
  • 技术栈
 * 数据源:用户点击流(Kafka)
 * 处理:Flink计算物品共现频率
 * 输出:Redis存储实时推荐结果

案例2:网络攻击检测[编辑 | 编辑源代码]

  • 场景:识别DDoS攻击流量模式
  • 技术实现
 * 使用Storm分析网络包速率
 * 滑动窗口(5秒)统计IP请求次数
 * 超过阈值时触发告警

性能优化[编辑 | 编辑源代码]

  • 窗口策略
 * 滑动窗口(Sliding Window):重叠的时间区间
 * 滚动窗口(Tumbling Window):不重叠的固定区间
  • 公式:计算窗口内平均值

x¯=1ni=twtxi 其中w为窗口大小,t为当前时间戳

挑战与解决方案[编辑 | 编辑源代码]

挑战 解决方案
数据乱序 使用事件时间戳+水位线(Watermark)
状态管理 定期检查点(Checkpoint)
资源波动 动态扩缩容(如YARN资源调度)

扩展阅读[编辑 | 编辑源代码]

  • 状态管理:Keyed State/Operator State
  • 时间语义:Event Time/Processing Time
  • 容错机制:Exactly-Once/At-Least-Once