当前位置: 首页 > news >正文

【Hadoop 01】简介

目录

1 Hadoop 简介

2 下载并配置Hadoop

2.1 修改/etc/profile

2.2 修改hadoop-env.sh

2.3 修改core-site.xml

2.4 修改hdfs-site.xml

2.5 修改mapred-site.xml

2.6 修改yarn-site.xml

2.7 修改workers

2.8 修改start-dfs.sh、stop-dfs.sh

2.9 修改start-yarn.sh、stop-yarn.sh

2.10 启动集群

3 HDFS

3.1 HDFS常见shell操作

3.2 HDFS实操案例

3.3 HDFS体系结构

3.4 DataNode总结

3.5 NameNode总结

3.6 HDFS的回收站

 3.7 HDFS的安全模式

 3.8 案例:定时上传文件到HDFS

 3.9 HDFS的高可用(HA)

 3.10 HDFS的高扩展(Federation)

4 MapReduce

4.1 Map阶段

4.2 Redeuce阶段

4.3 MapRedeuce任务日志查看

4.4 Shuffle原理

4.5 Shuffle原理

4.6 InputSplit原理

4.7 RecodReader原理


1 Hadoop 简介

Hadoop适合海量数据分布式存储和分布式计算

Hadoop 3.x的细节优化:

  • Java改为支持8及以上
  • HDFS支持纠删码
  • HDFS支持多NameNode
  • MR任务级本地优化
  • 多重服务默认端口变更

hadoop-structure

Hadoop主要包含三大组件:HDFS+MapReduce+YARN

  • HDFS负责海量数据的分布式存储
  • MapReduce是一个计算模型,负责海量数据的分布式计算
  • YARN主要负责集群资源的管理和调度

2 下载并配置Hadoop

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub  >> ~/.ssh/authorized_keys

把 公钥 的内容 附加到 authorized_keys 里:

修改hostname

su root
hostname bigdata01

第一次设置密码

 更换主机名之后

2.1 修改/etc/profile

vim /etc/profile

添加

export HADOOP_HOME=/data/soft/hadoop-3.2.0
export PATH=.:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH

需要root权限

等号前后不能有空格


 

java的环境也要有

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

 source一下使得环境变量生效

source /etc/profile

检查一下环境是否装好

检查是否装好hadoop

以下文件在{HADOOP_HOME}/etc/hadoop/目录下

2.2 修改hadoop-env.sh

JAVA_HOME是ubuntu系统自带的 log日志是自己建立的

export JAVA_HOME=/home/gdan/data/jdk-8u131-linux-x64/jdk1.8.0_131
export HADOOP_LOG_DIR=/home/gdan/data/soft/hadoop_repo/logs/hadoop

(注意这里 等号附近 前往不能有空格)

2.3 修改core-site.xml

<configuration><property><name>fs.defaultFS</name><value>hdfs://bigdata01:9000</value></property><property><name>hadoop.tmp.dir</name><value>/data/hadoop_repo</value></property><property><name>hadoop.http.staticuser.user</name><value>root</value></property>
</configuration>

2.4 修改hdfs-site.xml

<configuration><property><name>dfs.replication</name><value>1</value></property>
</configuration>

2.5 修改mapred-site.xml

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

2.6 修改yarn-site.xml

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value></property>
</configuration>

2.7 修改workers

bigdata01

2.8 修改start-dfs.sh、stop-dfs.sh

在文件开头添加

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

2.9 修改start-yarn.sh、stop-yarn.sh

在文件开头添加

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

2.10 启动集群

第一次启动时,先初始化datanode,执行如下命令:

hdfs namenode -format

格式化操作

启动集群:(这里可能有一堆问题 例如openssh没有安装等等) 

访问界面

  • HDFS webui界面:http://bigdata01:9870
  • YARN webui界面:http://bigdata01:8088

 

3 HDFS

HDFS是一种允许文件通过网络在多台主机上分享的文件系统,可以让多台机器上的多个用户分享文件和存储空间

3.1 HDFS常见shell操作

hdfs dfs [-cmd] 
  • -ls:查询指定路径信息
  • -put:从本地上传文件
  • -cat:查看HDFS文件内容
  • -get:下载文件到本地
  • -mkdir [-p]:创建文件夹
  • -rm [-r]:删除文件/文件夹

3.2 HDFS实操案例

hdfs dfs -ls / | grep / | wc -l

 linux管道

在Linux中,管道(pipe)是一种特殊的机制,用于将一个命令的输出连接到另一个命令的输入。通过使用管道,可以将多个命令组合在一起,以实现更复杂的任务。

管道使用竖线符号(|)表示。它将前一个命令的输出作为后一个命令的输入。例如,下面的命令将列出当前目录中的文件,并将结果通过管道传递给grep命令进行过滤:

 ls | grep keyword

上述命令将列出包含关键字"keyword"的文件。

管道可以连接任意数量的命令。例如,下面的命令将列出当前目录中的文件,并按文件大小进行排序,然后显示前10个最大的文件:

ls -l | sort -nrk 5 | head -n 10

上述命令首先使用ls -l命令列出文件和目录的详细信息,然后将结果通过管道传递给sort命令,按第5列(文件大小)进行逆序排序,最后将结果通过管道传递给head命令,只显示前10行。

通过使用管道,可以将简单的命令组合成更复杂的操作,提高命令行的灵活性和效率。管道是Linux中强大而常用的功能之一。

 ls 指定/目录,grep 搜索 / 目录,wc显示行数

hdfs dfs -ls / | grep / | awk '{print $8,$5}'

| awk '{print $8,$5}': 这部分命令继续使用管道符号将前一个命令的输出传递给awk命令。awk '{print $8,$5}'用于打印每行的第8个字段(文件或目录名)和第5个字段(文件大小)。字段之间用空格分隔。

3.3 HDFS体系结构

  • HDFS支持主从结构,主节点称为NameNode,支持多个;从节点称为DataNode,支持多个
  • HDFS中还包含一个SecondaryNameNode进程

1. NameNode--大老板

  • NameNode是整个文件系统的管理节点
  • 它主要维护着整个文件系统的文件目录树,文件/目录的信息和每个文件对应的数据块列表,并且还负责接收用户的操作请求

2. SecondaryNameNode--秘书

  • 主要负责定期的把edits中的内容合并到fsimage中
  • 这个合并操作称为checkpoint,在合并的时候会对edits中的内容进行转换,生成新的内容保存到fsimage文件中
  • 注意:在NameNode的HA(高可用)架构中没有SecondaryNameNode进程,文件合并操作会由standby NameNode负责实现

3. DataNode--小二

  • 提供真实文件数据的存储服务
  • HDFS会按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block,HDFS默认Block大小是128MB
  • HDFS中,如果一个文件小于一个数据块的大小,那么并不会占用整个数据块的存储空间
  • Replication:多副本机制,HDFS默认副本数量为3
  • 通过dfs.replication属性控制

3.4 DataNode总结

注意:Block块存放在哪些DataNode上,只有DataNode自己知道,当集群启动的时候,DataNode会扫描自己节点上面的所有Block块信息,然后把节点和这个节点上的所有Block块信息告诉给NameNode。这个关系是每次重启集群都会动态加载的【这个其实就是集群为什么数据越多,启动越慢的原因】

3.5 NameNode总结

NameNode维护了两份关系:

  • 第一份关系:File与Block list的关系,对应的关系信息存储在fsimage和edits文件中(当NameNode启动的时候会把文件中的元数据信息加载到内存中)
  • 第二份关系:Datanode与Block的关系(当DataNode启动时,会把当前节点上的Block信息和节点信息上报给NameNode)

文件的元数据信息在NameNode里面都会占用150字节的存储空间。

1,fsimage文件其实是hadoop文件系统元数据的一个永久性的检查点,其中包含hadoop文件系统中的所有目录和文件idnode的序列化信息。

2,edits文件存放的是hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。

3.6 HDFS的回收站

在core-site.xml添加配置

<property><name>fs.trash.interval</name><value>1440</value>
</property>

重启hadoop

stop-all.sh
start-all.sh

忽略回收站删除文件的命令:

  • HDFS为每个用户创建一个回收站目录:/user/用户名/.Trash/
  • 回收站中的数据都会有一个默认保存周期,过期未恢复则会被HDFS自动彻底删除
  • 注意:HDFS的回收站默认是没有开启的,需要修改core-site.xml中的fs.trash.interval属性

 3.7 HDFS的安全模式

  • 集群刚启动时,HDFS会进入安全模式,此时无法执行操作
  • 查看安全模式:hdfs dfsadmin -safemode get
  • 离开安全模式:hdfs dfsadmin -safemode leave

 3.8 案例:定时上传文件到HDFS

案例需求:例如日志文件为access_2020_01_01.log,每天上传到HDFS中
解决思路

  1. 我们需要获取到昨天日志文件的名称
  2. 在HDFS上面使用昨天的日期创建目录
  3. 将昨天的日志文件上传到刚创建的HDFS目录中
  4. 要考虑到脚本重跑,补数据的情况
  5. 配置crontab任务

 3.9 HDFS的高可用(HA)

HDFS HA

  • HDFS的HA,表示一个集群中存在多个NameNode,只有一个NameNode是处于Active状态,其它的是处于Standby状态
  • Active NameNode(ANN)负责所有客户端的操作,Standby NameNode(SNN)用于同步ANN的状态信息,提供快速故障恢复能力
  • 使用HA的时候,不能启动SecondaryNameNode

 3.10 HDFS的高扩展(Federation)

  • Federation可解决单一命名空间的一些问题,提供以下特性:HDFS集群扩展性、性能更高效、良好的隔离性

4 MapReduce

  • MapReduce是一种分布式计算模型,主要用于搜索领域,解决海量数据的计算问题
  • MapReduce有两个阶段组成:Map和Reduce

MapReduce原理

4.1 Map阶段

  1. 框架会把输入文件(夹)划分为很多InputSplit,默认每个HDFS的Block对应一个InputSplit。通过RecordReader类,把每个InputSplit解析成一个个<k1,v1>。默认每一行数据,会被解析成一个<k1,v1>
  2. 框架调用Mapper类中的map(...)函数,map函数的输入是<k1,v1>,输出是<k2,v2>。一个InputSplit对应一个Map Task
  3. 框架对map函数输出的<k2,v2>进行分区。不同分区中的<k2,v2>由不同的Reduce Task处理,默认只有1个分区
  4. 框架对每个分区中的数据,按照k2进行排序、分组。分组,指的是相同k2的v2分成一个组
  5. 在Map阶段,框架可以执行Combiner操作【可选】
  6. 框架会把Map Task输出的<k2,v2>写入Linux的磁盘文件中

4.2 Redeuce阶段

  1. 框架对多个Map Task的输出,按照不同的分区,通过网络Copy到不同的Reduce节点,这个过程称作Shuffle
  2. 框架对Reduce节点接收到的相同分区的<k2,v2>数据进行合并、排序、分组
  3. 框架调用Reducer类中的reduce方法,输入<k2,{v2...}>,输出<k3,v3>。一个<k2,{v2...}>调用一次reduce函数
  4. 框架把Reduce的输出结果保存到HDFS中

4.3 MapRedeuce任务日志查看

在yarn-site.xml添加配置,开启YARN的日志聚合功能,把散落在NodeManager节点上的日志统一收集管理,方便查看日志

<property> <name>yarn.log-aggregation-enable</name> <value>true</value>
</property>
<property><name>yarn.log.server.url</name><value>http://bigdata01:19888/jobhistory/logs/</value>
</property>

重启Hadoop,并启动HistoryServer

stop-all.sh
start-all.sh
mapred --daemon start historyserver

使用命令查看任务执行的日志:这里的id不一定,可以通过 hadoop job -list 来看看是否有任务

yarn logs -applicationId application_158771356

停止yarn任务:

yarn application -kill application_15877135678

4.4 Shuffle原理

Shuffle原理

  1. 在Map阶段中,通过InputSplit过程产生一个Map任务,该任务在执行的时候会把 <k1,v1>转化为<k2,v2>,这些数据会先临时存储到一个内存缓冲区中,这个内存缓冲区的大小默认是100M(io.sort.mb属性),
  2. 当达到内存缓冲区大小的80%(io.sort.spill.percent)即80M时,会把内 存中的数据溢写到本地磁盘中(mapred.local.dir),直到Map把所有的数据都计算完
  3. 最后会把内存缓冲区中的数据一次性全部刷新到本地磁盘文件上
  4. 数据会被shuffle线程分别拷贝到不同的reduce节点,不同Map任务中的相同分区的数据会在同一个reduce节点进行合并,合并以后会执行reduce的功能,最终产生结果数据。

:shuffle其实是横跨Map端和Reduce端,主要是负责把Map端产生的数据通过网络拷贝到Reduce阶段进行统一聚合计算。

4.5 Shuffle原理

  • 序列化:将内存中的对象信息转成二进制的形式,方便存储到文件中
  • Hadoop实现了自己的序列化和反序列化机制,单独设计了一些writable的实现,例如LongwritableText

特点:

  1. 紧凑:高效使用存储空间
  2. 快速:读写数据的额外开销小
  3. 可扩展:可透明地读取老格式的数据
  4. 互操作:支持多语言的交互

4.6 InputSplit原理

  • 当文件剩余大小bytesRemaining与splitSize的比值大于1.1的时候,就继续切分,否则,剩下的直接作为一个InputSize(即当bytesRemaining/splitSize <= 1.1时,会停止划分,将剩下的作为一个InputSplit)
  • 把不支持切割的文件作为一个InputSplit,比如压缩文件

4.7 RecodReader原理

  • 每一个InputSplit都有一个RecordReader,作用是把InputSplit中的数据解析成Record,即<k1,v1>
  • 如果这个InputSplit不是第一个InputSplit,将会丢掉读取出来的第一行,因为总是通过next()方法多读取一行(会多读取下一个InputSplit的第一行)

相关文章:

【Hadoop 01】简介

目录 1 Hadoop 简介 2 下载并配置Hadoop 2.1 修改/etc/profile 2.2 修改hadoop-env.sh 2.3 修改core-site.xml 2.4 修改hdfs-site.xml 2.5 修改mapred-site.xml 2.6 修改yarn-site.xml 2.7 修改workers 2.8 修改start-dfs.sh、stop-dfs.sh 2.9 修改start-yarn.sh、s…...

【C++】开源:跨平台轻量日志库easyloggingpp

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍跨平台轻量日志库easyloggingpp。 无专精则不能成&#xff0c;无涉猎则不能通。。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&am…...

spring-websocket在SpringBoot(包含SpringSecurity)项目中的导入

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f96d;本文内容&#xff1a;spring-websocket在SpringBoot(包含SpringSecurity…...

SpringBoot + Vue前后端分离项目实战 || 六:Jwt加密整合配置

文章目录 回顾添加依赖Jwt依赖Jwt配置定义Jwt拦截器注册Jwt拦截器&#xff0c;配置需要验证token的URL 测试Jwt修改登录等逻辑 回顾 在之前的系统中&#xff0c;我们利用UUID配合Redis以达到角色登录的功能。 当前整个系统存在一个问题&#xff1a;人为修改token值后&#xf…...

WPF 如何设置全局的订阅发布事件

文章目录 前言代码逻辑修改 总结 前言 我们需要一个全局事件订阅发布功能&#xff0c;实现页面通讯。使两个毫无关系的页面通过一个中间量进行通讯。 代码 IEventAggregator&#xff1a;消息订阅集合 这个是Prism提供的消息订阅功能。使用如下 设置订阅类型&#xff0c;即…...

STM32 USB使用记录:HID类设备(前篇)

文章目录 目的基础说明HID类演示代码分析总结 目的 USB是目前最流行的接口&#xff0c;现在很多个人用的电子设备也都是USB设备。目前大多数单片机都有USB接口&#xff0c;使用USB接口作为HID类设备来使用是非常常用的&#xff0c;比如USB鼠标、键盘都是这一类。这篇文章将简单…...

探索AI图像安全,助力可信AI发展

探索AI图像安全&#xff0c;助力可信AI发展 0. 前言1. 人工智能发展与安全挑战1.1 人工智能及其发展1.2 人工智能安全挑战 2. WAIC 2023 多模态基础大模型的可信 AI2.1 WAIC 2023 专题论坛2.2 走进合合信息 3. AI 图像安全3.1 图像篡改检测3.2 生成式图像鉴别3.3 OCR 对抗攻击技…...

vue 学习笔记 【ElementPlus】el-menu 折叠后图标不见了

项目当前版本 {"dependencies": {"element-plus/icons-vue": "^2.1.0","types/js-cookie": "^3.0.3","types/nprogress": "^0.2.0","axios": "^1.4.0","core-js": &quo…...

【JavaEE初阶】HTTP协议

文章目录 1. HTTP概述和fiddler的使用1.1 HTTP是什么1.2 抓包工具fiddler的使用1.2.1 注意事项1.2.2 fiddler的使用 2. HTTP协议格式2.1 HTTP请求格式2.1.1 基本格式2.1.2 认识URL2.1.3 方法 2.2 请求报头关键字段2.3 HTTP响应格式2.3.1 基本格式2.3.2状态码 1. HTTP概述和fidd…...

基于SaaS模式的Java基层卫生健康云HIS系统源码【运维管理+运营管理+综合监管】

云HIS综合管理平台 一、模板管理 模板分为两种&#xff1a;病历模板和报表模板。模板管理是运营管理的核心组成部分&#xff0c;是基层卫生健康云中各医疗机构定制电子病历和报表的地方&#xff0c;各医疗机构可根据自身特点特色定制电子病历和报表&#xff0c;制作的电子病历…...

effective c++ 条款2

条款2 常量(const)替换宏(#define)指针常量类成员常量 枚举(enum)替换宏(#define)模板函数(template inline)替换宏函数 尽量用const,enum,inline替换#define 总结就是&#xff1a; 常量(const)替换宏(#define) // uppercase names are usually for macros #define ASPECT_R…...

Python爬虫之Scrapy框架系列(23)——分布式爬虫scrapy_redis浅实战【XXTop250部分爬取】

目录&#xff1a; 1.实战讲解&#xff08;XXTop250完整信息的爬取&#xff09;&#xff1a;1.1 使用之前做的完整的XXTOP250项目&#xff0c;但是设置为只爬取一页&#xff08;共25个电影&#xff09;,便于观察1.2 配置settings文件中使用scrapy_redis的必要配置&#xff0c;并…...

html基于onmouse事件让元素变颜色

最近&#xff0c;在书写div块时&#xff0c;遇到一个小问题&#xff0c;这个小问题我搞了将近一个小时多才慢慢解决。问题是这样子的&#xff0c;有一个div块&#xff0c;我想让鼠标移上去变成蓝色&#xff0c;移开变成灰色&#xff0c;当鼠标按下去时让他变成深蓝色。于是就单…...

Linux环境PostgreSQL安装

今日一语&#xff1a;鲲鹏扶摇而直上九万里&#xff0c;雄鹰展翅高飞&#xff0c;这是因为鲲鹏一出世就得历劫&#xff0c;老鹰刚长出翅膀就会被扔下悬崖 下载安装包&#xff0c;解压到服务器中&#xff0c;然后 make && make install # 登录使用 ./psql # 切换数据库…...

Rust 数据类型 之 结构体(Struct)

目录 结构体&#xff08;Struct&#xff09; 定义与声明 结构体定义 结构体实例 结构体分类 单元结构体&#xff08;Unit Struct&#xff09; 元组结构体&#xff08;Tuple Struct&#xff09; 具名结构体&#xff08;Named Struct&#xff09; 结构体嵌套 结构体方法…...

数据结构之Queue的实现

Queue支持的方法 方法名参数功能返回Sizevoid返回链表规模(该方法由List< T>派生而来)emptyvoid返回链表是否为空(该方法由List< T>派生而来)frontvoid返回队首数据域的引用enqueueT const & e入队voiddequeuevoid出队出队的对象 code // Queue.h # pragma …...

rust声明式宏

宏 在 rust 中&#xff0c;我们一开始就在使用宏&#xff0c;例如 println!, vec!, assert_eq! 等。看起来宏和函数在使用时只是多了一个 !。实际上这些宏都是声明式宏&#xff08;也叫示例宏或macro_rules!&#xff09;&#xff0c;rust 还支持过程宏&#xff0c;过程宏为我们…...

第二章:Learning Deep Features for Discriminative Localization ——学习用于判别定位的深度特征

0.摘要 在这项工作中&#xff0c;我们重新审视了在[13]中提出的全局平均池化层&#xff0c;并阐明了它如何明确地使卷积神经网络&#xff08;CNN&#xff09;具有出色的定位能力&#xff0c;尽管它是在图像级别标签上进行训练的。虽然这个技术之前被提出作为一种训练规范化的手…...

【CSS】box-shadow 属性

box-shadow 是 CSS 属性&#xff0c;用于为元素添加一个阴影效果&#xff0c;使元素看起来浮起或有层次感。 该属性允许设置一个或多个阴影效果&#xff0c;其语法如下&#xff1a; box-shadow: h-shadow v-shadow blur spread color inset;h-shadow&#xff1a;水平阴影的位…...

基于深度学习的高精度课堂人脸检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度课堂人脸检测系统可用于日常生活中或野外来检测与定位课堂人脸目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的课堂人脸目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...