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. C#——继承

    在某基类中声明 virtual 并在一个或多个派生类中被重新定义的成员函数称为虚函数. 虚函数的作用就是实现多态性(Polymorphism),多态性是将接口与实现进行分离. C#作为完全面向对象语言 ...

  2. 用Taro做个微信小程序Todo, 小白工作记录

    微信小程序框架: Taro 做微信小程序的框架, 几个比较主流的: 官方的WePY: https://tencent.github.io/wepy/document.html#/ 美团的mpvue: ...

  3. JS Math&Date的方法 (上)

    数学对象&时间对象 本篇文章主要介绍Math 和 Date  的常用方法! 一 :Math & Date         Math 数学对象 - 处理数学计算和数学类          ...

  4. vue2.x学习笔记(二十三)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12639440.html. 渲染函数&JSX 基础 vue推荐在绝大多数的情况下使用模板来创建html.然而 ...

  5. Vulnhub-dpwwn-01靶机过关记录

    靶机地址:172.16.1.192 Kali 目录扫描 查看info.php 端口扫描 开放3306,尝试弱密码或爆破mysql. 账户为root,密码为空,成功登陆. 查看数据库:再查看ssh表 查 ...

  6. 如何用TensorFlow实现线性回归

    环境Anaconda 废话不多说,关键看代码 import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' tf.a ...

  7. Blazor WebAssembly 3.2.0 正式起飞,blazor 适合你吗?

    最近blazor更新很快,今天在官方博客上发布了Blazor WebAssembly 3.2.0 RC:https://devblogs.microsoft.com/aspnet/blazor-web ...

  8. java 之 jsp tomcat启动失败问题

    问题描述: 创建了一个helloServlet 代码如下 package Test; import java.io.IOException; import javax.servlet.ServletE ...

  9. 【Linux常见命令】ls命令

    ls - list directory contents ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录). 语法:  ls [OPTION]... [FILE]...  l ...

  10. bootstrap-导航(垂直分组)

    1.运行效果如图所示 2.实现代码如下 <!DOCTYPE html> <html> <head>     <meta charset="utf-8 ...