HADOOP的概述

  1. HDFS的概述

HDFS是Hadoop分布式文件系统,用来分布式存储海量数据,并具有高可靠 高性能 可伸缩的能力。
hdfs屏蔽了分布式存储的细节,提供了标准的访问方式,能够以类似访问本地文件系统的方式访问hdfs中的文件。
可以通过shell 或 javaapi方式操作hdfs中的数据。

  • HDFS技术细节
    分布式存储系统
    HDFS的主要原理,是将数据进行切块后进行复制并分布式存储在集群的多个节点中,从而实现了海量数据分布式存储,并通过副本实现了可靠性保证。
    其中切出的块称为Block。
    负责存放Block的节点称之为DataNode节点。
    负责存放元数据的节点称之为NameNode节点。
    另外还有一个独立进程称作SecondaryNameNode负责帮助NameNode进行元数据的合并操作
    Block 块—文件切块
  • 知识点
    1.文件块的切分规则 2.存储规则(往datanode存储)3.128M不是文件块的固定大小,只是最大值
    HDFS中存储的基本单位。
    当文件被存储到hdfs的过程中,会先将文件按照指定大小来切块即block,复制出指定数量的副本(默认是3个),分布式存储在集群中(存储在不同的datanode里)
    Hadoop 1.0的时候默认大小Block是64MB
    Block 默认的大小为128MB

如果切分过后,剩余数据不够128MB,则会将剩余数据单独作为一个Block存储(剩多少块的大小就是到少),数据多大,Block就多大,Block块的数量就越多,
注意:128MB只是最大大小,不是固定大小。

例如,一个256MB文件,共有256/128=2个Block.
一个258MB文件,共有258/128 = 2 余下2MB,则余下的2MB会独占一个Block大小为2MB,则且分出 两个128MB的Block和一个2MB的Block
一个1MB文件,则单独占用一个Block,这个Block为1MB大小。
将文件切块有如下几个目的:
1.一个大文件切分为小的若干个Block方便分布式的存储在不同磁盘中
2.屏蔽了数据的区别,只需要面向Block操作,从而简化存储系统。
3.有利于数据的复制。每次复制的是一个体积较小的Block,而不是一个大型文件,效率更高。

  • NameNode
    存储元数据信息(不是文件数据)
    客户获取文件块信息首先通过nn去找对应的dn
    NameNode维护着HDFS中的元数据信息(不是文件数据),包括文件信息 目录结构信息 副本数量信息 文件和Block之间关系的信息、Block和DataNode之间的关系信息,数据格式参照如下:
    FileName replicas block-Ids id2host
    存储规则:例如: /test/a.log,3,{b1,b2},[{b1:[h0,h1,h3]},{b2:[h0,h2,h4]}]
    NameNode中的元数据信息存储在内存/文件中,内存中为实时信息,文件中为数据镜像作为持久化存储使用。
    其中内存中的信息包括 文件信息 目录结构信息 副本数量信息 文件和Block之间关系的信息、Block和DataNode之间的关系信息
    而文件中的信息包括文件信息 目录结构信息 副本数量信息 文件和Block之间关系的信息
    可以发现文件中的元数据比起内存中缺失了 blockid和datanode之间的对应关系,这是因为,hdfs集群经常发生变动,datanode变多或变少都是很正常的,因此这些信息都是临时在内存中组织的,而不会存储在磁盘镜像文件中
    文件包括:(磁盘文件信息)
    fsimage 元数据镜像文件(磁盘文件)。存储某NameNode元数据信息,并不是实时同步内存中的数据。
    edits 操作日志文件
    fstime 保存最近一次checkpoit的时间
    触发文件文件合并的前提条件:
    1.当fstime时间达到3600s触发问价合并
    2.当日志文件(edits)达到64MB时触发文件合并
    热备份:snn不是nn的热备(实时备份)
    在这里插入图片描述
    snn具备一定的数据的备份能力----但是数据的完整性不能保证
    能不能将snn和nn放到一台机器上(是可以的)但是工作环境不建议,为了性能的提升

当有写请求时,NameNode会首先写editlog到磁盘edits文件中,成功后才会修改内存,并向客户端返回
所以,fsimage中的数据并不是实时的数据,而是在达到条件时要和edits文件合并,合并过程需要SNN参与

**之所以不直接改fsimage而是要在edits中记录日志,是因为记录日志是一种连续读写操作,比直接改fsimage的随机读写操作效率要高的多。

  • DataNode
    数据以Block的形式存放在DataNode中
    DataNode节点会不断向NameNode节点发送心跳报告保持与其联系
    在心跳报告中,向NameNode报告信息,从心跳响应中接受NameNode的指令,执行对块的复制 移动 删除等操作。
    NameNode如果10分钟都没收到dn的心跳,则认为该DataNode已经lost,并copy其上的block到其他dn

SecondaryNameNode
SecondaryNameNode并不是NameNode的热备份,而是协助者帮助NameNode进行元数据的合并,
从另外的角度来看可以提供一定的备份功能,但并不是热备,只在极端情况下可能用来恢复元数据,但是可能丢失数据。

何时出发数据合并?:
1.当fstime的时间达到3600秒时触发这个操作
2.当edits日志文件大小达到64M时触发这个操作
合并过程(参看文档图):
在这里插入图片描述

  • Block副本放置策略:(面试题
    第一个副本:放置在上传文件的DN,如果是集群就外提交,就随机选择一台磁盘不太满,cpu不太忙的节点
    第二个副本:放置在第一个副本不同机架的节点上
    第三个副本:放置在与第二个副本相同机架的节点上
    更多副本:随机节点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop是一个开源的分布式计算框架,它允许用户在大量的计算机集群上存储和处理大量数据。Hadoop的核心组件包括HDFS(Hadoop Distributed FileSystem)和MapReduce。HDFS是Hadoop的分布式文件系统,它将数据存储在大量的磁盘上,而不是单个计算机上。MapReduce是一种编程模型,用于处理和生成大数据集。 Hadoop的基本框架包括以下几个部分: 1. HDFS:Hadoop分布式文件系统,负责存储和管理大量数据。 2. MapReduce:一种编程模型,用于处理和生成大数据集。 3. YARN:Yet Another Resource Negotiator,负责资源管理和任务调度。 4. Hadoop Common:Hadoop的共享库,包含一些通用的工具和库。 5. Hadoop Auth:Hadoop的身份验证服务,负责用户认证和授权。 6. Hadoop HDFS Java API:Hadoop HDFS的Java接口,用于编写Java程序操作HDFS。 Hadoop的环境搭建主要包括以下步骤: 1. 安装Java环境:Hadoop是基于Java开发的,所以首先需要安装Java环境。 2. 下载并解压Hadoop:从Hadoop官网下载最新版本的Hadoop,然后解压到本地目录。 3. 配置Hadoop环境:编辑Hadoop的配置文件,设置Hadoop的环境变量。 4. 初始化HDFS:使用Hadoop的启动脚本初始化HDFS。 5. 启动Hadoop:启动Hadoop的各个组件,如HDFS、YARN等。 6. 测试Hadoop:运行一个简单的MapReduce任务,检查Hadoop是否正常运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值