【Hadoop】HDFS读写流程和客户端命令使用

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁

🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁

感谢点赞和关注 ,每天进步一点点!加油!

目录

一、HDFS产出背景及定义

1.1.HDFS产生背景

1.2.HDFS简介

1.3.HDFS的优缺点

1、优点

2、缺点

二、HDFS的特点

三、HDFS组成架构

1、Client:客户端

2、NameNode

3、 DataNode

4、 Secondary NameNode

四、HDFS读写过程

4.1.写入流程

4.2.读取流程

五、HDFS客户端常用命令

5.1.HDFS客户端访问命令使用

5.2.HDFS客户端管理命令使用

1、报告文件系统的基本信息和统计信息

2、fs_image 文件导出解析到本地

3、安全模式

4、文件健康检查和租约释放

5、har 归档

5.3. HDFS 命令总体划分


一、HDFS产出背景及定义


1.1.HDFS产生背景


随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。

1.2.HDFS简介


HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

HDFS的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变

1.3.HDFS的优缺点


1、优点

  • 高容错性,自动保存 默认的副本数,某个副本或者机器宕机都会完成自动复制,使副本数保持在设置的个数;
  • 适合处理大数据,能够存储和处理TB,甚至 PB级别的数据量;
  • 可构建在廉价机器上,使用普通服务器便可建设大数据平台。

2、缺点

  • 不适合低延时数据访问, 我们一般采用分布式的HBase 作为存储;
  • 无法高效对大量小文件进行存储

         a.大量 小文件会占用 NameNode 大量内存来存储文件索引信息

         b.小文件增加访问和写入寻址时间,大量小文件的存在无论是读取或者写入数

据 都会都集群造成很大的压力

  • 不支持并发写入、数据修改

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

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


二、HDFS的特点


高容错性:一个HDFS集群会包含非常多节点,HDFS将文件分块(Block)存储,并且会自动保存多个副本到不同的机器节点上以保证数据的安全,而且HDFS可以检测故障并且从故障中快速恢复。

高吞吐率:与一般文件系统的访问低延迟不同,HDFS的重点是存储和处理大量的数据,支持数据处理规模是GB、TB、甚至是PB的级别。因此,相比较用户交互式程序,HDFS更加适用批处理的应用程序。

一次写入多次读取模型:一个文件只支持单线程的文件写入,HDFS假定一个文件一旦被创建,写入完成之后除了追加和截断就不需要更改。这种设置简化了数据一致性的问题,从而也提高了数据访问的吞吐率,同时也不支持文件的随机修改。

大数据集HDFS 中的典型文件大小为 GB 到 TB,对于大批量小文件HDFS无法做到高效存储,存储和检索会消耗NameNode内存。

可移植性HDFS是由Java语言构建,任何支持Java的机器,都可以运行HDFS,因此HDFS可以轻松地从一个平台移植到另一个平台。


三、HDFS组成架构


1、Client:客户端

通过Client来访问文件系统,然后由Client与NameNode和DataNode进行通信。Client对外作为文件系统的接口

  • 文件切分,上传HDFS文件的时候,Client将文件切分成一个一个 Block 然后进行上传;
  • 负责与 NameNode 和 DataNode 交互,获取文件的位置信息;
  • Client 提供一些命令来管理HDFS,比如:banlance 数据均衡、 fsimage 元数据获取和解析、NameNode 格式化、checkpoint 等;
  • Clinet 提供一些命令来访问HDFS,比如:HDFS文件的增删改查

2、NameNode

管理者。 用于存储和管理文件元数据、维护文件系统的目录树形结构,记录写入的每个数据块(Block)与其归属文件的对应关系。

  • 管理文件系统命名空间;
  • 配置副本策略,默认3副本策略;
  • 管理数据块的映射信息(Blockmap);
  • 处理客户端的读写请求。

3、 DataNode

DataNode会通过心跳和NameNode保持通信,处理实际的操作。

  • 存储实际的数据块;
  • 执行数据块的读写操作。

4、 Secondary NameNode

Secondary NameNode的作用是消费EditsLog,定期地合并FsImage和EditsLog,生成新的FsImage文件,并推送给NameNode,降低了NameNode的压力。 在紧急情况下,可辅助恢复NameNode。

SecondaryNameNode机制:

  • SecondaryNameNode不是NameNode挂了的备用节点
  • 主要功能只是定期合并日志, 防止日志文件变得过大
  • 合并过后的镜像文件在NameNode上也会保存一份

SecondaryNameNode工作过程:

  1. SNN向NameNode发起同步请求, 此时NameNode会将日志都写到新的日志当中;
  2. SNN向NameNode下载镜像文件和日志文件;
  3. SNN开始Merge这两份文件并生成新的镜像文件;
  4. SNN向NameNode传回新的镜像文件;
  5. NameNode文件将新的镜像文件和日志文件替换成当前正在使用的文件

四、HDFS读写过程


4.1.写入流程


  1. client向namenode通信,请求上传文件
  2. namenode判断是否可上传: namenode检查用户是否有上传的权限、目标文件是否已存在、父目录是否存在
  3. 文件切分:client将文件切分成0~128M大小的block块(逻辑切分)
  4. client请求block块的存储位置
  5. namenode返回datanode地址dn1、dn2、dn3(默认三副本地址)
  6. client通过FSDataOutputStream模块请求dn1上传数据,建立连接管道(本质上是一个 RPC 调用,建立 pipeline)
  7. 当dn1收到请求后会继续调用dn2, dn2调用dn3,将整个通信管道建立完成,然后逐级返回client,即图中的ack校验
  8. client开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位(默认64k),dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答
  9. 当一个Block传输完成之后,client再次请求NameNode上传第二个Block的服务器(重复执行4-8步)
  10. 传输完毕之后,客户端关闭流资源,并且会告诉hdfs数据传输完毕,然后hdfs收到传输完毕就恢复元数据

4.2.读取流程


  1. Client 向 NameNode 发起 RPC 请求,来确定请求文件 block 所在的位置;
  2. NameNode 会视情况返回文件的部分或者全部 block 列表,对于每个 block,NameNode 都会返回含有该 block 副本的 DataNode 地址;
  3. 这些返回的 DataNode 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离Client近的排靠前;心跳机制中超时汇报的 DataNode 状态为 STALE,这样的排靠后;
  4. Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是 DataNode,那么将从本地直接获取数据;底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕;
  5. 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向 NameNode 获取下一批的 block 列表;
  6. 读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的 DataNode 继续读。
  7. read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是返回 Client 请求包含块的 DataNode 地址,并不是返回请求块的数据;
  8. 最终读取来所有的 block 会合并成一个完整的最终文件。(摘录博友)


五、HDFS客户端常用命令


5.1.HDFS客户端访问命令使用


对于客户端shell命令的具体使用可以查看 help 帮助, 熟悉Linux 常用命令的人可能一看这些命令就会有种很熟悉对的感觉。

[winner_spark@hdp105 root]$ hdfs dfs -help

如下为常用的命令:

# 创建文件夹
hdfs dfs -mkdir -p   /tmp/kangll # 上传文件 test.sh 到HDFS 
hdfs dfs -put   test.sh   /tmp/kangll# 查看文件
hdfs dfs -ls  /tmp/kangll# 下载到本地 /tmp 文件夹
hdfs dfs -get   test.sh   /tmp/kangll  /tmp# 查看test.sh 文件内容 -less 或者 -more也可以
hdfs dfs -cat    /tmp/kangll/test.sh# 查看 文件或者文件夹 大小
hdfs dfs -du  -h /tmp/kangll#判断当前路径是否存在
hadoop fs -test -d  /tmp/kangll# 文件权限修改
hdfs dfs -chmod 775  /tmp/kangll/test.sh
hdfs dfs -chown  winner_spark:hadoop  /tmp/kangll/test.sh# 删除test.sh 删除后的文件会先进入 垃圾桶
hdfs dfs -rm -r  /tmp/kangll/test.sh# -cp:从HDFS的一个路径拷贝到HDFS的另一个路径
hdfs dfs -cp  /tmp/kangll/test.sh  /tmp/# 移动
hdfs dfs -mv  /tmp/kangll/test.sh  /tmp/

5.2.HDFS客户端管理命令使用


如下介绍几个常用的管理命令:

1、报告文件系统的基本信息和统计信息

hdfs dfsadmin -report

执行部分结果如下:

[hdfs@hdp105 root]$ hdfs dfsadmin -report 
Configured Capacity: 2253195592704 (2.05 TB)
Present Capacity: 2103420218371 (1.91 TB)
DFS Remaining: 1194928602115 (1.09 TB)
DFS Used: 908491616256 (846.10 GB)
DFS Used%: 43.19%
Replicated Blocks:Under replicated blocks: 172Blocks with corrupt replicas: 0Missing blocks: 0Missing blocks (with replication factor 1): 0Low redundancy blocks with highest priority to recover: 0Pending deletion blocks: 0
Erasure Coded Block Groups: Low redundancy block groups: 0Block groups with corrupt internal blocks: 0Missing block groups: 0Low redundancy blocks with highest priority to recover: 0Pending deletion blocks: 0-------------------------------------------------
Live datanodes (3):  # 测试环境 3个datanodeName: 192.168.2.152:1019 (hdp103)
Hostname: hdp103
Decommission Status : Normal        # 节点状态
Configured Capacity: 751065197568 (699.48 GB)
DFS Used: 302833778688 (282.04 GB)
Non DFS Used: 88004692992 (81.96 GB)
DFS Remaining: 359240115201 (334.57 GB)
DFS Used%: 40.32%
DFS Remaining%: 47.83%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 20
Last contact: Thu Aug 24 14:13:48 CST 2023
Last Block Report: Thu Aug 24 12:32:27 CST 2023
Num of Blocks: 38238

2、fs_image 文件导出解析到本地

获取Namenode元数据fsImage镜像文件,并且 解析为CSV文件。

# 获取 fsimage, 获取到的数据到二进制文件
hdfs dfsadmin -fetchImage $BASEDIR/data
# 解析,数据解析为 csv 文件 , -o 为输出路径, -p输出文件格式     
hdfs oiv -i $BASEDIR/data/fsimage_*  -o $BASEDIR/fs_distribution/fs_deli   -p Delimited -delimiter ","#可以 查看命令参数解释 hdfs oiv -i  -help

解析结果

包含的信息有:路径,副本数,日期,权限 ,所属用户和组等信息。

3、安全模式

HDFS中,安全模式是一种保护机制,它可以在NameNode节点出现故障或异常情况时,防止数据丢失或损坏。在安全模式下,HDFS集群只允许读取数据,禁止写入数据,同时也禁止执行元数据修改操作。这意味着,当NameNode节点处于安全模式下时,HDFS集群的数据将处于只读状态,直到NameNode节点恢复正常并退出安全模式为止。

 hdfs dfsadmin [-safemode enter | leave | get | wait | forceExit]

hdfs dfsadmin 的其他命令:

命令选项

描述

-report

报告文件系统的基本信息和统计信息。

-safemode enter | leave | get | wait

安全模式维护命令。安全模式是Namenode的一个状态,这种状态下,Namenode
1. 不接受对名字空间的更改(只读)
2. 不复制或删除块
Namenode会在启动时自动进入安全模式,当配置的块最小百分比数满足最小的副本数条件时,会自动离开安全模式。安全模式可以手动进入,但是这样的话也必须手动关闭安全模式。

-refreshNodes

重新读取hosts和exclude文件,更新允许连到Namenode的或那些需要退出或入编的Datanode的集合。

-finalizeUpgrade

终结HDFS的升级操作。Datanode删除前一个版本的工作目录,之后Namenode也这样做。这个操作完结整个升级过程。

-upgradeProgress status | details | force

请求当前系统的升级状态,状态的细节,或者强制升级操作进行。

-metasave filename

保存Namenode的主要数据结构到hadoop.log.dir属性指定的目录下的<filename>文件。对于下面的每一项,<filename>中都会一行内容与之对应
1. Namenode收到的Datanode的心跳信号
2. 等待被复制的块
3. 正在被复制的块
4. 等待被删除的块

-setQuota <quota> <dirname>...<dirname>

为每个目录 <dirname>设定配额<quota>。目录配额是一个长整型整数,强制限定了目录树下的名字个数。
命令会在这个目录上工作良好,以下情况会报错:
1. N不是一个正整数,或者
2. 用户不是管理员,或者
3. 这个目录不存在或是文件,或者
4. 目录会马上超出新设定的配额。

-clrQuota <dirname>...<dirname>

为每一个目录<dirname>清除配额设定。
命令会在这个目录上工作良好,以下情况会报错:
1. 这个目录不存在或是文件,或者
2. 用户不是管理员。
如果目录原来没有配额不会报错。

-help [cmd]

显示给定命令的帮助信息,如果没有给定命令,则显示所有命令的帮助信息。
 

4、文件健康检查和租约释放

hdfs文件操作异常没有正确关闭连接,造成租约没有释放,而程序可以读取这个文件时获取不到租约就会报错。所以需要释放租约, -retries 3 表示重试三次。


# 健康检查
hdfs fsck    /tmp/kangll/test.sh# hdfs文件操作异常没有正确关闭连接,造成租约没有方式 需要释放租约, -retries 3 重试三次
hdfs debug recoverLease -path $LINE -retries 3 

执行结果

hdfs fsck 的其他命令:

命令选项

描述

-move

把损坏的文件移动到/lost+found

-delete

直接删除损坏的文件

-files

打印被检测的文件

-openforwrite

打印正在被写入的文件,可能是文件写入关闭异常

-includeSnapshots

检测的文件包括系统snapShot快照目录下的

list-corruptfileblocks

打印出丢失的块和它们所属的文件列表

-blocks

打印block 信息

-locations

打印 block 的位置,即在哪个节点

-racks

打印block 所在的 rack

-storagepolicies

打印 block 存储的策略信息

-blockId

打印 block所属块的位置信息

5、har 归档

Hadoop存档是特殊格式的存档。Hadoop存档映射到文件系统目录。Hadoop归档文件总是带有* .har扩展名

  • Hadoop存档目录包含元数据(采用_index和_masterindex形式)
  • 数据部分data(part- *)文件。
  • _index文件包含归档文件的名称和部分文件中的位置。
hadoop archive -archiveName $fileName -p $src $subSrc $dest

归档启动MR任务执行完成后: 

har 归档虽然对 文件进行了归档 减少了 block 数量,但是har 归档并没有压缩数据。

5.3. HDFS 命令总体划分


Admin Commands:

命令

描述

cacheadmin

配置 HDFS 缓存

crypto

配置HDFS加密区

debug

执行Debug Admin命令执行HDFS的Debug命令

dfsadmin

运行DFS管理客户端

dfsrouteradmin

管理基于路由的联邦

ec

运行HDFS ErasureCoding 客户端

fsck

运行DFS文件系统检查工具

haadmin

运行DFS HA 管理客户端

jmxget

从NameNode或DataNode获取JMX导出的值

oev

an edits file 应用于 离线 edits viewer

oiv

an fsimage 应用于离线 fsimage viewer

oiv_legacy

apply the offline fsimage viewer to a legacy fsimage

storagepolicies

list/get/set block storage policies

Client Commands:

命令

描述

classpath

打印获取hadoop jar和所需库所需的类路径

dfs

在文件系统上运行filesystem命令

envvars

显示计算的Hadoop环境变量

fetchdt

从NameNode获取一个委托令牌

getconf

从配置中获取配置值

groups

获取用户所属的组

lsSnapshottableDir

列出当前用户拥有的所有可快照目录

Daemon Commands:

命令

描述

balancer

运行集群平衡实用程序

datanode

运行DFS datanode

dfsrouter

运行DFS路由器

diskbalancer

将数据均匀地分布在给定节点的硬盘上

httpfs

运行HttpFS server, HDFS的HTTP网关

journalnode

运行DFS journalnode

mover

运行实用程序以跨存储类型移动块副本

namenode

运行DFS namenode

nfs3

运行NFS v3网关

portmap

运行portmap服务

对于命令的具体可以可以使用 help 帮助 查看具体使用,我们平时使用做多的就是 hdfs dfs :

[winner_spark@hdp105 root]$ hdfs dfs -help
Usage: hadoop fs [generic options][-appendToFile <localsrc> ... <dst>][-cat [-ignoreCrc] <src> ...][-checksum <src> ...][-chgrp [-R] GROUP PATH...][-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...][-chown [-R] [OWNER][:[GROUP]] PATH...][-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> ... <dst>][-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>][-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...][-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>][-createSnapshot <snapshotDir> [<snapshotName>]][-deleteSnapshot <snapshotDir> <snapshotName>][-df [-h] [<path> ...]][-du [-s] [-h] [-v] [-x] <path> ...][-expunge][-find <path> ... <expression> ...][-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>][-getfacl [-R] <path>][-getfattr [-R] {-n name | -d} [-e en] <path>][-getmerge [-nl] [-skip-empty-file] <src> <localdst>][-head <file>][-help [cmd ...]][-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]][-mkdir [-p] <path> ...][-moveFromLocal <localsrc> ... <dst>][-moveToLocal <src> <localdst>][-mv <src> ... <dst>][-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>][-renameSnapshot <snapshotDir> <oldName> <newName>][-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...][-rmdir [--ignore-fail-on-non-empty] <dir> ...][-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]][-setfattr {-n name [-v value] | -x name} <path>][-setrep [-R] [-w] <rep> <path> ...][-stat [format] <path> ...][-tail [-f] <file>][-test -[defsz] <path>][-text [-ignoreCrc] <src> ...][-touch [-a] [-m] [-t TIMESTAMP ] [-c] <path> ...][-touchz <path> ...][-truncate [-w] <length> <path> ...][-usage [cmd ...]]

 ————————————————

参考链接:Hadoop --- HDFS介绍_hadoop hdfs_三水写代码的博客-CSDN博客

参考链接:Hadoop之HDFS简介_hadoop的hdfs_数新网络的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JVM 内存结构丨栈】

栈 -- 虚拟机栈 简介定义压栈出栈局部变量表操作数栈方法调用特点作用 本地方法栈&#xff08;C栈&#xff09;定义栈帧变化作用对比 主页传送门&#xff1a;&#x1f4c0; 传送 简介 栈是用于执行线程的内存区域&#xff0c;它包括局部变量和操作数栈。 Java 虚拟机栈会为每…

Multisim软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Multisim软件是一款电路仿真和设计软件&#xff0c;由美国国家仪器公司&#xff08;National Instruments&#xff09;开发。它提供了一个交互式的图形界面&#xff0c;使用户能够轻松地构建和仿真电路。以下是Multisim软件的详…

Pytorch06-复杂模型构建

https://github.com/ExpressGit/Pytorch_Study_Demo 1、PyTorch 复杂模型构建 1、模型截图2、模型部件实现3、模型组装 2、模型定义 2.1、Sequential 1、当模型的前向计算为简单串联各个层的计算时&#xff0c; Sequential 类可以通过更加简单的方式定义模型。2、可以接收…

批量记录当天收支明细,自动备份财务管理无忧!

在现代繁忙的生活中&#xff0c;财务管理变得越来越重要。我们为你提供了一款电脑高效记账专家&#xff0c;让你能够快速批量记录当天的收支明细&#xff0c;并设置自动备份&#xff0c;让财务管理变得更轻松 首先&#xff0c;第一步进入晨曦记账本主页面&#xff0c;点击上方功…

磁盘阵列/视频集中存储/安防监控视频智能分析平台新功能:人员聚集

人工智能技术已经越来越多地融入到视频监控领域中&#xff0c;近期我们也发布了基于AI智能视频云存储/安防监控视频AI智能分析平台的众多新功能&#xff0c;该平台内置多种AI算法&#xff0c;可对实时视频中的人脸、人体、车辆、物体等进行检测、跟踪与抓拍&#xff0c;支持口罩…

[MyBatis系列④]核心配置文件

目录 1、简介 2、DTD 3、typeHandlers 3.1、默认类型处理器 3.2、自定义类型处理器 4、plugins ⭐MyBatis系列①&#xff1a;增删改查 ⭐MyBatis系列②&#xff1a;两种Dao开发方式 ⭐MyBatis系列③&#xff1a;动态SQL 1、简介 MyBatis的核心配置文件&#xff08;通常命…

三极管NPN、PNP的区别及简单应用

目录 一、NPN、PNP三极管的概念 二、NPN、PNP三极管的区别 三、三极管NPN、PNP的简单应用 一、NPN、PNP三极管的概念 NPN型三极管&#xff1a; 由两块N型半导体和一块P型半导体组成&#xff0c;P型半导体在中间&#xff0c;两块N型半导体在两侧。 三极管是电子电路中最重要的…

一、Kafka概述

目录 1.1 定义1.2 消息队列1、传统消息队列的应用场景2、消息队列的两种模式 1.3 Kafka的基础架构 1.1 定义 Kafka传 统定义&#xff1a;Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 K…

如何搭建智能家居系统并通过内网穿透实现远程控制家中设备

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 前言 Home Assistant&…

重要通知:9月1日起,微信小程序须完成备案后才可上架

微信官方通知 近日&#xff0c;工信部发布了《工业和信息化部关于开展移动互联网应用程序备案工作的通知》&#xff0c;8月9日&#xff0c;微信公众平台也发布了“关于开展微信小程序备案的通知”&#xff1a; 一、备案必要性 在中华人民共和国境内从事互联网信息服务的移动互…

机器学习深度学习——NLP实战(自然语言推断——注意力机制实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——NLP实战&#xff08;自然语言推断——数据集&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&…

自制编程语言基于c语言实验记录之二:总结三四五六七章之编译类定义

博客前言 由于本书第六七章是编译脚本语言sparrow生成指令、虚拟机运行指令的核心章节&#xff0c;需要连在一起理解&#xff0c;同时三四五章都是六七章的铺垫&#xff0c;所以专门写多篇博客来记录六七章。 同时本书相比《操作系统真相还原》缺少具体例子很难梳理项目整体代…