复习打卡大数据篇——Hadoop HDFS 01

目录

1. HDFS简介

2. HDFS基本操作

3. HDFS原理


1. HDFS简介

HDFS概念:

HDFS是一个分布式的文件系统。分布式意味着多台机器存储,文件系统,就是用来存储文件、存储数据。是大数据最底层一个服务。


HDFS设计目标:

  • 故障的检测和自动快速恢复是HDFS的核心架构目标。
  • 面对海量数据的存储,注重吞吐能力,而不是交互式。
  • 支持大文件存储。
  • 一次写入多次读取。
  • 移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在显然更好。
  • 在异构的硬件和软件平台上的可移植性。

HDFS特性:

  • HDFS是主从架构:主角色是 namenode ,其管理维护着元数据,如目录树的结构 文件的大小、文件的副本备份、文件的位置信息等;从角色是 datanode,其存储着最终的数据块。
  • 分块存储:物理上把文件分为一个一个块(block),默认一个块大小在hadoop2.x版本中是128M,也可以通过参数手动设置。比如1个文件300MB,第一块0-128MB,第二块128-256MB,第三块256-300MB。
  • 副本机制:为了提高容错性,每个block都在HDFS中都会有副本,副本数量也可以通过参数设置dfs.replication,默认是3。本身1个,副本2个,一共三个。
  • 名字空间(命名空间)(namespace):也就是支持传统的层次型文件组织结构,也就是目录树。用户可以创建、删除、移动或重命名文件。Namenode负责维护namespace,任何对namespace的修改都将被Namenode记录下来。
  • metadata(元数据):元数据也叫解释性数据,就是记录数据的数据,对于HDFS来说,目录结构及文件分块位置信息叫做元数据,元数据是由namenode维护的。
  • datanode(数据存储):文件的各个block的具体存储管理由datanode节点承担,每一个block都可以在多个datanode上,datanode需要定时向Namenode汇报自己持有的block信息。
  • write one read many(一次写入多次读取):这是由设计目标决定的,不支持文件的修改,正因为如此,HDFS适合用来做大数据分析的底层存储服务。
     

2. HDFS基本操作

命令行使用:

hadoop fs -ls hdfs://node1:8020/...

hadoop  fs可以操作的文件系统不仅仅有HDFS,还包括本地文件系统、GFS、TFS等。

比如本地:hadoop fs -ls file:///...

如果直接hadoop fs -ls / ,其访问的文件系统取决于参数fs.defaultFS。默认为file:///


常见命令操作:

hadoop fs -ls [-h] [-R] <args> :查看指定目录下信息,其中-h人性化显示,-R 递归显示。

例:hadoop fs -ls -h hdfs://node1:8020/

hadoop fs -mkdir [-p] <paths>:在hdfs上创建目录,-p表示会创建路径中的各级父目录

hadoop fs -put [-f] [-p]  src  dst:将单个或多个本地文件复制到目标文件系统,src代表的是本地目录,dst代表的是HDFS。其中-p:保留访问和修改时间,所有权和权限 。-f:覆盖目的地(如果已经存在)。例:hadoop fs -put file:///root/aaa.txt hdfs://node1:8020/aaa,表示将本地的aaa.txt上传到HDFS的aaa目录下。

hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] src localdst:将文件下载到本地文件系统,其中-ignorecrc表示跳过对下载文件的CRC检查,-crc表示为下载的文件写CRC校验和。

hadoop fs -appendToFile <localsrc> ... <dst>:追加一个文件到已经存在的文件末尾,把本地的小文件上传合并成为大文件 解决小文件场景。

hadoop fs -cat [-ignoreCrc] URI [URI ...]显示文件内容到stdout。

hadoop fs -tail [-f] URI:将文件的最后一千字节内容显示到stdout,-f选项将在文件增长时输出附加数据。

hadoop fs -chgrp [-R] GROUP URI [URI ...]:修改所属组,用户必须是文件的所有者,或者是超级用户,-R将使改变在目录结构下递归进行。

 -chmod :改变文件的权限,-R将使改变在目录结构下递归进行。

-chown:  修改文件拥有者。

-cp:从hdfs的一个路径拷贝hdfs的另一个路径。

-mv:在hdfs目录中移动文件。

-rm:删除指定的文件,只删除非空目录和文件,-r 递归删除。

-getmerge:合并下载多个文件  其功能和appendToFile相反的动作。

hadoop fs -df -h / :统计HDFS可用空间  指定目录大小。

hadoop fs -setrep -w N -R :修改文件的副本数,N表示修改之后的副本数,-w表示修改副本客户端是否等待修改完毕再推出-R选项用于递归改变目录下所有文件的副本系数,例如:hadoop fs -setrep 2 /aaa/aaa.txt表示修改aaa.txt副本数为2。

3. HDFS原理

Namenode

NameNode 是 HDFS 的核心组件,充当 HDFS 的主节点,主要负责存储文件系统的元数据,即 HDFS 文件目录结构,并记录集群中每个文件的块信息及其位置。然而,NameNode 并不存储实际的数据内容,这些数据块保存在 DataNode 中。通过元数据,NameNode 能够知道每个文件对应的数据块以及如何从这些块中重建文件。需要注意的是,NameNode 并不会持久化保存每个数据块在 DataNode 中的具体位置信息,这些位置信息会在系统启动时由 DataNode 动态重建。如果 NameNode 停止运行,HDFS 或整个 Hadoop 集群将不可用,因此它是 Hadoop 集群的单点故障节点。由于 NameNode 的角色至关重要,运行它的服务器通常需要配置较大的内存资源。

Datanode

DataNode 是 HDFS 中负责存储实际数据的从节点,与 NameNode 持续通信。每当 DataNode 启动时,它会向 NameNode 注册并报告自身所管理的数据块信息。即使某个 DataNode 出现故障,也不会对集群或数据的整体可用性造成影响,此时 NameNode 会调度其他 DataNode 创建相应数据块的副本。因为 DataNode 是存储实际数据的核心组件,其运行服务器通常需要配置大容量的硬盘存储空间。此外,DataNode 会定期向 NameNode 发送心跳信号,默认间隔为 3 秒,可通过参数 dfs.heartbeat.interval 进行调整。如果 NameNode 在较长时间内未收到某个 DataNode 的心跳信号,就会将其标记为失效节点。同时,DataNode 会按默认 6 小时的间隔向 NameNode 报告数据块信息,这一间隔可通过参数 dfs.blockreport.intervalMsec 配置。


HDFS写数据流程:

  1. 客户端请求上传文件。客户端(client)通过 RPC 与 NameNode 建立连接,向其发送文件上传请求。NameNode 检查目标文件是否已存在以及父目录是否有效,随后返回是否允许上传的结果。
  2. 请求分配第一个 Block 的 DataNode。客户端向 NameNode 请求第一个数据块(block)应存储到哪些 DataNode 节点上。
  3. NameNode 分配 DataNode。NameNode 根据配置文件中的副本数量及副本放置策略进行分配,返回可用的 DataNode 地址列表。默认副本分配策略由 BlockPlacementPolicyDefault 类实现,3 副本策略如下:第一副本若写入方所在机器是某个 DataNode,则直接存储在本地,否则随机选择一个 DataNode。第二副本存储于不同于第一副本的机架上的一个 DataNode。第三副本:存储在第二副本所在机架上的另一个不同节点。
  4. 客户端与第一台 DataNode 建立连接。客户端向返回的第一台 DataNode(如 A)发起上传请求(本质是 RPC 调用),同时由 A 继续调用 B,B 再调用 C,逐步建立整个数据传输管道(pipeline)。管道建立完成后,各节点依次将信息返回给客户端。
  5. 客户端开始上传数据。客户端将数据从磁盘读取并存入本地内存缓存中,按照固定大小的数据包(packet)(默认 64KB)逐个传输到 DataNode A。  A 接收到一个 packet 后,会立即将其传给 B,B 再传递给 C,完成流水线式传输。  A 每传递一个 packet,会将其放入应答队列中,等待来自下游节点的确认。
  6. 数据传输确认(ACK)。数据包通过管道完成传输后,在管道的反方向上依次发送 ack(确认应答),最终由第一个节点 A 将完整的 pipeline ack 发送给客户端,确认该 packet 已成功写入。
  7. 重复传输后续数据块。当一个数据块(block)传输完成后,客户端再次向 NameNode 请求分配新的 DataNode 地址用于存储下一个数据块。该过程重复,直到文件所有数据块上传完成。

可以把应答队列理解成一个“任务清单”:

  • 节点 A 在完成一个任务(发送数据包到管道的其他节点)之前,会把这个任务记录在清单上。
  • 只有当下游节点(B 和 C)完成任务并返回确认,A 才会把任务从清单上划掉。
  • 如果下游节点中途出问题,A 的清单会提醒自己需要重新处理这个任务。

HDFS读数据流程:

  1. 客户端请求文件信息。当我们要读取一个文件时,客户端首先会向 HDFS 的“指挥官”——NameNode 发出请求,问:“这个文件的各个部分(块)存在哪里?”
  2. NameNode告诉客户端块的位置。NameNode 负责整个文件系统的管理,它知道文件被切分成了哪些块(block),每个块存储在哪些服务器(DataNode)上。NameNode会返回文件的部分或全部块信息,并告诉客户端这些块分别在哪些 DataNode 上。包括副本。
  3. 客户端对 DataNode 进行排序。客户端拿到块所在 DataNode 的地址列表后,会对这些地址进行排序,排序规则是:谁离我最近谁优先:HDFS根据网络拓扑结构判断哪个 DataNode 离客户端最近(比如同一个机架上的节点会优先)。谁状态更好谁优先:如果某个 DataNode 状态不太好(比如长时间没有心跳响应),它会被排到最后。
  4. 开始读取数据。客户端从排在最前面的 DataNode 开始读取块数据。如果幸运的话,客户端自己就是其中一个存储块的 DataNode,那么它会直接从本地读取数据。
  5. 数据读取的底层机制。数据的读取是通过一个叫 FSDataInputStream 的工具完成的。它会反复调用一个叫 read 的方法,一点一点地把数据从块中取出来,直到把这个块读完。
  6. 读取下一个块。当一个块的数据读完之后,客户端会断开与当前 DataNode 的连接,并转而去读取下一个块所在的 DataNode。这样循环下去,直到把所有块的数据都读完。
  7. 大文件怎么读?如果文件特别大,可能 NameNode 一开始只给了客户端一部分块的信息。读完这些块后,客户端会再次向 NameNode 请求剩余块的位置,继续读取,直到整个文件读完为止。
  8. 数据完整性校验。每次读完一个块,客户端都会进行校验(checksum),确保数据没有损坏。如果某个块读取失败(比如 DataNode 挂了),客户端会告诉 NameNode,并从另一个有该块副本的 DataNode 继续读取,确保数据可靠性。
  9. NameNode只提供地址,不传数据。NameNode 的作用只是告诉客户端块存储在哪些 DataNode 上,它本身不参与任何数据传输。
  10. 拼接完整文件。最后,客户端会将从不同块读取到的数据按顺序拼接起来,组成一个完整的文件。

一个比喻:分布式图书馆借书

  1. 把 HDFS 比作一个超大图书馆,图书馆有很多分馆(DataNode),中央管理系统(NameNode)负责记录所有书的分布。假设我们要借一套书,整个流程如下:
  2. 询问中央管理系统:去问这套书在哪些分馆。
  3. 返回分馆列表:中央系统告诉你,这套书被拆成几部分,每部分在哪些分馆有。
  4. 挑选最近的分馆:根据距离和分馆状态,挑选优先级最高的分馆去拿书。
  5. 从分馆取书:每次从一个分馆取一部分,直到拿全所有部分。
  6. 书籍完整性检查:每次取完一部分都检查一下内容是否正确。
  7. 遇到问题换分馆:如果某个分馆的书有问题,就去其他存有副本的分馆拿书。
  8. 拼成完整的书:最后把书的各部分拼起来,完成借书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939286.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍

概述 伴随电子商务的持续演进&#xff0c;客户对于便利性、速度以及个性化服务的期许急剧攀升。企业务必要探寻创新之途径&#xff0c;以强化自身运营&#xff0c;并优化购物体验。达成此目标的最为行之有效的方式之一&#xff0c;便是将 AI 呼叫助手融入您的电子商务平台。我们…

基于base32的兑换码算法(思路)

base32编码指的是基于32个可打印字符对任意字节数据进行编码&#xff1a;大写字母A-Z以及数字2-7。 兑换码要求:长度为10个字符 如果将这32个字符依次放到一个base数组中&#xff0c;那么最大的下标就是31。我们将要编码的任意字节数据按照五个bit为一组进行划分&#xff0c;…

前端开发环境(vue)

1. 安装nvm管理nodejs的版本 1. 配置nvm 2. 用npm安装nodejs,选则nodejs版本,这是js的运行环境 3 . 安装npm,这是前端的包管理器 npm是nodejs开发的包管理器,现在下载了nodejs就默认下载npm了,绑在一块了,不用 1. npm的中央仓库 2. npm私服仓库 换库 npm config set r…

第十七章:反射+设计模式

一、反射 1. 反射(Reflection)&#xff1a;允许在程序运行状态中&#xff0c;可以获取任意类中的属性和方法&#xff0c;并且可以操作任意对象内部的属 性和方法&#xff0c;这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。 2. 类对象 和 类的对象(实…

arduino继电器与电机水泵的使用

首先说一句&#xff0c;真受不了网上的教程&#xff0c;大海里捞金&#xff0c;要不上来了就讲原理&#xff0c;怎么具体使用一句不说&#xff0c;要么炫技来了。 继电器&#xff0c;简单来说把他当开关看&#xff0c;通过小电流控制大电流(原理去看其他视频)&#xff0c;要记…

【Java Web】Axios实现前后端数据异步交互

目录 一、Promise概述 二、Promise基本用法 三、async和await关键字 四、Axios介绍 4.1 Axios基本用法 4.2 Axios简化用法之get和post方法 五、Axios拦截器 六、跨域问题处理 一、Promise概述 axios是代替原生的ajax实现前后端数据交互的一套新解决方案&#xff0c;而…

网络编程 03:端口的定义、分类,端口映射,通过 Java 实现了 IP 和端口的信息获取

一、概述 记录时间 [2024-12-19] 前置文章&#xff1a; 网络编程 01&#xff1a;计算机网络概述&#xff0c;网络的作用&#xff0c;网络通信的要素&#xff0c;以及网络通信协议与分层模型 网络编程 02&#xff1a;IP 地址&#xff0c;IP 地址的作用、分类&#xff0c;通过 …

webdriver 反爬虫 (selenium反爬虫) 绕过

1. webdriver 反爬虫原理 爬虫程序可以借助渲染工具从动态网页中获取数据。 在这个过程中&#xff0c;“借助”其实是通过对应的浏览器驱动&#xff08;即WebDriver&#xff09;向浏览器发出指令的行为。因此&#xff0c;开发者可以根据客户端是否包含浏览器驱动这一特征来区分…

JAVA 零拷贝技术和主流中间件零拷贝技术应用

目录 介绍Java代码里面有哪些零拷贝技术java 中文件读写方式主要分为什么是FileChannelmmap实现sendfile实现 文件IO实战需求代码编写实战IOTest.java 文件上传阿里云&#xff0c;测试运行代码看耗时为啥带buffer的IO比普通IO性能高&#xff1f;BufferedInputStream为啥性能高点…

系统移植——Linux 内核顶层 Makefile 详解

一、概述 Linux Kernel网上下载的版本很多NXP等有自己对应的版本。需要从网上直接下载就可以。 二、Linux内核初次编译 编译内核之前需要先在 ubuntu 上安装 lzop 库 sudo apt-get install lzop 在 Ubuntu 中 新 建 名 为 “ alientek_linux ” 的 文 件夹 &#xff0c; …

Reactor

文章目录 正确的理解发送double free问题解决 1.把我们的reactor进行拆分2.链接管理3.Reactor的理论 listensock只需要设置_recv_cb&#xff0c;而其他sock&#xff0c;读&#xff0c;写&#xff0c;异常 所以今天写nullptr其实就不太对&#xff0c;添加为空就没办法去响应事件…

【深度学习】 零基础介绍卷积神经网络(CNN)

CNN学习 零基础介绍写个CNN最简单的代码一. 概述二. 搭建CNN1. 输入层2. 卷积层3. 激活层4. 池化层5. 全连接层6. 网络搭建小结7. 损失函数8. 梯度下降9. 反向传播10. 模型评估与正则化11. 尝试搭建自己的第一个CNN 三. 经典CNN结构四. 猫狗识别项目实践1. Paddle实现版本&…

Leetcode打卡:找到稳定山的下标

执行结果&#xff1a;通过 题目&#xff1a; 3258 找到稳定山的下标 有 n 座山排成一列&#xff0c;每座山都有一个高度。给你一个整数数组 height &#xff0c;其中 height[i] 表示第 i 座山的高度&#xff0c;再给你一个整数 threshold 。 对于下标不为 0 的一座山&#xf…

leetcode刷题日记03——javascript

题目3&#xff1a; 回文数https://leetcode.cn/problems/palindrome-number/ 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向…

服务器数据恢复—RAIDZ离线硬盘数超过热备盘数导致阵列崩溃的数据恢复案例

服务器存储数据恢复环境&#xff1a; ZFS Storage 7320存储阵列中有32块硬盘。32块硬盘分为4组&#xff0c;每组8块硬盘&#xff0c;共组建了3组RAIDZ&#xff0c;每组raid都配置了热备盘。 服务器存储故障&#xff1a; 服务器存储运行过程中突然崩溃&#xff0c;排除人为误操…

Tact智能合约安全实践:TON生态系统中的常见错误

TON&#xff08;The Open Network&#xff09;以其创新特性和强大的智能合约性能&#xff0c;不断拓宽区块链技术的边界。基于早期的区块链平台&#xff08;如以太坊等&#xff09;的经验与教训&#xff0c;TON为开发者提供了一个更加高效且灵活的开发环境。其中推动这一进步的…

C进阶—指针(1)

若是阁下满意的话&#xff0c;可否一键三连呢&#xff01; 第一篇进阶指针就是先了解各种新的概念&#xff08;用法我们后面几篇再详细说&#xff01;先只介绍概念&#xff09;&#xff0c;有疑惑很正常&#xff0c;只是暂时的&#xff0c;我们一起来看看吧&#xff01; 字符指…

【Python使用】嘿马头条项目从到完整开发教程第9篇:缓存,1 缓存穿透【附代码文档】

本教程的知识点为:简介 1. 内容 2. 目标 产品效果 ToutiaoWeb虚拟机使用说明 数据库 理解ORM 作用 思考&#xff1a; 使用ORM的方式选择 数据库 SQLAlchemy操作 1 新增 2 查询 all() 数据库 分布式ID 1 方案选择 2 头条 使用雪花算法 &#xff08;代码 toutiao-backend/common/…

谷歌浏览器的扩展程序自动更新设置

谷歌浏览器是全球最受欢迎的网络浏览器之一&#xff0c;其扩展程序更是为用户提供了丰富的功能。然而&#xff0c;随着时间的推移&#xff0c;扩展程序需要更新以修复漏洞、提升性能或增加新功能。本文将详细介绍如何在Chrome中设置扩展程序的自动更新。&#xff08;本文由http…

LabVIEW与PLC点位控制及OPC通讯

在工业自动化中&#xff0c;PLC通过标准协议&#xff08;如Modbus、Ethernet/IP等&#xff09;与OPC Server进行数据交换&#xff0c;LabVIEW作为上位机通过OPC客户端读取PLC的数据并进行监控、控制与处理。通过这种方式&#xff0c;LabVIEW能够实现与PLC的实时通信&#xff0c…