MapReduce(一)
MapReduce简介
什么是MapReduce?
-
是一种大规模数据处理的编程模型
-
源自于2004年Google发布的论文
-
MapReduce in Hadoop
- 开源社区实现版本,核心代码使用Java实现
- 开源社区实现版本,核心代码使用Java实现
MapReduce计算场景
- 数据查找
- 分布式Grep
- Web访问日志分析
- 词频统计
- 网站PV UV统计
- TOP K问题
- 倒排索引
- 建立搜索引擎索引
- 分布式排序
MapReduce优缺点
- 优点
- 模型简单
- Map + Reduce
- 高伸缩性
- 支持横向扩展
- 灵活
- 结构化和非结构化数据
- 速度快
- 高吞吐离线处理数据
- 并行处理
- 编程模型天然支持并行处理
- 容错能力强
- 模型简单
- 缺点
- 流式数据-MapReduce处理模型就决定了需要静态数据
- 实时计算-不适合低延迟数据处理,需要毫秒级别响应
- 复杂算法-例如SVM支持向量机
- 迭代运算-例如斐波那契数列
系统架构
数据流
Flume配置
# 配置Agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 配置Source
a1.sources.r1.type = exec
a1.sources.r1.channels = c1
a1.sources.r1.deserializer.outputCharset = UTF-8
# 配置需要监控的日志输出目录
a1.sources.r1.command = tail -F
/data/log/nginx/nginx_access.log
# 配置Channel
a1.channels.c1.type = memory
# channel中的最大event数目
a1.channels.c1.capacity = 1000
# channel中允许事务的最大event数目
a1.channels.c1.transactionCapacity = 100
# 配置Sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.useLocalTimeStamp = true
# hdfs的上传路径
a1.sinks.k1.