实训笔记7.26

实训笔记7.26

  • 7.26笔记
    • 一、Hadoop大数据开发技术
      • 1.1 Hadoop的安装部署
      • 1.2 Hadoop的分布式文件存储系统HDFS
        • 1.2.1 HDFS的组成
        • 1.2.2 HDFS的操作方式
        • 1.2.3 HDFS的流程原理
        • 1.2.4 HDFS核心概念
      • 1.3 Hadoop的分布式资源调度系统YARN
        • 1.3.1 YARN的组成
        • 1.3.2 YARN的工作流程
        • 1.3.3 YARN的任务调度器
      • 1.4 Hadoop的分布式计算框架MapReduce
        • 1.4.1 MapReduce的应用场景
        • 1.4.2 MapReduce的运行中核心组件
        • 1.4.3 MapReduce的详细工作流程
        • 1.4.4 MapReduce中压缩机制问题
        • 1.4.5 MapReduce的特殊应用
        • 1.4.6 MapReduce中的优化问题
    • 二、Hadoop的生态圈技术
    • 三、Hadoop生态圈中的Hive数据仓库技术
      • 3.1 Hive数据仓库的基本概念
        • 3.1.1 Hive结构
        • 3.1.2 Hive是基于Hadoop的,因此hive对hadoop的版本是有要求的
      • 3.2 Hive的架构组成
        • 3.2.1 Hive整体主要由以下几部分组成
      • 3.3 Hive和数据库的区别
      • 3.4 Hive的安装部署
        • 3.4.1 Hive的安装分为如下几步
        • 3.4.2 【注意事项】
      • 3.5 Hive的基本使用
        • 3.5.1 Hive的命令行操作方式
      • 3.6 Hive的元数据库的配置问题
        • 3.6.1 Hive实现初始化元数据库到MySQL

7.26笔记

一、Hadoop大数据开发技术

Hadoop是大数据中一个技术框架,内置了很多组件,解决了很多大数据业务下的数据处理和数据存储的场景。

Hadoop整体四部分组成的:HDFS、MapReduce、YARN、Hadoop Common

1.1 Hadoop的安装部署

  1. 本地安装模式
  2. 伪分布安装模式
  3. 完全分布安装模式
  4. HA高可用安装模式:借助Zookeeper软件才能实现

修改配置文件:

hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-env.sh、mapred-site.xml、yarn-site.xml、yarn-env.sh、workers、log4j.properties、capacity-scheduler.xml、dfs.hosts、dfs.hosts.exclude

1.2 Hadoop的分布式文件存储系统HDFS

1.2.1 HDFS的组成

  1. NameNode
  2. DataNode
    1. block块
    2. block块的副本数
  3. SecondaryNameNode

1.2.2 HDFS的操作方式

  1. HDFS的命令行操作

  2. HDFS的Java API操作

1.2.3 HDFS的流程原理

  1. HDFS的上传/下载数据的流程和原理
  2. HDFS的NameNode和SecondaryNameNode的原理
    1. SNN检查点机制问题:两个触发条件
    2. edits文件、fsimage文件
    3. HDFS的NN节点的数据恢复
  3. HDFS的NameNode和DataNode的工作原理
    1. 心跳机制问题:默认时间 3s
    2. NN认为DN断线的机制:掉线超时时长 2心跳的检测时间(5分钟)+10心跳时间

1.2.4 HDFS核心概念

HDFS的安全模式safemode:开启的时机、关闭的时机

Hadoop集群的新节点的服役和旧节点的退役(HDFS、YARN)

1.3 Hadoop的分布式资源调度系统YARN

1.3.1 YARN的组成

  1. ResourceManager
  2. NodeManager
  3. Container
  4. ApplicationMaster
  5. Task:申请资源的操作RM封装为Task

1.3.2 YARN的工作流程

1.3.3 YARN的任务调度器

  1. FIFO调度器
  2. 容量调度器
  3. 公平调度器

YARN只负责分配资源,不清楚计算程序的运行逻辑,程序运算逻辑YARN要求分布式程序必须启动一个AM来具体负责,YARN不负责,因此,只要一个分布式计算程序满足YARN的运行规则,都可以在YARN上进行运行。

1.4 Hadoop的分布式计算框架MapReduce

1.4.1 MapReduce的应用场景

  1. 离线数据处理的场景下:数据对实时性要求不高(MR程序运行中涉及到大量的磁盘IO和网络传输,因此会导致MR程序计算效率“不是很高”)
  2. 适用于数据量比较庞大的文件,小文件操作不占优势,处理TB/PB级别规模的数据

1.4.2 MapReduce的运行中核心组件

  1. InputFormat

    1. 切片、kv读取
    2. 常用实现类的切片和KV读取规则
    3. 如何自定义InputFormat
  2. Mapper

    1. map方法的执行方式:一组kv执行一次,一组kv在常用实现类当中都是一行数据为一组kv
    2. 环形缓冲区的问题
    3. maptask的数量和切片的关系
  3. Partitioner组件

    1. 负责进行map输出数据的分区

    2. 默认分区机制

      reduceTask=1

      reduceTask>1

    3. 自定义分区机制

  4. WritableComparable

    负责对map输出的kv数据进行排序的

    mr阶段发生几次排序,每次排序的执行时机以及排序使用的算法

  5. Combiner组件

    对map阶段输出的数据进行局部汇总,Combiner不是所有的MR程序都能添加,Combiner的添加不能影响原先MR程序的执行逻辑

  6. WritableComparator组件(可选)

    负责分组排序的,reduce在把数据拉取回来以后,需要根据key值来进行分组,哪些key我们认为是一组相同的key,可以通过辅助排序(分组排序)来决定

  7. Reduce组件

    reduce主要对map输出的数据进行全局汇总,汇总把相同的key值的value数据聚合起来,然后一组相同的key值调用一次reduce方法

    reduceTask的数量我们可以手动设置的,设置的时候主要和分区的关系

  8. OutputFormat组件

    指定了MR程序输出数据时的输出规则

    OutputFormat常用实现类

    SequenceFile文件的相关概念

    自定义OutpoutFormat

1.4.3 MapReduce的详细工作流程

Job提交资源的流程(源码)

资源提交成功以后,剩余的流程按照组件的顺序依次执行

1.4.4 MapReduce中压缩机制问题

MapReduce运行过程中,可以在三个位置对数据进行压缩:Mapper输入阶段,Mapper的输出阶段、Reducer的输出阶段

  1. MR程序中提供的压缩机制有哪些(压缩算法)

    1. default

    2. gzip

    3. bzip2

    4. LZ4

    5. Snappy

      1~5:Hadoop的Linux环境都给提供了

    6. LZO

      没有给提供

  2. MR程序中如何对三个位置开启压缩机制

    1. Map的输入: io.compression.codecs

    2. map的输出:

      mapreduce.map.output.compress mapreduce.map.output.compress.codec

    3. reduce的输出: FileOutputFormat.xxxxxx

1.4.5 MapReduce的特殊应用

  1. MapReduce中join操作
    1. mapjoin
    2. reducejoin
  2. MapReduce中计数器的应用
  3. MapReduce实现数据清洗特殊应用

1.4.6 MapReduce中的优化问题

MapReduce虽然是大数据中一个分布式计算框架,确实可以计算海量的数据,但是MR程序在运算过程中涉及到大量的磁盘IO和网络传输,所以导致MR程序的运行效率相比于其他大数据计算框架效率不是很高。

因此开发MapReduce程序的时候,为了让MR效率提高一点,可以对MR程序运行过程中的一些问题进行优化,尽可能的提升MR的计算效率。

  1. MpReduce导致计算运行缓慢的原因

    1. 硬件受限制
      1. 内存、CPU、硬盘的IO读写速度
      2. 掏钱解决
    2. MR运行机制限制
      1. 数据倾斜问题
      2. MapTask、ReduceTask的任务数量设置
      3. MR运行过程中小文件过多
      4. MR运行过程中磁盘溢写,磁盘IO次数过多
  2. MapReduce的运行优化解决问题

    1. Mapper输入阶段优化的措施

      可能产生的问题:小文件过多、数据倾斜、某些大文件不可被切割

      1. 小文件过多的问题:CombinerTextInputFormat实现小文件的合并,减少小切片出现
      2. 文件不可被切割,可以在MR程序处理之前,对文件数据重新进行压缩,压缩的时候选择可以被切片的压缩机制进行压缩
      3. map阶段的数据倾斜问题:合理的使用切片机制对输入的数据进行切片
      4. 合理的使用压缩机制
    2. Mapper阶段优化的措施

      可能产生的问题:环形缓冲区溢写的次数过多,溢写文件的合并次数过多,溢写和合并都涉及到磁盘IO

      1. 溢写次数过多,那么加大环形缓冲区的容量以及溢写的阈值。

        //环形缓冲区的容量
        mapred-site.xml/Configuration mapreduce.task.io.sort.mb 
        //溢写的比例 小数
        mapreduce.map.sort.spill.percent   
        
      2. 溢写的小文件并不是只合并一次,如果溢写的小文件超过设置的指定数量,先进行一次合并

        mapreduce.task.io.sort.factor 默认值10

      3. 可以合理的利用的Mapper输出压缩,减少mapper输出的数据量

      4. 在不干扰MR逻辑运行的前提下,合理的利用的Combiner组件对Map端的数据进行局部汇总,可以减少Mapper输出的数据量

    3. Reduce阶段的优化措施

      产生的问题:reduce的任务数设置不合理,Reduce端的数据倾斜问题、Reduce阶段拉取数据回来之后先写到内存中,内存放不下溢写磁盘(磁盘IO)。

      1. 任务书设置和数据倾斜问题:可以通过查看MR程序运行的计数器,自定义分区机制重新指定分区规则
      2. 尽量不使用Reduce阶段
      3. MR程序中,默认如果Map任务运行没有结束,那么Reduce任务就无法运行。可以设置map任务和reduce任务共存(map任务没有全部运行结束,reduce也可以开始运行) mapreduce.job.reduce.slowstart.completedmaps 0.05
      4. 合理的利用的Reduce端的输出压缩、也可以使用SequenceFile文件格式进行数据输出
  3. MapReduce的重试问题的优化

MapReduce运行过程中,如果某一个Map任务或者reduce任务运行失败,MR并不会直接终止程序的运行,而是会对失败的map任务和reduce任务进行特定次数的重试,如果特定次数的重试之后Map和reduce都没有运行成功,MR才会认为运行失败。

mapreduce.map.maxattempts 4

mapreduce.reduce.maxattempts 4

mapreduce.task.timeout 600000

Hadoop中历史日志服务器和YARN的日志聚合的配置和使用

二、Hadoop的生态圈技术

Flume、Sqoop、Hive(结构化数据的)、HBase(非结构化数据的)等等技术都是基于(技术底层都是Hadoop的实现)Hadoop技术体系诞生的一系列技术体系。

三、Hadoop生态圈中的Hive数据仓库技术

3.1 Hive数据仓库的基本概念

Hive也是Apache网站开源的一个顶尖项目,官网网址:hive.apache.org

Hive技术通过类SQL语言(HiveQL–HQL)分布式数据的管理、计算、存储的操作。

3.1.1 Hive结构

Hive是基于Hadoop的数据仓库软件,采用了类似于MySQL中数据表的形式进行海量数据的管理和计算。

  1. Hive存储的数据是类似于数据表Table的形式,但是Hive本身不存储任何数据,只是存储了表格的形式数据,表格的数据最终还是在HDFS上进行存放,只不过Hive通过一种叫做元数据库的操作手段可以实现将HDFS存储的结构化文件转换成为表格形式进行展示。
  2. Hive的表格中数据可以通过类SQL语句(DQL语言、DDL语言)对数据进行计算,只不过Hive表面上使用的是SQL语言进行计算,但是底层会把SQL语言转换成为MapReduce程序在YARN上运行。(目前Hive1.x版本以后,Hive也支持了可以将类SQL语言转换成为Spark、Tez分布式计算程序运行)

3.1.2 Hive是基于Hadoop的,因此hive对hadoop的版本是有要求的

hive.2.x.x---->hadoop2.x.x hive3.x.x---->hadoop3.x.x

Hive本质上就相当于是Hadoop的一个客户端,而且是一种类似于可以通过SQL操作Hadoop的客户端

3.2 Hive的架构组成

Hive相当于Hadoop的一个客户端,可以实现将存储到HDFS上的数据转换成为数据表的形式,同时还可以借助类SQL语言对Hive数据表的数据进行计算,而计算使用的类SQL语句底层又会转换成为MapReduce程序在YARN上运行。

3.2.1 Hive整体主要由以下几部分组成

Hive的只所以可以实现以上功能,主要是因为Hive的设计架构,Hive整体主要由以下几部分组成:

  1. Hive的Client:hive的客户端就是编写类SQL语言进行数据库、数据表创建、查询语句的编写的客户端,Hive的客户端有很多种:hive的命令行客户端、hive的Java API的客户端等等。

  2. Hive的Driver(驱动)程序:hive的核心,hive之所以可以实现将类SQL语句转换成为MR程序,主要就是由Driver来负责进行转换的,其中hive的Driver又由以下几部分组成:

    1. 解析器:将编写的类SQL语言抽象成为一个语法树,检查语法有没有问题
    2. 编译器:将抽象成为的语法树生成逻辑执行计划
    3. 优化器:对执行计划进行优化
    4. 执行器:将优化之后的执行计划转换成为真正的物理执行代码,比如Hive支持的计算程序(MR、TEZ、Spark程序)
  3. Hive的元数据metaStore,Hive不负责存储任何的数据,包括hive创建的数据库、数据表、表结构等等内存,都不是在hive中的存放的,还有表数据(HDFS上),这些信息我们都是在Hive的元数据中进行存放,元数据存放到一个关系型数据库中(比如MySQL、oracle、SQL Server 、Derby数据库)

3.3 Hive和数据库的区别

Hive采用了类SQL语言进行海量数据的计算,看上去操作和数据库还挺像的。但是一定要知道Hive和数据库完全不是一回事,只不过就是Hive借助数据库中的数据表和SQL的思想简化了处理海量数据的操作,除此以外,hive的存储机制、执行机制、执行延迟、存储数据量等等和数据库有本质性的区别

3.4 Hive的安装部署

Hive相当于是Hadoop的一个类SQL的客户端,底层的存储和计算都是基于Hadoop运行的,因此Hive安装之前必须先部署安装Hadoop软件(伪分布式、完全分布式、HA高可用)

Hive本身不是一个分布式软件,依赖于Hadoop的分布式存储和分布式计算,Hive就相当于是一个客户端软件,因此不管Hadoop软件安装的是哪种模式,Hive只需要安装到Hadoop集群的任意的一台节点上即可。

3.4.1 Hive的安装分为如下几步

  1. 安装hive之前必须先把JDK、Hadoop安装配置成功

  2. 上传、解压、配置环境变量——————安装的大数据软件目录,目录名最好只包含软件名+版本号即可

  3. 修改hive的配置文件

    1. 修改hive和hive配置文件的关联

    2. 修改hive和Hadoop的关联

      hive-env.sh

    3. 配置hive的日志输出文件hive-log4j2.properties

  4. 初始化hive的元数据库metastore:默认情况下使用derby数据库(hive自带的):

    schematool -dbType derby -initSchema

    初始化会报错一个NoSuchMethod异常:hive的guava的依赖jar包和hadoop的guava的依赖jar包的版本冲突了

    解决方案:hive的lib目录把guava,jar包删除了或者重命名了,然后把这个${HADOOP_HOME}/share/hadoop/common/lib/guava.xxx.jar

    给hive的lib目录复制一份

  5. hive和hadoop还有一个依赖是冲突的,但是这个冲突不解决不会影响hive的正常使用,给我们报警告:hive和Hadoop的日志输出的依赖

    hive中的日志依赖版本低于Hadoop的日志依赖

    把hive的日志依赖重命名或者删除了

3.4.2 【注意事项】

  1. 一定要注意第一次安装hive,一定要初始化hive的元数据库以后,再启动hive的命令行客户端 初始化元数据库之后,再初始化命令执行的工作目录下,创建一个metastore_db文件夹,文件夹就是derby记录的元数据库的文件位置。 如果初始化失败了,一定一定要先把这个创建的目录给删除了再重新初始化。
  2. env.sh文件配置关联路径时,路径和=之间不要加空格
  3. hive和Hadoop有两个依赖包的冲突,分别是guava、log4j的,guava的依赖需要把hive的删除,然后把Hadoop的复制一份给hive,log4j的需要把hive的删除了就行了

3.5 Hive的基本使用

Hive其实就是一个Hadoop的类SQL客户端,Hive提供了多种方式可以进行类SQL编程:Hive的命令行方式,Java的JDBC操作方式等等

如果我们要使用hive的命令行方式操作hive,那么我们不需要启动任何的hive相关服务,只需要把HDFS和YARN启动即可。

如果我们要使用Java的JDBC方式操作hive,那么必须配置Hive的远程连接服务并且启动hive的远程连接服务,同时还得需要启动HDFS和YARN才能进行操作。

3.5.1 Hive的命令行操作方式

  1. 启动hive的命令行:必须在hive的安装节点上使用 hive
  2. hive的HQL查询表数据时,设计到聚合函数,或者筛选等等操作才会转换成为MR程序运行
  3. 支持增加和删除表中的所有数据,不支持修改或者删除表中的部分数据

3.6 Hive的元数据库的配置问题

hive中有一个很重要的概念就是元数据metastore,元数据中记录了hive中创建了哪些数据库和数据表,以及数据表的字段和字段类型、数据表的数据在HDFS上的存储目录等等信息。

而且hive要求,元数据hive本身不负责存储,它要求必须使用一个关系型数据库进行hive元数据的存储,因为hive的元数据其实也是一堆表。hive默认使用的derby数据库进行元数据的存储,但是derby存储元数据有一个非常严重的问题,无法多客户端使用hive命令行

derby数据库同一时刻只允许有一个客户端连接访问元数据库,因此如果hive的元数据初始化到了derby数据库,无法实现多客户端操作hive数据仓库

因此我们建议大家,包括hive官方也建议大家把hive的元数据库初始化到MySQL或者oracle或者SQL Server等关系型数据库当中。

Hive实现初始化元数据库到MySQL等关系型数据库,底层借助了Java的JDBC操作实现,如果想要实现把元数据库在MySQL中初始化,必须先做三件事情

3.6.1 Hive实现初始化元数据库到MySQL

  1. 把以前在derby元数据库上创建、添加的表文件在HDFS上先删除了,同时把以前derby的元数据库在Linux的目录移除了。
  2. 在Linux安装MySQL——————linux安装MySQL需要借助yum仓库进行,yum仓库必须先配置阿里云的yum源
  3. 因为hive初始化元数据到MySQL,使用的是Java的JDBC技术,但是hive中并没有MySQL的JDBC驱动,因此我们需要把MySQL的jdbc驱动给hive的lib目录下上传一份

Hive连接MySQL的时候还有一个问题,MySQL连接需要用户名和密码,但是hive默认情况下不知道,需要修改hive的一个配置文件,指定连接的MySQL的用户名和密码、驱动程序等等

需要在hive的安装目录的conf路径创建一个文件hive-site.xml文件

初始化hive的元数据到MySQL中:schematool -initSchema -dbType mysql -verbose

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

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

相关文章

将Spring Session存储到Redis中实现持久化

文章目录 Session持久化1. 添加依赖2. 配置redis连接信息3. 存储和读取session从Redis Session持久化 1. 添加依赖 在项目中添加session依赖和redis依赖&#xff0c;如下所示&#xff1a; <dependency><groupId>org.springframework.boot</groupId><art…

15个图像识别模型下载及优缺点分析

1、PixelCNN & PixelRNN in TensorFlow TensorFlow implementation of Pixel Recurrent Neural Networks. 地址&#xff1a;https://github.com/carpedm20/pixel-rnn-tensorflow 优点&#xff1a;这些模型是生成图像的有力工具&#xff0c;可以生成高质量的逼真图像。它们…

Pytorch个人学习记录总结 04

目录 torchvision DataLoader torchvision transforams是对单张图片进行处理&#xff0c;而制作数据集的时候&#xff0c;是需要对图像进行批量处理的。因此本节是将torchvision中的datasets和transforms联合使用对数据集进行预处理操作。 &#xff08;torchvision官方文档地…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)五:后台主页功能实现上

一、本章内容 本章实现后台主页框架实现、菜单的动态加载及生产、tab组件与菜单绑定、菜单与路由绑定等,工具栏按钮等界面及对应功能实现。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览

Stream 流式编程不常用API讲解

常用的 Stream 操作方法 FlatMap 扁平映射&#xff08;FlatMap&#xff09;&#xff1a;flatMap() 方法类似于 map() 方法&#xff0c;不同之处在于它可以将每个元素映射为一个流&#xff0c;并将所有流连接成一个流。这主要用于解决嵌套集合的情况。例如&#xff1a; List&…

vue脚手架文件说明

vue脚手架文件说明 1、文件介绍2、脚手架里面主要文件和作用 1、文件介绍 2、脚手架里面主要文件和作用 node_modules 都是下载的第三方包public/index.html 浏览器运行的网页src/main.js webpack打包的入口src/APP.vue Vue页面入口package.json 依赖包列表文件

java篇 类的进阶0x07:继承

文章目录 继承继承的语法继承的作用与特点继承与组合的区别 覆盖 overideOverride构造方法无法覆盖 super&#xff1a;和父类对象沟通的桥梁super 到底指哪个父类的实例super 严格意义上并非真的是一个父类的引用super 调用父类的构造方法子类构造方法被调用时&#xff0c;Java…

为什么 SSH(安全终端)的端口号是 22 !!

导读为什么 SSH&#xff08;安全终端&#xff09;的端口号是 22 呢&#xff0c;这不是一个巧合&#xff0c;这其中有个我&#xff08;Tatu Ylonen&#xff0c;SSH 协议的设计者&#xff09;未曾诉说的故事。 将 SSH 协议端口号设为 22 的故事 1995 年春我编写了 SSH 协议的最…

E2E工程问题:小周期转大周期Gateway

摘要&#xff1a; 本文讨论一个具体的工程问题&#xff0c;E2E报文对应的信号&#xff0c;由小周期转大周期导致的E2E校验失败问题。 工程中&#xff0c;网关节点很重要的一个功能就是路由。当然&#xff0c;E2E&#xff08;End to End&#xff09;报文也可路由&#xff0c;但…

ChatGPT在智能推送和个性化广告中的应用如何?

ChatGPT在智能推送和个性化广告领域具有广泛的应用潜力。智能推送和个性化广告是指根据用户的个性化需求和兴趣&#xff0c;精准地向用户推送相关的信息和广告内容。ChatGPT作为一种预训练的通用语言模型&#xff0c;具有强大的语言理解和生成能力&#xff0c;可以在智能推送和…

【spring boot】spring boot下代码运行逻辑

概括 springboot是一种java开发框架&#xff0c;采用注解开发形式&#xff0c;大大简化了SSM框架下的大量配置&#xff0c; 目前springboot想要实现一个功能&#xff0c;一般通用方式是建立这几个包&#xff1a;controller&#xff0c;config&#xff0c;mapper&#xff0c;e…

5分钟开发一个AI论文抓取和ChatGPT提炼应用

5分钟开发一个AI论文抓取和ChatGPT提炼应用 第一步 点击“即刻开始” -选择模板 python -修改标题 “AIPaper”&#xff0c;项目标识“AIPaper”&#xff0c;点击“创建项目” 第二步 在编程区域右侧AI区域&#xff0c;输入框输入以下内容&#xff1a; 请根据下面的内容&…

Java后端程序员不得不知道的 API 接口常识

说实话&#xff0c;我非常希望自己能早点看到本篇文章&#xff0c;大学那个时候懵懵懂懂&#xff0c;跟着网上的免费教程做了一个购物商城就屁颠屁颠往简历上写。 至今我仍清晰地记得&#xff0c;那个电商教程是怎么定义接口的&#xff1a; 管它是增加、修改、删除、带参查询&…

ELK 使用kibana查询和分析nginx日志

背景&#xff1a;使用kibana查询和分析nginx请求日志&#xff0c;方便开发人员查询系统日志和分析系统问题。 setp 1、定义Index patterns 2、定义Discover(Search 查询数据) 3、定义Visualizations 3.1 定义Vertical Bar 3.2 、Choose a source 3.3、定义图表 4、定义…

【一文搞懂】—带霍尔编码器的直流有刷减速电机

文章目录 一、直流有刷电机二、减速比三、霍尔编码器3.1 霍尔编码器3.2 霍尔编码器测速原理 四、测速程序设计4.1 跳变沿检测4.2 计算转速 一、直流有刷电机 宏观上说直流有刷电机由固定部分&#xff08;定子&#xff09;和旋转部分&#xff08;转子&#xff09;组成。在定子上…

同一份数据,Redis为什么要存两次

Redis作为目前最主流的高性能缓存&#xff0c;里面有很多精妙的设计&#xff0c;其中有一种数据类型&#xff0c;当在存储的时候会同时采用两种数据结构来进行分别存储&#xff0c;那么 Redis 为什么要这么做呢&#xff1f;这么做会造成同一份数据占用两倍空间吗&#xff1f; …

Reinforcement Learning with Code 【Chapter 7. Temporal-Difference Learning】

Reinforcement Learning with Code This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of Reinforcement Learning, . 文章…

高层金属做power mesh如何避免via stack

随着工艺精进&#xff0c;pr要处理的层次也越来越多&#xff0c;如何选择power plan的层次尤为关键&#xff0c;一方面决定ir drop的大小&#xff0c;影响着芯片的功能&#xff0c;一方面决定绕线资源&#xff0c;影响面积。 选择高层metal做power mesh的关键在于厚金属&#…

局域网内主机ping不通,但是可以调用对方http接口(防火墙阻止了icmp协议)(关闭防火墙或者启用ICMP回显请求(ICMPv4-In))

文章目录 背景可能的原因问题排查及解决 背景 局域网内有一台主机&#xff0c;ping它ping不通&#xff0c;但是可以调用它的http接口&#xff0c;很诡异。。。 可能的原因 可能的原因有以下几种&#xff1a; 防火墙设置&#xff1a;局域网内的主机可能设置了防火墙&#xff…

勘探开发人工智能应用:地震层位解释

1 地震层位解释 层位解释是地震构造解释的重要内容&#xff0c;是根据目标层位的地震反射特征如振幅、相位、形态、连续性、特征组合等信息在地震数据体上进行追踪解释获得地震层位数据的方法。 1.1 地震信号、层位与断层 图1.1 所示为地震信号采集的过程&#xff0c;地面炮…