HDFS

2023-05-16

(一)HDFS简介及其基本概念
  HDFS(Hadoop Distributed File System)是hadoop生态系统的一个重要组成部分,是hadoop中的的存储组件,在整个Hadoop中的地位非同一般,是最基础的一部分,因为它涉及到数据存储,MapReduce等计算模型都要依赖于存储在HDFS中的数据。HDFS是一个分布式文件系统,以流式数据访问模式存储超大文件,将数据分块存储到一个商业硬件集群内的不同机器上。
  这里重点介绍其中涉及到的几个概念:(1)超大文件。目前的hadoop集群能够存储几百TB甚至PB级的数据。(2)流式数据访问。HDFS的访问模式是:一次写入,多次读取,更加关注的是读取整个数据集的整体时间。(3)商用硬件。HDFS集群的设备不需要多么昂贵和特殊,只要是一些日常使用的普通硬件即可,正因为如此,hdfs节点故障的可能性还是很高的,所以必须要有机制来处理这种单点故障,保证数据的可靠。(4)不支持低时间延迟的数据访问。hdfs关心的是高数据吞吐量,不适合那些要求低时间延迟数据访问的应用。(5)单用户写入,不支持任意修改。hdfs的数据以读为主,只支持单个写入者,并且写操作总是以添加的形式在文末追加,不支持在任意位置进行修改。
1、HDFS数据块
  每个磁盘都有默认的数据块大小,这是文件系统进行数据读写的最小单位。这涉及到磁盘的相应知识,这里我们不多讲,后面整理一篇博客来记录一下磁盘的相应知识。
  HDFS同样也有数据块的概念,默认一个块(block)的大小为128MB(HDFS的块这么大主要是为了最小化寻址开销),要在HDFS中存储的文件可以划分为多个分块,每个分块可以成为一个独立的存储单元。与本地磁盘不同的是,HDFS中小于一个块大小的文件并不会占据整个HDFS数据块。
  对HDFS存储进行分块有很多好处:

一个文件的大小可以大于网络中任意一个磁盘的容量,文件的块可以利用集群中的任意一个磁盘进行存储。
使用抽象的块,而不是整个文件作为存储单元,可以简化存储管理,使得文件的元数据可以单独管理。
冗余备份。数据块非常适合用于数据备份,进而可以提供数据容错能力和提高可用性。每个块可以有多个备份(默认为三个),分别保存到相互独立的机器上去,这样就可以保证单点故障不会导致数据丢失。

2、namenode和datanode
  HDFS集群的节点分为两类:namenode和datanode,以管理节点-工作节点的模式运行,即一个namenode和多个datanode,理解这两类节点对理解HDFS工作机制非常重要。
  namenode作为管理节点,它负责整个文件系统的命名空间,并且维护着文件系统树和整棵树内所有的文件和目录,这些信息以两个文件的形式(命名空间镜像文件和编辑日志文件)永久存储在namenode 的本地磁盘上。除此之外,同时,namenode也记录每个文件中各个块所在的数据节点信息,但是不永久存储块的位置信息,因为块的信息可以在系统启动时重新构建。
  datanode作为文件系统的工作节点,根据需要存储并检索数据块,定期向namenode发送他们所存储的块的列表。
  由此可见,namenode作为管理节点,它的地位是非同寻常的,一旦namenode宕机,那么所有文件都会丢失,因为namenode是唯一存储了元数据、文件与数据块之间对应关系的节点,所有文件信息都保存在这里,namenode毁坏后无法重建文件。因此,必须高度重视namenode的容错性。
  为了使得namenode更加可靠,hadoop提供了两种机制:

第一种机制是备份那些组成文件系统元数据持久状态的文件,比如:将文件系统的信息写入本地磁盘的同时,也写入一个远程挂载的网络文件系统(NFS),这些写操作实时同步并且保证原子性。
第二种机制是运行一个辅助namenode,用以保存命名空间镜像的副本,在namenode发生故障时启用。(也可以使用热备份namenode代替辅助namenode)。

3、块缓存
  数据通常情况下都保存在磁盘,但是对于访问频繁的文件,其对应的数据块可能被显式的缓存到datanode的内存中,以堆外缓存的方式存在,一些计算任务(比如mapreduce)可以在缓存了数据的datanode上运行,利用块的缓存优势提高读操作的性能。
4、联邦HDFS
  namenode在内存中保存了文件系统中每个文件和每个数据块的引用关系,这意味着,当文件足够多时,namenode的内存将成为限制系统横向扩展的瓶颈。hadoop2.0引入了联邦HDFS允许系统通过添加namenode的方式实现扩展,每个namenode管理文件系统命名空间中的一部分,比如:一个namenode管理/usr下的文件,另外一个namenode管理/share目录下的文件。
5、HDFS的高可用性
  通过备份namenode存储的文件信息或者运行辅助namenode可以防止数据丢失,但是依旧没有保证了系统的高可用性。一旦namenode发生了单点失效,那么必须能够快速的启动一个拥有文件系统信息副本的新namenode,而这个过程需要以下几步:(1)将命名空间的副本映像导入内存 (2)重新编辑日志 (3)接收足够多来自datanode的数据块报告,从而重建起数据块与位置的对应关系。
  上述实际上就是一个namenode的冷启动过程,但是在数据量足够大的情况下,这个冷启动可能需要30分钟以上的时间,这是无法忍受的。
  Hadoop2.0开始,增加了对高可用性的支持。采用了双机热备份的方式。同时使用一对活动-备用namenode,当活动namenode失效后,备用namenode可以迅速接管它的任务,这中间不会有任何的中断,以至于使得用户根本无法察觉。
  为了实现这种双机热备份,HDFS架构需要作出以下几个改变:

两个namenode之间要通过高可用共享存储来实现编辑日志的共享
datanode要同时向两个namenode发送数据块的报告信息
客户端要使用特定机制来处理namenode的失效问题
备用namenode要为活动namenode设置周期性的检查点,从中判断活动namenode是否失效

HDFS系统中运行着一个故障转移控制器,管理着将活动namenode转移为备用namenode的转换过程。同时,每一个namenode也运行着一个轻量级的故障转移控制器,主要目的就是监视宿主namenode是否失效,并在失效时实现迅速切换。
  HDFS优点:
1、高容错性

数据自动保存多个副本。它通过增加副本的形式,提高容错性。

某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的。

2、适合批处理

它是通过移动计算而不是移动数据。

它会把数据位置暴露给计算框架。

3、适合大数据处理

处理数据达到 GB、TB、甚至PB级别的数据。

能够处理百万规模以上的文件数量,数量相当之大。

能够处理10K节点的规模。

4、流式文件访问

一次写入,多次读取。文件一旦写入不能修改,只能追加。

它能保证数据的一致性。

5、可构建在廉价机器上

它通过多副本机制,提高可靠性。

它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。

HDFS劣势:
1、低延时数据访问

比如毫秒级的来存储数据,它做不到。

它适合高吞吐率的场景,就是在某一时间内写入大量的数据。

2、小文件存储

存储大量小文件(这里的小文件是指小于HDFS系统的Block大小的文件(默认64M))的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。

小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。

3、并发写入、文件随机修改

一个文件只能有一个写,不允许多个线程同时写。

仅支持数据 append(追加),不支持文件的随机修改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDFS 的相关文章

  • Hadoop 2.x——如何配置辅助名称节点?

    我有一个旧的 Hadoop 安装 我希望将其更新到 Hadoop 2 旧的设置 我有一个 HADOOP HOME conf masters 文件 指定 辅助名称节点 浏览 Hadoop 2 文档 我找不到任何提及 masters 文件 或者
  • HDFS 对 DC/OS 中机器重启的弹性

    我已在由 10 台 Core OS 机器 3 个主节点 7 个代理节点 组成的 DCOS 集群上安装了 Universe 中的 HDFS 我的 HA HDFS 配置有 2 个名称节点 3 个日志节点和 5 个数据节点 现在 我的问题是 HD
  • 在 Scala / Spark 中将文件从一个文件夹移动到 HDFS 上的另一个文件夹

    我有两个路径 一个用于文件 一个用于文件夹 我想将文件移动到 HDFS 上的该文件夹中 我怎样才能在 Scala 中做到这一点 我也在用 Spark 如果相同的代码也适用于 Windows 路径 就像在 HDFS 上读取 写入文件一样 但不
  • 如何在Hadoop中设置数据块大小?改变它有好处吗?

    如果我们可以更改 Hadoop 中的数据块大小 请告诉我如何操作 更改块大小是否有利 如果是 请告诉我为什么以及如何更改 如果没有 请告诉我为什么以及如何 您可以随时更改块大小 除非dfs blocksize参数在 hdfs site xm
  • 无法使用 scala 将字符串写入 hdfs 文件

    我编写了一些代码在 hdfs 中创建一个文件并向其写入字节 这是代码 def write uri String filePath String data String Unit System setProperty HADOOP USER
  • 尝试在 h5py 中打开 pandas 创建的 hdf 时缺少列

    这就是我的数据框的样子 第一列是一个整数 第二列是 512 个整数的单个列表 IndexID Ids 1899317 0 47715 1757 9 38994 230 12 241 12228 22861131 0 48156 154 63
  • 从 hdfs 读取 ocr 文件后令人难以置信地触发数据帧

    我在 Ambari 上使用 Spark 2 1 1 和 hadoop 2 6 时遇到问题 我首先在本地计算机上测试了我的代码 单节点 本地文件 一切都按预期工作 from pyspark sql import SparkSession sp
  • 如何使用pyspark从HDFS读取docx/pdf文件?

    我想使用 pyspark 从 Hadoop 文件系统读取 DOCX PDF 文件 目前我正在使用 pandas API 但在 pandas 中我们有一些限制 我们只能读取 CSV JSON XLSX 和 HDF5 它不支持任何其他格式 目前
  • hadoop/hdfs/name 处于不一致状态:存储目录(hadoop/hdfs/data/)不存在或不可访问

    我已经尝试了 stackoverflow 上提供的有关此主题的所有不同解决方案 但没有帮助 再次询问具体的日志和详细信息 任何帮助表示赞赏 我的 Hadoop 集群中有 1 个主节点和 5 个从节点 ubuntu用户和ubuntu组是所有者
  • 格式化 HDFS 时出现 UnknownHostException

    我已经使用以下命令在伪分布式模式下在 CentOS 6 3 64 位上安装了 CDH4指示 https ccp cloudera com display CDH4DOC Installing CDH4 on a Single Linux N
  • gzip 文件如何存储在 HDFS 中

    HDFS存储支持压缩格式来存储压缩文件 我知道 gzip 压缩不支持夹板 现在假设该文件是一个 gzip 压缩文件 其压缩大小为 1 GB 现在我的问题是 该文件将如何存储在 HDFS 中 块大小为 64MB 由此link http com
  • 将文件从 HDFS 复制到本地计算机

    我在尝试将文件从 HDFS 文件系统 下载 到本地系统时遇到问题 即使相反的操作没有问题 注意 文件存在于 HDFS 文件系统的指定路径上 这是一个代码片段 Configuration conf new Configuration conf
  • 如何访问Hadoop HDFS中的文件?

    我的 Hadoop HDFS 中有一个 jar 文件 包含我想要修改的 Java 项目 我想在 Eclipse 中打开它 当我打字时hdfs dfs ls user 我可以看到 jar 文件在那里 但是 当我打开 Eclipse 并尝试导入
  • Hadoop 顺序数据访问

    根据 Hadoop 权威指南 HDFS 是一个文件系统 设计用于存储非常大的文件 流式或顺序数据访问模式 什么是流式或顺序数据访问 它如何减少磁盘的寻道时间 这并不是 Hadoop 特有的 顺序访问模式是指按顺序读取数据 通常是从开始到结束
  • Spark 作业在 YARN 模式下失败

    我有一个用 Scala 编写的 Spark 程序 它从 HDFS 读取 CSV 文件 计算新列并将其保存为 parquet 文件 我正在 YARN 集群中运行该程序 但每次我尝试启动它时 执行程序都会在某个时候失败并出现此错误 您能帮我找出
  • 使用 FSDataOutputStream 将不需要的字符从 java REST-API 写入 HadoopDFS

    我们构建了一个 java REST API 来接收事件数据 例如单击购买按钮 并将该数据写入 HDFS 本质上 我们为发送数据 以 JSON 形式 的每个主机打开流 或者使用现有的流 使用时间戳 事件名称和主机名丰富数据 并将其写入 FS
  • 如何将 Jar 文件传递​​到 OOZIE shell 节点中的 shell 脚本

    您好 我在 oozie shell 操作工作流程中执行的脚本中运行 java 程序时遇到以下错误 Stdoutput 2015 08 25 03 36 02 636 INFO pool 1 thread 1 ProcessExecute j
  • HDFS 在大量小文件和 128 Mb 块大小上的行为

    我有很多 多达数十万个 小文件 每个文件 10 100 Kb 我的 HDFS 块大小等于 128 MB 我的复制因子等于 1 为每个小文件分配 HDFS 块有什么缺点吗 我见过相当矛盾的答案 答案说最小的文件占用整个块 https stac
  • 无法使用 PDI 步骤连接到 HDFS

    我已经配置成功了Hadoop 2 4 in an Ubuntu 14 04 虚拟机 from a 视窗8系统 Hadoop 安装工作绝对正常 而且我还可以从 Windows 浏览器查看 Namenode 附图如下 所以 我的主机名是 ubu
  • Spark 在 WholeTextFiles 上创建的分区少于 minPartitions 参数

    我有一个文件夹 里面有 14 个文件 我在一个集群上使用 10 个执行器运行 Spark Submit 该集群的资源管理器为 YARN 我创建了我的第一个 RDD 如下所示 JavaPairRDD

随机推荐

  • 关于win10系统打开VMware虚拟机蓝屏的解决方案

    先说结论 xff1a 不要急着更改系统配置甚至重装系统 xff0c 首先检查自己的VMware版本 xff0c 如果为16 1或以前 xff0c 请将原先的版本升级为VMware17 0版本 xff01 xff01 xff01 本人当前电脑
  • 洛谷P1025

    这道题类似于把n个苹果放到k个盘子里且不能空盘子的问题 递归 xff08 dfs xff09 做法 include lt bits stdc 43 43 h gt define LL long long using namespace st
  • windows权限维持之shift后门

    原理 xff1a 沾滞键的目的是为了帮助那些按键有困难的人设计的 xff0c 在Windows系统下连续按5次shift键后 xff0c 系统就会执行C Windows System32下的sethc exe xff0c 也就是启用了沾滞键
  • PostgreSQL数据库smallint、bigint转到Oracle,要用什么类型替代? 是number么,那长度分别是多少?...

    个人意见 xff0c 仅供参考 xff1a smallint是有符号或无符号2字节的整数 xff0c 范围是0 xff5e 65 536 xff0c 5位整数 bigint是有符号或无符号8字节的整数 xff0c 范围是0 xff5e 18
  • 网络安全计算机基础

    计算机网络概念 xff1a 实际上是将分布在不同地理位置 xff0c 且具有独立功能的计算机 通过通信链路以及通信设备 xff0c 在网络操作系统 xff0c 网络管理软件及网络通信协议的管理和协调下实现信息传输与资源共享形成的计算机系统
  • ImportError:No module named ‘PIL‘

    运行时报错 xff1a ImportError No module named 39 PIL 原因是缺失一个pillow的数据包 xff0c 不能直接 pip install PIL xff0c 会提示找不到这个安装包 xff0c 需使用如
  • c++中#与##的作用

    1 c 43 43 中 用于把转换成字符串 define T A A 没有使用 using namespace std int main cout lt lt 34 T 2 34 lt lt T 2 lt lt endl cout lt l
  • 人工智能实验——八数码难题

    人工智能实验 八数码难题 人工智能实验 八数码难题 人工智能实验 八数码难题八数码难题简介八数码难题所用到的算法简介代码实现解释运行结果显示代码附件程序可视化 八数码难题简介 八数码问题指的是定义一个3 times 3的格子 xff0c 然
  • idea报错unable to reload maven project

    文章目录 前言一 问题状况二 解决步骤三 卸载maven仓库四 重新安装依赖总结 前言 今天从公司的svn中检出了一个老项目 xff0c 是jQuery 43 spring打造的项目 xff0c emmmm用eclipse编写 xff0c
  • VNC树莓派无法连接

    问题 xff1a 树莓派配置好VNC后 xff0c 第二次通过笔记本远程连接失败 xff0c 报错refused by the computer 解决方法 xff1a 在putty中输入IP地址登录树莓派 xff0c 输入vncserver
  • 经典LCA例题:P4180 [BJWC2010] 严格次小生成树

    Acwing xff1a 严格次小生成树 xff08 求两点间路径上最大边的权值 xff09 模板 洛谷 xff1a 严格次小生成树 求两点间路径上最大边的权值 xff0c 就不能通过前缀和了 xff0c 会丢失信息 每个结点存到其他结点的
  • linux下的压缩与解压缩

    由于计算机中的数据有些需要备份从而归档一个大文件中 下面介绍一下常用的linux压缩解压缩命令 1 关于tar的命令 参数解析 xff1a c 创建生成打包的文件 v 列出打包和解包的详细过程 xff0c 显示进度 f 指定文档的名称 xf
  • 关于fixed frame【odom】does not exist的问题

    在执行完roslaunch mbot description arbotix mbot with camera xacro launch后 xff0c 终端末端是否出现以下一段红色字体 xff0c 若有 xff0c 则此篇文章对你或许有用
  • Linux安装配置Tomcat

    1 下载Tomcat服务器 链接 xff1a https pan baidu com s 15wEXVJWdUUuXX1xRnXylUQ 提取码 xff1a 1234 官网下载 xff1a Apache Tomcat Apache Tomc
  • Oracle类型number与PG类型numeric对比和转换策略

    Oracle 11g number 任意精度数字类型 http docs oracle com cd B28359 01 server 111 b28318 datatype htm CNCPT313 存储数据的范围 正数 xff1a 1
  • 强制关闭linux进程

    问题 xff1a 卡住 xff0c 鼠标可以移动但点击无反应 xff0c 键盘可用 方法 xff1a xff08 1 xff09 Ctrl 43 Alt 43 T 打开终端 xff0c 输入top xff0c 显示的全是现在系统的进程 xf
  • 【计算机系统遇到的问题】win11权限开启方法——相机、麦克风等权限——“其中一些设置由你组织管理”

    win11更新后 xff0c 想必大家应该会出现跟我一样的问题 无法开启权限 xff0c 不知道在哪开启权限 我是在下午跟我老爸视频电话的时候发现这个问题的 xff0c 点击开摄像头 xff0c 但是我这边跟老爸那边却没有我的画面 xff0
  • gitlab安装部署

    本教程使用centos7 6 首先安装依赖包 yum install y curl policycoreutils python openssh server 如下提示相关依赖安装完成 安装步骤如下 xff1a 1 使用官方脚本添加yum源
  • 用51单片机中断控制LED灯亮灭

    用51单片机中断控制LED灯亮灭 span class token macro property span class token directive keyword include span span class token string
  • HDFS

    xff08 一 xff09 HDFS简介及其基本概念 HDFS xff08 Hadoop Distributed File System xff09 是hadoop生态系统的一个重要组成部分 xff0c 是hadoop中的的存储组件 xff