Hadoop原理汇总(一)——HDFS

摘要:本文主要对hadoop的原理性知识进行汇总,包括核心组件、HDFS存储原理、HDFS shell命令、HDFS Java端API、MapReduce基本原理、shuffle基本原理、sort过程等。


1 Hadoop核心组件

  1. 生态系统图
    这里写图片描述

  2. HDFS文件系统
    它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
    这里写图片描述
    ● Client:切分文件;与NameNode交互,获取文件位置信息;与DataNode交互,读取和写入数据。
    ● NameNode:管理HDFS的文件命名空间,处理客户端请求。
    ● DataNode:存储实际的数据,汇报存储信息给NameNode。
    ● Secondary NameNode:定期合并NameNode的fsImage(文件镜像)和fsEdits(操作日志),推送给NameNode;可辅助恢复NameNode。

  3. MapReduce分布式计算框架
    Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同 “键”的所有“值”进行规约,以得到最终结果。
    这里写图片描述
    JobTracker:管理所有作业,将任务分解成一系列任务,并分派给TaskTracker。
    TaskTracker:运行Map Task和Reduce Task;并与JobTracker交互,汇报任务状态。
    Map Task:解析每条数据记录,传递给用户编写的map(),将输出结果写入本地磁盘。
    Reducer Task:从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行。
    这里写图片描述

  4. Hive数据仓库
    Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析
    这里写图片描述

  5. HBase数据库
    HBase 是一个面向列的动态模式数据库,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
    数据模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value
    这里写图片描述

  6. zookeeper分布式协作服务
    解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等

  7. sqoop数据同步工具
    Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。
    数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。

  8. pig数据流系统
    设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具
    定义了一种数据流语言—Pig Latin,将脚本转换为MapReduce任务在Hadoop上执行。
    通常用于进行离线分析

  9. Mahout数据挖掘算法库
    Mahout 的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推 荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、 MongoDB 或Cassandra)集成等数据挖掘支持架构。

  10. Flume日志收集工具
    将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流。在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、 格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。

2 HDFS存储原理

2.1 HDFS整体结构

这里写图片描述

(1)NameNode
  管理数据节点和文件块的映射关系;处理客户端对数据的读写请求。
  NameNode保存了两个核心的数据结构FsImage和EditLog。FsImage用于维护文件系统树以及元数据;EditLog记录了文件的操作。NameNode不持久化Block与DataNode的映射信息,而是在系统每次启动时扫描所有DataNode来重构这些信息。

(2)DataNode
  负责数据的存储和读取;向NameNode定期发送自己的存储块信息;周期性地向NameNode发送心跳信息报告自己的状态。
  HDFS集群中只有一个NameNode,负责所有元数据的管理;有若干DataNode,每个DataNode运行在一个独立节点上。

(3)SecondaryNameNode
  对NameNode进行备份。周期性地从NameNode下载EditLog与FsImage,将EditLog与FsImage合并得到FsImage.ckpt,将合并后的FsImage.ckpt上传到NameNode,更新NameNode的EditLog与FsImage。

(4)读写过程
  客户端向HDFS写文件时

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值