https://www.cnblogs.com/zhoujingyu/p/5040957.html

https://blog.csdn.net/firstchange/article/details/78567456

HDFS数据存储元(block)

  - 文件被切分成固定大小的数据块

    • 默认数据块大小为64MB(Hadoop1.x),128MB(Hadoop2.x)可以配置
    • 若文件大小不到64MB,则单独存成一个block,大小是多少,占磁盘多少。

  - 一个文件存储方式

    • 按大小被切分成若干个block,存储到不同节点上
    • 默认情况下每个block都有三个副本

  - Block大小和副本数通过Clien端上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更

HDFS设计思想:

NameNode(NN):
  - NameNode主要功能:接受客户端的读写服务

  - NameNode保存metadata信息,包括:

    • 整个文件系统的目录信息
    • 文件owership(所有者)和permissions(权限)
    • 文件包含哪些block
    • 文件包含的Block保存在哪个DataNode(由DataNode启动时上报)

  - NameNode的metadata信息在启动后会加载到内存:

    • metadata存储到磁盘文件名为“fsimage” (持久化,文件的权限信息,包含哪些block块)
    • Block的位置信息不会保存到“fsimage”
    • edits记录对metadata的操作日志

    

SecondaryNameNode(SNN):

  - 它不是NameNode的备份(但可以做备份),它的主要工作是帮助NameNode合并edits log,减少NameNode启动时间

  - SecondaryNameNode执行合并时机:

    • 根据配置文件设置的时间间隔fs.checkpoint.period默认3600秒
    • 根据配置文件设置edits log大小fs.checkpoint.size规定edits文件的最大值,默认是64MB

SecondaryNameNode合并流程:

DataNode(DN):

  - 存储数据(block)

  - 启动DataNode线程的时候会向NameNode汇报block信息(block位置信息),保存到NameNode的metadata(fsimage文件)中

  - 通过向NameNode发送心跳保持与其联系(3秒一次),如果NameNode10分钟没有收到DataNode的心跳,则认为其已经lost,并copy其上的block到其他DataNode,以保证每个文件的每个Block至少保存有3个副本

Block的副本放置策略:

HDFS写流程

HDFS读流程

HDFS文件权限:

  - 与Linux文件权限类似

    • r:read;w:write;x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容

  - 如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是张三

  - HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁

安全模式:

  - namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作

  - 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志

  - 此刻namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的(显示目录,显示文件内容等。写、删除、重命名都会失败)。

  - 在此阶段Namenode手机各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的,在一定比例(可以设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束

  - 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。

HDFS安装:

  完全分布式安装

      • 下载
      • 解压
      • 检查java和ssh的免密码登录
      • 修改core-site.xml
      • 修改hdfs-site.xml
      • 修改masters文件和slaves文件
      • 格式化namenode
      • start-hdfs.sh启动

02HDFS架构的更多相关文章

  1. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  2. node服务的监控预警系统架构

    需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...

  3. 如何一步一步用DDD设计一个电商网站(二)—— 项目架构

    阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...

  4. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

  5. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  6. DDD CQRS架构和传统架构的优缺点比较

    明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...

  7. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  8. 谈一下关于CQRS架构如何实现高性能

    CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理.所以也想谈一下,CQRS架构 ...

  9. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

随机推荐

  1. DevExpress v18.1新版亮点——XAF篇(一)

    用户界面套包DevExpress v18.1日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress eXpressApp Framework(XAF) v18.1 ...

  2. DevExpress v18.1新版亮点——Reporting篇(二)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Reporting v18.1 的新功能,快来下载试用新版本 ...

  3. elk之logstash

    环境: centos7 jdk8 1.创建Logstash源 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch touch ...

  4. mvc4使用KindEditor文本编辑器

    最近做项目要用文本编辑器,编辑器好多种,这里介绍KindEditor在asp.net mvc4中的使用方法. 一.准备工作: 1.下载KindEditor.去官网:http://www.kindsof ...

  5. 框架:MVC

    MVC 一.介绍 MVC是模型-视图-控制器的缩写,一种软件思想,强制性的把应用程序的输入.处理和输出分开.可以和任何的重定向能解耦. 三部分的任务说明: 视图:获取数据,显示数据 模型:处理数据 控 ...

  6. select标签的相关操作,选中,获取option的值,二级联动

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. MYSQL MyISAM与InnoDB对比

    1. 区别: (1)事务处理: MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理): (2)锁机制不同: MyISAM是表级锁,而InnoDB是行级锁: (3)sel ...

  8. python 爬虫时间数据-时间格式转换

    1 import time,datetime 2 3 time_original = '17/Sep/2012:11:40:00' 4 time_format = datetime.datetime. ...

  9. 莫烦tensorflow(4)-placeholder

    import tensorflow as tf input1 = tf.placeholder(tf.float32)input2 = tf.placeholder(tf.float32) outpu ...

  10. laravel 添加验证码

    1.  安装依赖  composer require gregwar/captcha 2.使用 use Gregwar\Captcha\CaptchaBuilder; use DB; use Requ ...