HDFS详细介绍


分布式文件系统设计思路

  • 概述

    只有一台机器时的文件查找:hello.txt /export/servers/hello.txt

    如果有多台机器时的文件查找:hello.txt node02 /export/servers/hello.txt

  为了解决数据丢失的问题,引入副本机制,保证数据不会丢失

  如果对文件进行切块存储,那么元数据信息又要继续变化

  blk元数据信息的记录

   blk_00001 node01 node03 /export/servers/blk_00001

   blk_00002 node02 node01 /export/servers/blk_00002

   blk_00003 node03 node02 /export/servers/blk_00003

  • 概念简图


文件系统基本介绍

  • 概览

  • 重点了解

    Local:本地文件系统

    HDFS:分布式文件系统(最重要)

    HSFTP:FTP文件系统 ftp:// 可以做文件的上传下载

    WebHDFS:浏览器操作文件系统,可以允许我们通过浏览器上传、下载、修改HDFS上面的文件

HDFS文件系统的设计目标

  • 概述

    1.硬件错误,特别是硬盘的损坏是常态(副本机制解决)

    2.数据流访问,所有的访问都是访问大量的数据,使用IO流一直操作,追求的是稳定,不是效率

    3.大数据集,假设所有存储到hdfs的数据都是海量的数据,不擅长处理小文件(因为一个小文件会占用一个元数据,元数据都存储在内存当中,大量的小文件会产生大量的元数据,导致占用NameNode大量内存)

    4.简单的相关模型,假设文件是一次写入,多次读取,不会有频繁的更新(比较擅长存储一些历史数据)

    5.移动计算比移动数据便宜

    6.多种软硬件的可移植性

HDFS基础架构图



  • NameNode和DataNode总结概述



    NameNode主要负责管理文件系统的名字空间(namespace)以及客户端对文件的访问,还有存储元数据。DataNode则主要负责处理用户的读写数据NameNode的元数据保存在两个地方,一个是内存,一个是磁盘。(磁盘存的是元数据的快照,如果快照非常大,停机再启动代价会非常大)

文件副本机制和block块存储

  • 图解

  • 概述

    数据副本的存放机制:NameNode会首先找离客户端最近(跨交换机最少的)的一台机器上传block块,然后再去做备份。

    NameNode负责数据block块的复制。(定期检测block的副本数,如果不够3个,就进行复制)

    bolck块的大小,可以根据实际工作当中的文件特性来调整,如果都是一些大文件,可以微调block块的大小。这么做的原因可以举例来说明:

    128M的bolck块:300M的文件会分成3个block块,要占用3个元数据

    256M的block块,300M的文件只会分成2个block块,只需要占用2个元数据

    这样可以有效节省NameNode的内存空间,这也是HDFS更擅长处理大文件的原因之一。

  块缓存:distributedCache 可以用来实现我们的文件的缓存。

  hdfs的权限验证:采用了与linux类似的权限验证机制,权限验证比较弱(防止好人做错事,不能阻止坏人做坏事)(HDFS相信你告诉我你是谁,你就是谁)


FSImage与edits


HDFS文件的写入过程和读取过程

  • 写入过程
Created with Raphaël 2.2.0开始第一步:客户端向NameNode请求上传一个文件第二步:NameNode反馈给客户端是否有权限上传第三步:客户端被通知拥有权限上传文件后,开始将文件切分成block块,并向NameNode询问第一个block块存储的位置第四步:通过机架感知原理,NameNode要找到离客户端最近(跨交换机最少的)的一台机器,并反馈给客户端第五步:客户端找到对应的DataNode以及对应block的id,然后开始建立RPC连接,并通过RPC连接建立一个pipeline当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器(重复以上步骤)写入完毕(数据全部上传完成后,客户端会通知NameNode)
  • block块复制机制

    第一个block块保存在本机

    第二个block块保存在同一个交换机下的另一台机器

    第三个block块保存在不同的交换机下的机器

    block块存满之后,反向的校验机制会给客户端一个相应,告诉客户端第一个block已经保存,可以上传第二个block块……「block块ack机制」

  • 读取过程

Created with Raphaël 2.2.0开始第一步:客户端发起请求,读取文件服务端校验客户端是否有权限读取文?第二步:NameNode查找元数据信息,找到这个文件对应的block块存储的位置第三步:客户端与DataNode通信建立socket通信,读取第一个block块。直到所有的block块都读取完成后,在客户端进行block块的拼接,组成一个最完整的文件读取完毕拒绝客户端请求yesno
  • 寻找block策略

    第一个找离客户端最近的block块找最近一次“心跳”的DataNode进行读取
  • 如果block块读取到一半的时候抛错了怎么办?

    客户端会重新请求NameNode找出出错block的副本,找副本重新读,没有断点续传的功能

【Hadoop离线基础总结】HDFS详细介绍的更多相关文章

  1. 【Hadoop离线基础总结】impala简单介绍及安装部署

    目录 impala的简单介绍 概述 优点 缺点 impala和Hive的关系 impala如何和CDH一起工作 impala的架构及查询计划 impala/hive/spark 对比 impala的安 ...

  2. 【Hadoop离线基础总结】Hue的简单介绍和安装部署

    目录 Hue的简单介绍 概述 核心功能 安装部署 下载Hue的压缩包并上传到linux解压 编译安装启动 启动Hue进程 hue与其他框架的集成 Hue与Hadoop集成 Hue与Hive集成 Hue ...

  3. 【Hadoop离线基础总结】oozie的安装部署与使用

    目录 简单介绍 概述 架构 安装部署 1.修改core-site.xml 2.上传oozie的安装包并解压 3.解压hadooplibs到与oozie平行的目录 4.创建libext目录,并拷贝依赖包 ...

  4. 【Hadoop离线基础总结】Hive调优手段

    Hive调优手段 最常用的调优手段 Fetch抓取 MapJoin 分区裁剪 列裁剪 控制map个数以及reduce个数 JVM重用 数据压缩 Fetch的抓取 出现原因 Hive中对某些情况的查询不 ...

  5. 【Hadoop离线基础总结】流量日志分析网站整体架构模块开发

    目录 数据仓库设计 维度建模概述 维度建模的三种模式 本项目中数据仓库的设计 ETL开发 创建ODS层数据表 导入ODS层数据 生成ODS层明细宽表 统计分析开发 流量分析 受访分析 访客visit分 ...

  6. 【Hadoop离线基础总结】Sqoop常用命令及参数

    目录 常用命令 常用公用参数 公用参数:数据库连接 公用参数:import 公用参数:export 公用参数:hive 常用命令&参数 从关系表导入--import 导出到关系表--expor ...

  7. 【Hadoop离线基础总结】HDFS入门介绍

    HDFS入门介绍 概述 HDFS全称为Hadoop Distribute File System,也就是Hadoop分布式文件系统,是Hadoop的核心组件之一. 分布式文件系统是横跨在多台计算机上的 ...

  8. 【Hadoop离线基础总结】Apache Hadoop的三种运行环境介绍及standAlone环境搭建

    Apache Hadoop的三种运行环境介绍及standAlone环境搭建 三种运行环境 standAlone环境 单机版的hadoop运行环境 伪分布式环境 主节点都在一台机器上,从节点分开到其他机 ...

  9. 【Hadoop离线基础总结】工作流调度器azkaban

    目录 Azkaban概述 工作流调度系统的作用 工作流调度系统的实现 常见工作流调度工具对比 Azkaban简单介绍 安装部署 Azkaban的编译 azkaban单服务模式安装与使用 azkaban ...

随机推荐

  1. Product Owner交流记录1

    Abstract 最终我们选择了UWP版必应词典功能开发. 项目:“单词挑战”功能 然后我们今天中午我们和Product owner聊了聊. Content Product owner是Travis ...

  2. 原创hadoop2.6.4 namenode HA+Federation集群高可用部署

    今天下午刚刚搭建了一个高可用hadoop集群,整理如下,希望大家能够喜欢.   namenode HA:得有两个节点,构成一个namenode HA集群 namenode Federation:可以有 ...

  3. vue2.x学习笔记(六)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12571171.html. class与style绑定 操作元素的class列表和内联样式,是数据绑定的一个常见需求 ...

  4. pyinstaller打包

    参考 官网:http://www.pyinstaller.org/ pyinstaller参数使用 使用spec文件 安装 Windows依赖pypiwin32,新版的pyinstaller已经包含了 ...

  5. CVE-2019-1388:Windows UAC 本地提权复现

    0x01 简介 用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制.其原理是通知用户是否对应用程序使用 ...

  6. [linux] 小问题:管道符,换行问题等;[nginx]启动,重启,关闭命令;以及升级nginx切换命令

    Lniux换行问题 后面回车不会马上执行本条命令而是换行继续. : 是运行完前面就继续后面的, && 同样是前面正确就运行后面, || 是前面运行不正确就运行后面. | 管道符“|”将 ...

  7. 实例讲解Springboot以Template方式整合Redis及序列化问题

    1 简介 之前讲过如何通过Docker安装Redis,也讲了Springboot以Repository方式整合Redis,建议阅读后再看本文效果更佳: (1) Docker安装Redis并介绍漂亮的可 ...

  8. 词向量表示:word2vec与词嵌入

    在NLP任务中,训练数据一般是一句话(中文或英文),输入序列数据的每一步是一个字母.我们需要对数据进行的预处理是:先对这些字母使用独热编码再把它输入到RNN中,如字母a表示为(1, 0, 0, 0, ...

  9. Java如何遍历二维数据

    /* 需求:二维数组遍历 外循环控制的是二维数组的长度,其实就是一维数组的个数. 内循环控制的是一维数组的长度.*/class Array2Test { public static void main ...

  10. chrome Provisional headers are shown错误提示(转载)

    今天开发时遇到了一个问题,由于要做一个支付等待页,大概的意思就是点击支付之后,跳出来一个页面,告知用户正在跳转到支付页面.这个时候问题来了,指鹤要做的这个静态支付等待页中有图片,而为了要让这个静态页面 ...