分布式文件系统:HDFS 核心原理

Hadoop高频面试题 一、HDFS集群架构(HDFS组织架构) 二、HDFS数据写流程 三、HDFS数据读流程 四、MapTask和ReduceTask工作机制 (也可回答MapReduce工作原理) 五、 小文件过多会有什么危害,如何避免 六、hadoop(mapReduce)数据倾斜问题 七、YARN集群的架构和工作原理 八、YARN的任务提交流程是怎样的 九、YARN的资源调度三种模型 十、NameNode在启动的时候会做哪些操作 十一、NameNode在启动的时候会做哪些操作 十二、HDFS在读取文件的时候,如果其中一 阅读详情

目录

基础架构

HDFS Client

NameNode和DataNode

fsimage和edits

SecondaryNameNode

高可用架构

JournalNode

联邦机制

副本机制

机架感知

安全模式

平衡策略

读写原理

读原理

写原理

删除恢复机制


HDFS相关内容:

  1. HDFS超有用的知识点
  2. Hadoop3新特性之HDFS纠删码
  3. HDFS常用管理命令
  4. HDFS的副本数量配置
  5. HDFS查看namenode状态
  6. 统计HDFS目录下文件行数及文件大小

基础架构

HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的一个子项目,Hadoop 非常适于存储大型数据, 其就是使用 HDFS 作为存储系统,而HDFS 使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。作为大数据生态最重要的组件之一,HDFS充当着大数据时代的数据管理者的角色,为各种分布式计算组件提供用于处理的数据存储的能力。

HDFS 基础架构由四个角色组成:HDFS Client、NameNode、DataNode 和 SecondaryNameNode。

HDFS Client

HDFS客户端提交读写命令到HDFS,它负责:

  • 文件切分:文件上传 HDFS的时候,Client 将文件切分成一个个Block(数据块),然后进行存储。
  • 与 NameNode 交互:获取文件真实的位置信息。
  • 与 DataNode 交互:读取或写入数据。
  • Client 提供一些命令来管理 和访问HDFS,比如启动或者关闭HDFS。

NameNode和DataNode

NameNode 是HDFS的Master节点,它负责:

  • 管理 HDFS 的名称空间;
  • 管理数据块(Block)映射信息;
  • 配置副本策略;
  • 处理客户端读写请求;
  • 周期性的接收心跳和块的状态信息报告;

 DataNode 是HDFS的Slave节点,它负责:

  • 存储实际的数据块;
  • 执行数据块的读/写操作; 
  • 周期性向NameNode汇报心跳信息;
  • 周期性向NameNode汇报数据块信息;
  • 周期性向NameNode汇报缓存数据块信息;

fsimage和edits

在Hadoop集群当中,NameNode的所有元数据信息都保存在fsimage 与 edits 文件中, 这两个文件记录了所有的数据的元数据信息,当集群重启时NameNode首先会从fsimage和edits文件中将元数据信息加载到内存中,因此NameNode机器对内存的要求相对会比DataNode高很多,元数据信息的保存目录配置在了 hdfs-site.xml 中的这两个参数:dfs.namenode.name.dir,dfs.namenode.edits.dir。

edits

  • 存放了客户端最近一段时间的操作日志;
  • 客户端对 HDFS 进行写文件时的操作会先被记录在 edits 文件中;
  • edits 修改时元数据也会更新;

fsimage

  • NameNode 中关于元数据的镜像,一般称为检查点,fsimage 存放了一份比较完整的元数据信息;
  • 因为 fsimage 是 NameNode 的完整的镜像, 如果每次都加载到内存生成树状拓扑结构,这是非常耗内存和CPU, 所以一般开始时对NameNode 的操作都放在 edits 中;
  • fsimage 内包含了 NameNode 管理下的所有 DataNode 文件和文件 block 以及 block所在的 DataNode 的元数据信息;
  • 随着 edits 内容增大,就需要在一定策略下和 fsimage 合并;

由于集群重启时NameNode会重新加载fsimage和edits文件,fsimage文件加载起来很快,但edits文件内记录的都是操作日志,因此edits文件不能无限增长,否则重放日志很慢,会影响到集群启动的速度,因此edits文件和fsimage会定期进行合并。

SecondaryNameNode

SecondaryNameNode不是NameNode 的热备。当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务,而是作为一个辅助者分担NameNode的工作量。在后面的内容中介绍的HDFS的高可用中会介绍真正的NameNode热备机制。

  • 定期合并 fsimage和edits,并推送给NameNode,把 edits 控制在一个范围内。
  • 在紧急情况下,可辅助恢复 NameNode。

上面提到edits文件会根据一定策略和fsimage合并,主要由core-site.xml文件中的两个参数来管理:

<!-- 多久记录一次 HDFS 镜像, 默认 1小时 -->
<property>
  <name>fs.checkpoint.period</name>
  <value>3600</value>
</property>
<!-- 一次记录多大, 默认 64M -->
<property>
  <name>fs.checkpoint.size</name>
  <value>67108864</value>
</property>

当edits和fsimage文件合并策略触发时,合并流程如下:

  1. SNN(SecondaryNameNode)通知NN(NameNode)暂时切换将日志写到edits.new内;
  2. SNN通过GET请求将NN中的edits和fsimage文件加载到内存中;
  3. SNN将内存中的edits和fsimage合并生成新的fsimage.ckpt文件;
  4. SNN通过POST请求将生成的fsimage.ckpt文件传给NN;
  5. NN将收到的fsimage.ckpt替换旧的fsimage文件;
  6. NN将edits.new替换旧的edits文件;

高可用架构

JournalNode

上面我们介绍的都是HDFS的基础架构,从上面的内容中我们也可以看出,NameNode对于HDFS很重要,整个HDFS文件系统的元数据信息都由NameNode来管理,NameNode的可用性直接决定了Hadoop 的可用性,一旦NameNode进程不能工作了,就会影响整个集群的正常使用。因此在Hadoop2.x版本中加入了HDFS HA的特性,在典型的HA集群中,两台独立的机器被配置为NameNode。在工作集群中,NameNode机器中的一个处于Active状态,另一个处于Standby状态。Active NameNode负责群集中的所有客户端 操作,而Standby充当从服务器,Standby机器保持足够的状态以提供快速故障切换。

两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当Active 状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。Standby 状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。Standby 可以确保在集群出错时,命名空间状态已经完全同步了 ,以此达到快速故障切换。

在HA架构下,SecondaryNameNode被JournalNode替代,实现两个NameNode之间的信息同步,由Zookeeper实现两个NameNode之间的高可用,相关的组件如下:

  • ZKFailoverController:是基于Zookeeper的故障转移控制器,它负责控制NameNode的主备切换,ZKFailoverController会监测NameNode的健康状态,当发现Active NameNode出现异常时会通过Zookeeper进行一次新的选举,完成Active和Standby状态的切换;
  • HealthMonitor:周期性调用NameNode的HAServiceProtocol RPC接口(monitorHealth 和 getServiceStatus),监控NameNode的健康状态并向ZKFailoverController反馈;
  • ActiveStandbyElector:接收ZKFC的选举请求,通过Zookeeper自动完成主备选举,选举完成后回调ZKFailoverController的主备切换方法对NameNode进行Active和Standby状态的切换;
  • DataNode:NameNode包含了HDFS的元数据信息和数据块信息(blockmap),为了确保快速切换,Standby 状态的NameNode有必要知道集群中所有数据块的位置。为了做到这点,所有的DataNode必须配置两个NameNode的地址,同时发送数据块位置信息和心跳给他们两个。 
  • 共享存储系统(JournalNode):共享存储系统负责存储HDFS的元数据(EditsLog),Active NameNode(写入)和 Standby NameNode(读取)通过共享存储系统实现元数据同步,在主备切换过程中,新的Active NameNode必须确保元数据同步完成才能对外提供服务;对于HA集群而言,确保同一时刻只有一个NameNode处于active状态是至关重要的。否则,两个NameNode的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,JNs必须确保同一时刻只有一个NameNode可以向自己写数据。

Hadoop3.x版本中的新特性允许2个以上的NameNode节点,该功能能够通过运行更多Standby NameNode来提供更高的容错性,满足一些部署的需求。比如,通过配置3个NameNode和5个JournalNode,集群能够满足允许两个节点故障的容错。

联邦机制

虽然HA模式保证了NameNode的高可用,但HDFS中其实最严重的问题就是小文件过多导致的NameNode维护的元数据信息过多,由此引起的性能下降的问题,因此无论在MapReduce还是Spark程序中都应当尽量避免产生过多小文件。同时HDFS也推出了NameNode的水平扩展方案:联邦机制(Federation)。

HDFS联邦机制表示有多个NameNode,但和HA模式下的多个NameNode的意思不同,在HA模式下的NameNode是主备的概念,而联邦机制中的多NameNode类似分管,表示某个NameNode管理某块命名空间(namespace)内的元数据信息,将本来大量的元数据信息分散在多个NameNode上进行管理,它们之间相互独立不需要互相协助,各自分工,管理自己的区域。

 

同一个namespace下的block集合被称为Block Pool(存储池),因此在联邦机制下,每个NameNode对应一个Block Pool,对应到DataNode中就是一个个的Block Pool,分别有对应的ID,这时候在DataNode上就不仅仅存储一个Block Pool下的数据了,而是多个,且存储在DataNode的datadir路径里的名为BP-xx.xx的目录。

联邦机制的好处是,多个NameNode共有一个集群里的存储资源,且每个NameNode都可以单独对外提供服务,解决了单个Active NameNode的内存瓶颈问题。但联邦还是没有解决单点故障的问题,假如维护namespace为BP-003的NameNode宕机,则客户端也无法读取DataNode中的/BP-003的数据,因此当集群规模较大的时候,应采用HA+Federation的部署方案,即上图中每个Active NameNode都对应了一个Standby NameNode提升可用性。

副本机制

HDFS中的文件以Block块的形式存储在HDFS文件系统中,目的为:

  • 一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题;
  • 使用块作为文件存储的逻辑单位可以简化存储子系统;
  • 块非常适合用于数据备份,提供数据容错能力;

在 Hadoop1.x 当中, 文件的 block 块默认大小是 64M,在Hadoop2.x中, 文件的 block 块大小默认是128M, block 块的大小和副本数量可以通过 hdfs-site.xml 当中的配置文件进行指定:

<!-- 块大小,单位为字节 -->
<property>
    <name>dfs.block.size</name>
    <value>134217728</value>
</property>

<!-- 副本数量,默认3个副本 -->
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>

注意:

  • 当文件大于配置的块大小时会被拆分,如130M的文件会被拆分为两个块,一个128M另一个2M。
  • 当文件小于配置的块大小时不会拆分,如100M的文件不会拆分,只有一个100M的块。 

机架感知

分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群。机架内的机器之间的网络速度通常都会高于跨机架机器之间的网络速度,并且机架之间机器的网络通信通常受到上层交换机间网络带宽的限制。

Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为:

  1. 第一个block副本放在客户端所在的数据节点里(如果客户端不在集群范围内,则从整个集群中随机选择一个合适的数据节点来存放);
  2. 第二个副本放置在与第一个副本所在节点不同的机架内的数据节点上(随机选择);
  3. 第三个副本放置在不同机架的节点上;
  4. 如果还有其他副本,则随机放在其他节点上;

这样设计的好处是:

  • 当本地数据损坏时,节点可以从同一机架内的相邻节点拿到数据,速度肯定比从跨机架节点上拿数据要快;
  • 当整个机架的网络出现异常,也能保证在其它机架的节点上找到数据;

为了降低整体的带宽消耗和读取延时,HDFS会尽量让程序读取离它最近的节点上的副本,以节约带宽和提升性能。HDFS通过机架感知这一特性实现此功能。

在默认情况下,机架感知没有被启用,所有的机器hadoop都默认在同一个默认的机架下,名为 “/default-rack”,这种情况下,任何一台datanode机器,不管物理上是否属于同一个机架,都会被认为是在同一个机架下,此时,就很容易出现增添机架间网络负载的情况。因为此时hadoop集群的HDFS在选机器的时候,是随机选择的,也就是说,很有可能由于副本的随机分配导致大量的网络传输从而影响性能和集群的服务。

通过修改配置文件core-site.xml 中的参数 topology.script.file.name 开启机架感知,value指定为一个可执行程序,通常为一个脚本(根据入参IP返回该IP地址对应的datanode所在的rack)。

例:网络拓扑如下图:

开启机架感知后,NameNode就可以画出上图所示的datanode网络拓扑图。D1,R1都是交换机,最底层是datanode。则H1的rackid=/D1/R1/H1,H1的parent是R1,R1的parent是D1。有了这些rackid信息就可以计算出任意两台datanode之间的距离。

distance(/D1/R1/H1,/D1/R1/H1)=0  相同的datanode
distance(/D1/R1/H1,/D1/R1/H2)=2  同一rack下的不同datanode
distance(/D1/R1/H1,/D1/R1/H4)=4  同一IDC下的不同datanode
distance(/D1/R1/H1,/D2/R3/H7)=6  不同IDC下的datanode

安全模式

安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。当集群启动的时候,会首先进入安全模式,当系统处于安全模式时会检查数据块的完整性。

假设我们设置的副本数(即参数dfs.replication)是5,那么在datanode上就应该有5个副本存在,假设只存在3个副本,那么比例就是3/5=0.6。在配置文件hdfs-default.xml中定义了一个最小的副本的副本率0.999,我们的副本率0.6明显小于0.99,因此系统会自动的复制副本到其他的dataNode,使得副本率不小于0.999.如果系统中有8个副本,超过我们设定的5个副本,那么系统也会删除多余的3个副本。

在安全模式下,系统会处于只读状态,NameNode不会处理任何数据块的复制和删除命令。DataNode会向NameNode上传他们数据块的列表,让NameNode得到数据块的位置信息,并对每个文件对应的数据块副本进行统计:

  • 当最小副本条件满足时,即:一定比例的数据块都到达最小副本数,系统会在30s后退出安全模式。
  • 当最小的副本条件未达到要求时,就会对副本数不足的数据块安排DataNode进行复制,直到达到最小的副本数。

注意:在启动一个刚刚格式化的HDFS时由于没有数据块,所以系统不会进入安全模式。

HDFS安全模式操作命令:

hdfs dfsadmin  -safemode  get #查看安全模式状态
hdfs dfsadmin  -safemode enter #进入安全模式
hdfs dfsadmin  -safemode leave #离开安全模式

安全模式相关参数在hdfs-site.xml 文件中配置:

<!-- 指定退出条件,需要达到最小副本数的数据块比例,默认是 0.999 -->
<property>
    <name>dfs.namenode.safemode.threshold-pct</name>
    <value>0.999f</value>
</property>

<!-- 指定系统退出安全模式时需要的延迟时间,单位为毫秒,默认为 30s -->
<property>
    <name>dfs.namenode.safemode.extension</name>
    <value>30000</value>
</property>

如果 NameNode 长时间处于安全模式,可能是因为 hdfs 的数据损坏过多。使用命令hadoop fsck / 检查 hdfs 文件分布的情况。

平衡策略

在HDFS的DN节点间的数据不平衡情况下,尤其在新增和下架节点、或者人为干预副本数量的时候,会大大的影响数据读取的性能,降低任务的执行速度甚至崩溃,因此HDFS有一个组件叫做Balancer,使用该组件可以保证每个节点的数据均衡分布。

#开始数据平衡:
#用默认的10%的阈值启动balancer
start-balancer.sh    
#或指定3%的阈值启动balancer
hdfs dfs balancer -threshold 3
start-balancer.sh -threshold 3    

#停止数据平衡:
stop-balancer.sh

hdfs balancer
      [-threshold <threshold>]
      [-policy <policy>]
      [-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
      [-include [-f <hosts-file> | <comma-separated list of hosts>]]
      [-idleiterations <idleiterations>]

-threshold  10      #集群平衡的条件,datanode间磁盘使用率相差阈值,区间选择:0~100。Threshold参数为集群是否处于均衡状态设置了一个目标
-policy datanode    #默认为datanode,datanode级别的平衡策略
-exclude  -f  /tmp/ip1.txt  #默认为空,指定该部分ip不参与balance, -f:指定输入为文件
-include  -f  /tmp/ip2.txt  #默认为空,只允许该部分ip参与balance,-f:指定输入为文件
-idleiterations  5          #最大迭代次数,默认为 5

可选的配置参数如下:

#并行移动的block数量,默认5
dfs.datanode.balance.max.concurrent.moves

#Balance工具所占用的带宽,默认1048576(1MB)
dfs.datanode.balance.bandwidthPerSec

#用于执行block移动的线程池大小,默认1000
dfs.balancer.moverThreads

#每次balance进行迭代的过程最大移动数据量,默认10737418240(10GB)
dfs.balancer.max-size-to-move

#获取block的数量,默认2147483648(2GB)
dfs.balancer.getBlocks.size

#用来平衡的最小block大小,默认10485760(10MB)
dfs.balancer.getBlocks.minblock-size

平衡算法根据各Datanode的使用情况,将集群中的节点分为四类:过度闲置、平均值以下、平均值以上、过度使用。

然后根据划分的角色进行配对:

  • 过度使用--> 过度闲置
  • 过度使用-->平均值下
  • 平均值上-->过度闲置

为了保证HDFS数据安全性,数据块移动策略如下:

  1. 源DataNode的存储类型和目的DataNode的存储类型一致;
  2. 该block的副本未被安排;
  3. 目的DataNode不包含同样的副本;
  4. 移动之后该机架上的block不会减少;

根据角色配对以及移动策略,Balancer数据均衡流程为:

  1. 与NameNode交互,获取DataNode磁盘使用情况;
  2. 根据数据分布情况对DataNode进行角色划分并配对;
  3. 根据移动策略从源DataNode移动block到目标DataNode,并删除源DataNode上的block;
  4. 获取移动结果,并继续移动其他数据块,直到没有数据可以移动或者HDFS集群以及达到了平衡的标准为止,然后向NameNode提交更新后的DataNode信息;

当触发下面的条件时,Balancer会自动退出:

  1. 集群已达到均衡状态;
  2. 没有block能被移动;
  3. 连续5次(参数:idleiterations) 迭代移动没有任何一个block被移动;
  4. 当与NameNode交互时出现了IOException;
  5. 另一个Balancer进程在运行中。

读写原理

读原理

客户端向HDFS发送读取文件的请求完整流程如下:

  1. 客户端向NN提交读请求;
  2. NN进行权限检查、获取文件块列表:{blk_a_1: dn1,dn2,dn4 ;blk_a_2: dn2,dn3,dn4}
  3. NN根据机架感知将距离客户端最近的文件块所在的DN列表返回给客户端:{blk_a_1:dn1, blk_a_2:dn2}
  4. 客户端和每个block所在的DN建立管道;
  5. 客户端读取数据,以数据包packet(64k)进行传输;
  6. 客户端将接收到的block合并为一个完整的文件;

NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode 都会返回含有该 block 副本的 DataNode 地址; 这些返回的 DN 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构内距离Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后;以此来提升网络传输的效率。

客户端选取排序靠前的 DataNode 来读取 block,如果客户端本身就是DataNode,那么将从本地直接获取数据(短路读取)。

每读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该block 副本的DataNode 继续读。

写原理

客户端向HDFS发送上传文件的请求完整流程如下:

  1. 客户端向NameNode提交写请求;
  2. NN进行权限检查、判断是否满足写条件;
  3. NN返回信息:可以上传;并将写操作记录在edits日志内。
  4. 客户端根据HDFS的块策略将文件切分为n个block文件块;
  5. 请求上传第一个文件块blk_a_1;
  6. 根据DN上的block信息和机架感知,选出可以上传的DN列表:(dn1,dn2,dn4);
  7. NN返回可上传的DN列表(dn1,dn2,dn4);
  8. 客户端和DN建立数据传输管道,上传的DN之间也建立管道;
  9. 客户端向DN以数据包packet(64k)传递数据,dn1收到一个packet会传给dn2,dn2收到会传给dn4,每传一个packet会放入一个应答队列等待应答;
  10. DN将收到的packet数据包进行缓存;
  11. 在管道的反方向上, DN逐个发送 ack(命令正确应答), 最终由管道中第一个DN节点dn1将ack发送给客户端;
  12. 当文件块block的packet传输完成则将缓存的临时文件放置在指定的HDFS上传路径;
  13. 继续上传其余的block文件块;
  14. 所有block上传完毕后返回完成信号给NN;

删除恢复机制

当从HDFS中删除某个文件时,这个文件并不会立刻从HDFS中删除,而是将这个文件重命名并转移到回收站 /trash目录,只要这个文件还在/trash目录下,该文件就可以迅速被恢复。回收站的位置在HDFS上的/user/$USER/.Trash/Current/ 

文件在/trash目录中存放的时间默认为6个小时,当超过这个时间时,NN就会将文件从名称空间中删除;

删除文件会使得该文件相关的数据块被释放;注意:从用户删除文件到HDFS空闲空间的增加之间会有一定时间的延迟;

通过修改hdfs-site.xml文件中下面的配置可以修改回收站过期的时间:

#时间单位是秒
<property>
    <name>fs.trash.interval</name>
    <value>1440</value>
</property>

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

从GFS到HDFS:分布式文件系统核心原理图解+手写简易版Demo 本文深入解析了从GFS到HDFS的分布式文件系统核心原理,通过Python代码实现关键机制,包括数据分块、节点通信和容错策略。文章还提供了HDFS性能调优实战技巧,并探讨了云计算时代分布式存储的新范式,如对象存储和存储计算分离架构。 阅读详情

相关推荐

分布式文件系统核心原理与HDFS生产实践全解析

大数据处理的第一步,往往不是计算,而是存储。面对海量数据,单机磁盘在吞吐量和可靠性上都存在天然瓶颈,分布式文件系统由此成为大数据技术栈中不可替代的底座。它以元数据与数据分离为核心架构,通过数据分块、多副本、心跳检测与自动重新复制等机制,在普通服务器之上构建出高容错、高吞吐的统一存储视图。这种设计不仅支撑了数据本地性调度,让计算任务尽可能就近读取数据,还使系统能坦然接受节点故障成为常态。从离线日志分析、数据仓库建设,到遥感影像等海量小文件场景,分布式文件系统始终是数据工程落地的基础设施。HDFS 作为应用最广

weixin_29038537的博客 221

hdfs原理

简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统。 HDFS有很多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。 (用空间换安全) ② 运行在廉价的机器上。 ③ 适合大数据的处理。多大?多小?HDF...

raining_time的博客 1334

HDFS 与 MapReduce 的完美结合:大数据处理的核心技术

在当今这个信息爆炸的时代,数据量呈现出指数级的增长。传统的数据处理技术已经难以应对如此庞大的数据量,因此需要新的技术来高效地存储和处理这些大数据。本文的目的就是深入剖析 HDFS 与 MapReduce 这两项核心技术,了解它们是如何实现大数据的分布式存储和计算的,以及它们是如何完美结合的。我们将涵盖这两项技术的原理、操作步骤、实际应用等多个方面。本文首先会介绍 HDFS 和 MapReduce 的核心概念,包括它们的定义、特点等;然后详细讲解它们的算法原理和具体操作步骤;

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 642

HDFS 原理 详解

HDFS重要特性--主从架构这是HDFS是Hadoop 核心重要的组件之一 , 解决大数据计算中的海量存储数据下面是HDFS原理 架构 以及模块组成提示:以下是本篇文章正文内容,下面案例可供参考传统情况零拷贝技术:DMA 将一个内存区从一个设备复制到另一个, 当中央处理器初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成1 HDFS是Hadoop Distribute File System 的简称,意为:Hadoop分布式文件系统。

m0_66882197的博客 1690

分布式文件系统HDFS原理与操作

分布式文件系统HDFS原理与操作,分布式文件系统HDFS原理与操作

F5 GTM DNS 实战指南:智能DNS的监控与健康检查机制

本文深入解析F5 BIG-IP GTM智能DNS的核心机制,重点阐述其监控与探针两大功能如何协同工作。监控器负责深度检查服务器应用健康,确保服务可用性;探针则实时测量网络路径质量,实现基于延迟的智能流量调度。文章通过实战配置步骤,指导如何构建逻辑架构、建立iQuery通信、配置业务级健康检查及探针,从而构建高可用、高性能的全局负载均衡解决方案。

weixin_29240711的博客 468

Hadoop分布式文件系统HDFS的工作原理详述

Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统。1.分布式文件系统 多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统。 分布

周兆熊的专栏 1万+

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 344

HDFS分布式文件系统架构原理详解

目录一、HDFS的优缺点(1)优点(2)缺点二、HDFS架构原理(1)NameNode详解(2)Secondary NameNode详解(3)HDFS NameSpace详解(4)DataNode详解(5)Client详解(6)HDFS通信协议(7)HDFS的安全模式三、HDFS文件读写的解析(1)文件读取流程(2)文件写入流程四、副本机制 HDFS(Hadoop Distributed File System)是Hadoop核心组成之一,是分布式计算中数据存储管理的基础,被设计成适合运行在通用硬件上的分布

蔡政洁的博客 2376

电流采样(分流器与霍尔传感器)

霍尔效应霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数。简单原理如图1所示,半导体薄片两端通以控制电流I,垂直方向施加磁感应强度为B的匀强磁场,d为半导体材料的厚度,k为霍尔常数,它与半导体材质有关,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压,它们之间的关系为。霍尔元件。

weixin_48867130的博客 1万+

用友U8其中一个账套提示演示期已到期-修复方法

【事件始末】 一朋友求助,反馈使用的用友U8,很多年了! 突然发现其中账套2021年的一个账套打不开,提示演示期限已到期! 但是其他账套完全正常,可以打开,没有任何问题。 不管是还原老旧备份,还是重装软件问题依旧,无法自己解决。 客户查询报表结算账期,情况比较紧急,于是求助我们。 经过多次反复琢磨和烟酒,终于于晚上23点59分给弄了出来,也总是圆满解决问题了。 【问题分析】 该用户打的是 U82X免狗补丁,估计是该补丁文件设置了 最大有效期,补丁到期了导致的。 也有可能是程序...

u010431289的博客 2万+

分布式文件系统与HDFS核心原理:从架构到实战

分布式文件系统是支撑大数据存储与计算的基础设施,它将海量数据分散到普通服务器集群中,通过元数据管理与副本机制实现可靠存取。HDFS作为最具代表性的实现,采用主从架构,由NameNode负责文件系统元数据,DataNode实际存储数据块,并通过机架感知、副本自愈等策略保障容错性。理解HDFS的读写流程、块大小调优、数据本地性调度,对构建高效的大数据集群至关重要。无论是离线数仓、实时计算还是数据湖底座,分布式文件系统都在其中扮演关键角色。从工程实践的角度,系统梳理HDFS核心设计原理与部署调优经验,帮助开发者掌

weixin_42533751的博客 307

物联网 Mixly-智能楼道灯

一、实验目的及要求 熟悉声音及人体红外传感器用法。 二、实验原理与内容 1.使用声音传感器实现声控灯功能。 2.使用人体红外传感器实现人体检测控制灯功能。 三、实验软硬件环境 硬件:Arduino、LED灯、声音传感器、人体红外传感器 软件:Mixly IDE 四、实验过程(实验步骤、记录、数据、分析) 核心代码截图 声控灯: 人体红外检测灯: 3.实验效果图: (1)、声控灯总线连接: (1)、声控灯声音大于一某个值时灯亮,经过2秒后灯灭: (3)、人体红外检测灯连接总线: (4)、人体红外

qq_43430810的博客 1916

深入浅出HDFS:分布式文件系统核心原理与实践解析

HDFS作为大数据生态的核心存储组件,以其高吞吐量、高容错性、可扩展性的优势,成为海量数据存储的首选方案。其核心架构采用主从模式,通过NameNode管理元数据、DataNode存储实际数据,配合副本机制、机架感知、数据块校验等关键机制,确保数据的安全可靠和高效访问。理解HDFS的核心原理(如读写流程、副本机制)是掌握大数据技术的基础,而在实际应用中,需根据业务场景合理配置集群参数(如数据块大小、副本数),优化小文件问题,部署高可用架构,以充分发挥HDFS的性能优势。

qq_43402143的博客 713

手把手教你用ADS和CGH40010F模型搭建Doherty功放仿真原型(附工程文件)

本文详细介绍了如何使用ADS软件和CGH40010F GaN器件模型搭建Doherty功放仿真原型,涵盖工程准备、关键电路模块实现、效率优化技巧及常见问题排查。通过实战指南和效率优化技巧,帮助工程师快速掌握Doherty功放设计,提升5G基站和广播发射系统的功率放大器性能。

weixin_26897585的博客 344

Codex API 直接集成指南:告别中转代理,构建稳定高效的 AI 应用

在 AI 应用开发中,API 集成是连接模型能力与业务逻辑的核心环节。其基本原理是通过 HTTP 协议,按照服务提供商定义的规范发送请求并解析响应,实现远程调用。标准化的 API 设计确保了跨平台和跨语言的互操作性,其技术价值在于提供了稳定、可控且可扩展的服务接入方式,是构建企业级智能应用的基础。在实际应用场景中,开发者常需集成如 Codex 这类聚合了多种大语言模型的平台,以调用诸如 DeepSeek 等先进模型。然而,部分开发者仍依赖过时的第三方中转代理工具,这不仅引入了单点故障和版本锁定的风险,还可能

weixin_28224217的博客 337

Apache Hadoop HDFS深度剖析:分布式文件系统核心原理与架构详解

Apache Hadoop分布式文件系统(HDFS)是专为处理大规模数据集而设计的分布式存储系统,作为Apache Hadoop生态系统的核心组件,它提供了高容错性、高吞吐量的数据存储解决方案。本文将深入解析HDFS的核心架构设计原理,帮助您全面理解这一强大的分布式文件系统。 ## 🏗️ HDFS架构设计概述 HDFS采用主从架构(Master-Slave Architecture),由三个

gitblog_00173的博客 898

2026.3.28:langgraph使用mysql进行持久化会话存储(短期记忆和长期记忆)

本文介绍了如何使用MySQL持久化存储LangGraph会话数据(短期和长期记忆)。首先安装必要的依赖包,然后通过Python代码实现将短期记忆写入MySQL数据库。主要步骤包括:1) 建立MySQL连接;2) 创建代理(agent)并配置检查点(checkpointer)和存储(store);3) 实现工具函数如计算器和天气查询;4) 使用中间件跟踪工具和模型调用次数。最后展示了如何从MySQL读取短期记忆数据,完成会话的持久化存储和检索功能。代码示例包含完整的实现细节,包括状态管理、消息处理和数据库操作

拥抱具身智能,昇腾Ascend C 734

HDFS核心原理与实践:从分布式文件系统基础到实战操作全解析

分布式文件系统作为大数据存储的基石,其核心设计理念在于通过分布式架构解决海量数据的存储与访问问题。HDFS(Hadoop Distributed File System)作为其典型代表,基于主从架构和分块存储机制,实现了高容错性和高吞吐量的数据访问能力。在工程实践中,理解HDFS的环境配置、Shell命令原理及参数调优,对于构建可靠的数据存储解决方案至关重要。例如,通过`hdfs dfsadmin -report`探查集群状态,结合`hdfs fsck`验证数据块分布,能够有效应对DataNode故障和副本

weixin_29038345的博客 7

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

从GFS到HDFS:手把手教你理解Hadoop分布式文件系统的核心设计(附机架感知原理详解)

本文深入解析了Hadoop分布式文件系统(HDFS)的设计哲学与实战优化,从GFS到HDFS的技术演进,重点探讨了HDFS的核心机制如数据分块、多副本与机架感知原理。通过详细的配置示例和优化建议,帮助开发者掌握大规模数据存储与管理的关键技术,提升分布式系统的可靠性和性能。

weixin_30321709的博客 365

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

HDFS写入读取原理详解

前言 HDFS(分布式文件系统)是当下大数据处理组件Hadoop的重要组成部分,用来处理海量数据的存储问题。 企业面试常常会询问些原理方面的知识,只是知道如何操作是不行的,毕竟原理是你学会工具调优的基础,毕竟到企业级开发,不能像在学校demo级开发那么奢侈,能省则省,用最小的资源,获得性能最优是关键。 HDFS的三大角色 在HDFS中,关键的三大角色为:NameNode(命名节点)、DataNode(数据节点)、Client(客户端) 我们来看看上面的这张图,我们根据这个图来简单描述下这三个元素的作用。

weixin_44018540的博客 635

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDFS原理

2、客户端拿到数据存放节点位置信息后,会和对应的DataNode节点进行直接交互,进行数据写入,由于数据块具有副本replication,在数据写入时采用的方式是先写第一个副本,写完后再从第一个副本的节点将数据拷贝到其它节点,依次类推,直到所有副本都写完了,才算数据成功写入到HDFS上,副本写入采用的是串行,每个副本写的过程中都会逐级向上反馈写进度,以保证实时知道副本的写入情况;1、大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。

AlbenXie的博客 103

Hadoop三大核心(HDFS,YARN,MapReduce)

Hadoop三大核心 1.HDFS HDFS是分布式文件系统,有高容错性的特点,可以部署在价格低廉的服务器上,主要包含namenode和datanode。 Namenode是hdfs中文件目录和文件分配管理者,它保存着文件名和数据块的映射管理,数据块和datanode列表的映射关系。 其中文件名和数据块的关系保存在磁盘上,但是namenode上不保存数据块和datanode列表的关系,该列表是通过...

weixin_44161678的博客 2443

HDFS1.0小记

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33961829的博客 211

Hadoop学习之HDFS

     Hadoop框架的两大核心部件是HDFS和MapReduce。HDFS是 Hadoop Distributed File System的缩写,是Java实现的、分布式的、可横向扩展的文件系统。存储的物理资源不一定在本地存放,可以通过网络与其他节点相连。HDFS的块大小默认为64字节。如果数据没有达到块大小则不占用实际磁盘空间。HDFS分为namenode和datanode两种节点。nam...

灥灥的搬砖旅程 170
上一篇: 离线安装部署CDH6.3.2集群
下一篇: YARN查看和切换ResourceManager的状态
王义凯_Rick
王义凯_Rick 领域专家: 大数据技术领域 领域专家: 大数据技术领域
博客等级 码龄14年 858粉丝 162原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值