跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Apache Hadoop与流计算
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Hadoop与流计算 = '''Hadoop与流计算'''(Hadoop and Stream Processing)是指利用Hadoop生态系统处理实时数据流的技术。传统Hadoop(如MapReduce)主要用于批处理,而流计算则专注于连续到达的数据,适用于需要低延迟分析的场景(如金融交易监控、物联网传感器数据处理)。 == 核心概念 == === 流计算与批处理的区别 === {| class="wikitable" |- ! 特性 !! 批处理 !! 流计算 |- | 数据处理方式 || 处理完整数据集 || 处理连续数据流 |- | 延迟 || 高(分钟至小时) || 低(毫秒至秒) |- | 典型框架 || MapReduce || Apache Storm/Flink/Spark Streaming |} === Hadoop生态中的流计算框架 === * '''Apache Storm''':纯流处理框架,支持毫秒级延迟。 * '''Apache Flink''':统一批流处理,支持状态管理和精确一次语义。 * '''Spark Streaming''':微批处理(将流数据切分为小批次)。 == 技术实现 == === 示例:Spark Streaming词频统计 === 以下代码演示如何使用Spark Streaming处理TCP socket输入的文本流: <syntaxhighlight lang="python"> 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() # 等待终止 </syntaxhighlight> '''输入示例'''(通过Netcat发送): <pre> hello world hello hadoop </pre> '''输出示例''': <pre> ------------------------------------------- Time: 2023-07-20 08:00:02 ------------------------------------------- ('hello', 2) ('world', 1) ('hadoop', 1) </pre> == 架构设计 == <mermaid> flowchart LR A[数据源\n如Kafka/Sensor] --> B[流处理引擎\nStorm/Flink] B --> C{输出方向} C --> D[实时仪表盘] C --> E[HDFS存储] C --> F[数据库] </mermaid> 关键组件说明: 1. '''数据源''':持续生成数据的系统(如Kafka、IoT设备) 2. '''处理引擎''':执行窗口聚合、过滤等操作 3. '''输出''':可同时支持实时响应和持久化存储 == 实际应用案例 == === 案例1:电商实时推荐 === * '''场景''':用户浏览商品时实时推荐相似商品 * '''技术栈''': * 数据源:用户点击流(Kafka) * 处理:Flink计算物品共现频率 * 输出:Redis存储实时推荐结果 === 案例2:网络攻击检测 === * '''场景''':识别DDoS攻击流量模式 * '''技术实现''': * 使用Storm分析网络包速率 * 滑动窗口(5秒)统计IP请求次数 * 超过阈值时触发告警 == 性能优化 == * '''窗口策略''': * 滑动窗口(Sliding Window):重叠的时间区间 * 滚动窗口(Tumbling Window):不重叠的固定区间 * 公式:计算窗口内平均值 <math> \bar{x} = \frac{1}{n}\sum_{i=t-w}^{t}x_i </math> 其中<math>w</math>为窗口大小,<math>t</math>为当前时间戳 == 挑战与解决方案 == {| class="wikitable" |- ! 挑战 !! 解决方案 |- | 数据乱序 || 使用事件时间戳+水位线(Watermark) |- | 状态管理 || 定期检查点(Checkpoint) |- | 资源波动 || 动态扩缩容(如YARN资源调度) |} == 扩展阅读 == * 状态管理:Keyed State/Operator State * 时间语义:Event Time/Processing Time * 容错机制:Exactly-Once/At-Least-Once [[Category:大数据框架]] [[Category:Apache Hadoop]] [[Category:Apache Hadoop前沿技术]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)