Hadoop的起源:

Hadoop是Google的集群系统的开源实现

  • Google集群系统:GFS(Google File System)、 MapReduce、BigTable
  • Hadoop主要由HDFS(Hadoop Distributed File System Hadoop分布式文件系统)、MapReduce和HBase组成
Hadoop的初衷是为了解决Nutch的海量数据爬取和储存的需要
Hadoop与2005年秋天作为Lucene的子项目Nutch的一部分正式引入Apache基金会
Hadoop官方网站

Hadoop 两大核心
  • MapReduce
    -Map: 任务的分解
    -Reduce:结果的汇总
  • HDFS
    -Name
    -DataNode
    -Client
什么是HDFS?
HDFS(Hadoop Distributed File System) Hadoop分布式文件系统,是储存数据使用的。HDFS为了做到可靠性(reliability)创建了多份数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点中(computer nodes),MapReduce就可以在它们所在的节点上处理这些数据了。
大数据与传统数据的区别是什么?

并行关系数据库与 MPP or Hadoop 区别?
并行关系数据库
  • 多个独立关系数据库服务器,访问共享的资源储存池
  • 优势:
    采用多个关系数据库服务器,多个储存,与原有的架构相比,扩展了储存容量和计算能力
  • 劣势:
    计算与储存分离,数据访问存在竞争和带宽瓶颈
    支持的关系数据库服务器数量有限
    只能向上扩展,不能横向扩展
  • 适合复杂的需要事务处理的应用
MPP or Hadoop
  • 由大量独立的服务器通过网络互连形成集群,每个服务器带储存
  • 优势:
    计算与储存融合,支持横向扩展,更好的扩展性
  • 劣势:
    解决数据冲突时需要节点间协作
  • 适用范围:
    数据仓库和离线数据分析(MPP,Hadoop/HBase)
    大规模在线实时应用(单行事务处理能力满足的场景)(HBase)
Hadoop的子项目(红色表示hadoop家族)
  • Core: 一套分布式文件系统以及支持Map-Reduce的计算框架
  • Avro: 定义了一种用于支持大数据应用的数据格式,并为这种格式提供了不同的编程语言的支持
  • HDFS: Hadoop分布式文件系统
  • Map/Reduce: 是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集
  • Zookeeper: 是高可用的和可靠的分布式协同系统
  • Pig: 建立于Hadoop Core之上为并行计算环境提供了一套数据工作流语言和执行框架
  • Hive: 是为提供简单的数据操作而设计的下一代分布式数据仓库。它提供了简单的类似SQL的语法的HiveQL语言进行数据查询
  • HBase: 建立于Hadoop Core之上提供一个可扩展的数据库系统
  • Flume: 一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据
  • Mashout: 是一套具有可扩展能力的机器学习类库
  • Sqoop: 是Apache下用于RDBMS和HDFS相互导数据的工具
HDFS结构
元数据:文件大小,文件名称等


HDFS架构
HDFS有三个节点:NameNode、SecondaryNameNode、DataNode

HDFS运行机制
  • 一个Name Node(名字节点) 和 多个 Data Node(数据节点)
  • 数据复制(冗余机制)
    --存放的位置(机架感知策略)
  • 故障检测
    --数据节点
    心跳包(监测是否宕机)
    块报告(安全模式下检测)
    数据完整性检测(校验和比较)
    --名字节点(日志文件,镜像文件)
  • 空间回收机制
HDFS优点
  • 高容错性
    数据自动保存多个副本
    副本丢失后,自动恢复
  • 适合批处理
    移动计算而非数据
    数据位置暴露给计算框架
  • 适合大数据处理
    GB、TB、甚至PB级数据
    百万规模以上的文件数量
    10K+节点
  • 可构建在廉价机器上
    通过多副本提高可靠性
    提供了容错和恢复机制
HDFS缺点
  • 低延迟数据访问
    比如毫秒级
    低延迟与高吞吐率
  • 小文件存取
    占用NameNode大量内存
    寻道时间超过读取时间
  • 并发写入、文件随机修改
    一个文件只能有一个写者
    仅支持append
HDFS数据储存单元(block)
  • 文件被切分成固定大小的数据块
    默认数据块大小为64M,可配置
    若文件大小不到64M,则单独存成一个block
  • 一个文件储存方式
    按大小被切分成若干个block,存储到不同节点上
    默认情况下每个block都有三个副本
  • Block大小和副本数通过client端上传文件时设置,文件上传成功后副本数可以变更,block size不可变更
HDFS设计思想

NDFS三大节点介绍
NameNode(NN)
  • NameNode主要功能:接受客户端的读写服务
  • NameNode保存metadata信息包括
    文件owership(所有权)和permissions(权限)
    文件包含哪些块(block)
    block位置保存在哪个DataNode(由DataNode启动时上报)
  • NameNode的metadata信息在启动后会加载到内存
    meatadata储存到磁盘文件名为“fsimage”
    block的位置信息不会保存到fsimage
    edits记录对metadata的操作日志
SecondaryNameNode(SNN)
  • 它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并editslog,减少NN启动时间
  • SNN执行合并时机
    根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
    根据配置文件设置edits log大小 fs.checkpoint.size规定edits文件的最大值默认是64M
SNN合并流程

DataNode (DN)
  • 储存数据(Block)
  • 启动DN线程的时候会向NN汇报block信息
  • 通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟收到DN的心跳,则认为其已经lost,并copy其上的block到其他DN
Block的副本放置策略
  • 第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
  • 第二个副本:放置在于第一个副本不同的机架节点
  • 第三个副本:与第二个副本相同机架的节点
  • 更多副本:随机节点

HDFS读流程

HDFS写流程

HDFS文件权限
  • 与Linux文件权限类似
    r:read;w:write;x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
  • 如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsan
  • HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS对owner不做密码验证,只要知道用户名就可以。
安全模式
  • NameNode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作
  • 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
  • 此刻NameNode运行在安全模式。即NameNode的文件系统对于客户端来说是只读的。(显示目录,显示文件内容等。写,删除,重命名都会失败)。
  • 在此阶段NameNode收集各个DataNode的报告,当数据块达到最小副本数以上时,会被认为是安全的,在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束。
  • 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由NameNode维护的,而是以块列表形式储存在DataNode中。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐