Hadoop
离线计算: 数据量大, 对计算的实时性要求不高, 计算时长短则若干小时, 多则若干天 离线计算框架: hadoop
实时计算: 数据量小, 对计算的实时性要求高, 计算时长短则若干百ms, 多则若干分钟 实时计算框架: storm sparkstreaming flink
Hadoop用途:
- 大型数据仓库 2. 搜索引擎 3.日志分析 4.数据挖掘(相比分析更深度处理) 5.商业智能(business intelligence封装好的分析数据的业务系统)
Hadoop三大核心组件:
Hadoop Distributed File System (HDFS): A distributed file system that provides high-throughput access to application data.(分布式文件系统)
- 源自于Google的GFS论文, 论文发表于2003年10月
- HDFS是GFS的开源实现
- HDFS的特点:扩展性&容错性&海量数量存储
- 将文件切分成指定大小的数据块, 并在多台机器上保存多个副本
- 数据切分、多副本、容错等操作对用户是透明的,数据切分: 将一个文件均匀分为若干个block, 单个block大小为128M,副本拷贝: 一个block拷贝三个副本
Hadoop MapReduce: A YARN-based system for parallel processing of large data sets. 离线计算 splitting-> maping-> shuffling reducing实际应用只需要操作map 和 reduce
- 分布式计算框架
- 源于Google的MapReduce论文,论文发表于2004年12月
- MapReduce是GoogleMapReduce的开源实现
- MapReduce特点:扩展性&容错性&海量数据离线处理
Hadoop YARN: A framework for job scheduling and cluster resource management.(资源调度系统)
- YARN: Yet Another Resource Negotiator
- 负责整个集群资源的管理和调度
- YARN特点:扩展性&容错性&多框架资源统一调度
HDFS架构
- 1个NameNode/NN(Master) 带 DataNode/DN(Slaves) (Master-Slave结构)
- 1个文件会被拆分成多个Block
- NameNode(NN)
- 负责客户端请求的响应
- 负责元数据(文件的名称、副本系数、Block存放的DN)的管理
- 元数据 MetaData 描述数据的数据 可以理解为mysql中的字段
- 监控DataNode健康状况 10分钟没有收到DataNode报告认为Datanode死掉了
- DataNode(DN)
- 存储用户的文件对应的数据块(Block)
- 要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况
- 分布式集群NameNode和DataNode部署在不同机器上
SecondaryNameNode FsImage存放元数据 增删改操作记在edits日志上 SecondaryNameNode 每隔一段时间将flimage和edits合并元数据
HDFS优缺点
- 优点
- 数据冗余 硬件容错
- 适合存储大文件 不管小文件还是大文件的元数据应该差不多大, 所以大文件更有性价比 而很多小文件打包压缩包xxx.har, 共用一个元数据
- 处理流式数据
- 可构建在廉价机器上
- 缺点
- 低延迟的数据访问 取存数据访问时间长
- 小文件存储
资源调度框架 YARN
master slave结构
master : resourse manager 整个集群中提供服务的只有一个, 用户接收客户端请求, 监控NM
slave : node manager 集群中有多个, 负责本节点资源的管理和使用, 接收RM的指令并运行指令, 启动container, 处理AM的命令
Application master :AM ,用于行RM申请资源(core, memory),???
Container: 虚拟容器, 封装了cpu 内存的资源的容器
Client: 提交作业, 运行作业, 杀死作业
启动yarn 8088端口 客服端可访问
分布式处理框架 MapReduce
源于google的MapReduce论文
优点: 易开发, 海量数据离线处理
缺点: 不能做实时流式运算
- MapReduce分而治之的思想
- 数钱实例:一堆钞票,各种面值分别是多少
- 单点策略
- 一个人数所有的钞票,数出各种面值有多少张
- 分治策略
- 每个人分得一堆钞票,数出各种面值有多少张
- 汇总,每个人负责统计一种面值
- 解决数据可以切割进行计算的应用
- MapReduce编程分Map和Reduce阶段
- 将作业拆分成Map阶段和Reduce阶段
- Map阶段 Map Tasks 分:把复杂的问题分解为若干”简单的任务”
- Reduce阶段: Reduce Tasks 合:reduce
- MapReduce编程执行步骤
- 准备MapReduce的输入数据
- split 拆分 系统完成
- 准备Mapper数据
- Shuffle 洗牌 系统完成
- Reduce处理
- 结果输出
- 编程模型
- 借鉴函数式编程方式
-
用户只需要实现两个函数接口:
-
Map(in_key,in_value)
—>(out_key,intermediate_value) list
-
Reduce(out_key,intermediate_value) list
—>out_value list
Hadoop优势
moving computation is cheaper than moving data: 在大数据领域,代码几乎总是小于数据。如果应用程序在其操作的数据附近执行,则计算所请求的计算效率更高。当数据集的大小很大时尤其如此。这可以最大限度地减少网络拥塞并提高系统的整体吞吐量。假设通常更好的是将计算迁移到更靠近数据所在的位置,而不是将数据移动到运行应用程序的位置。Hadoop为应用程序提供了接口,使其自身更靠近数据所在的位置。
- 高可靠
- 数据存储: 数据块多副本
- 数据计算: 某个节点崩溃, 会自动重新调度作业计算
- 高扩展性
- 存储/计算资源不够时,可以横向的线性扩展机器
- 一个集群中可以包含数以千计的节点
- 集群可以使用廉价机器,成本低
- Hadoop生态系统成熟