大数据技术学习笔记(三)—— Hadoop 的运行模式

news2024/11/17 15:45:25

目录

  • 1 本地模式
  • 2 伪分布式模式
  • 3 完全分布式模式
    • 3.1 准备3台客户机
    • 3.2 同步分发内容
      • 3.2.1 分发命令
      • 3.2.2 执行分发操作
    • 3.3 集群配置
      • 3.3.1 集群部署规划
      • 3.3.2 配置文件说明
      • 3.3.3 修改配置文件
      • 3.3.4 分发配置信息
    • 3.4 SSH无密登录配置
      • 3.4.1 配置ssh
      • 3.4.2 无密钥配置
    • 3.5 单点启动集群
      • 3.5.1 启动 HDFS 集群
      • 3.5.2 启动 YARN 集群
    • 3.6 群起集群
      • 3.6.1 配置workers
      • 3.6.2 启动集群
      • 3.6.3 测试集群
    • 3.7 配置历史服务器
    • 3.8 配置日志的聚集

Hadoop官方网站

Hadoop运行模式包括:

  • 本地模式 :hadoop默认安装后启动就是本地模式,就是将来的数据存在Linux本地,并且运行MR程序的时候也是在本地机器上运行;

  • 伪分布式模式:其实就只在一台机器上启动HDFS集群,启动YARN集群,并且数据存在HDFS集群上,以及运行MR程序也是在YARN上运行,计算后的结果也是输出到HDFS上。本质上就是利用一台服务器中多个java进程去模拟多个服务;

  • 完全分布式模式:完全分布式其实就是多台机器上分别启动HDFS集群,启动YARN集群,并且数据存在HDFS集群上的以及运行MR程序也是在YARN上运行,计算后的结果也是输出到HDFS上。

1 本地模式


官方 wordcount (统计单词的个数)示例:

  1. 创建在 hadoop-3.1.3 文件下面创建一个 wcinput 文件夹
[huwei@hadoop101 hadoop-3.1.3]$ mkdir wcinput
  1. wcinput 文件下创建一个word.txt文件并编辑内容
[huwei@hadoop101 hadoop-3.1.3]$ cd wcinput
[huwei@hadoop101 wcinput]$ vim word.txt

在文件中输入如下内容

hadoop yarn
hadoop mapreduce
huwei
huwei

保存退出:wq

  1. 执行程序
[huwei@hadoop101 wcinput]$ cd /opt/module/hadoop-3.1.3
[huwei@hadoop101 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput

输出文件夹wcoutput不需要提前创建

  1. 查看结果
[huwei@hadoop101 hadoop-3.1.3]$ ll
[huwei@hadoop101 hadoop-3.1.3]$ cd wcoutput/

在这里插入图片描述

[huwei@hadoop101 wcoutput]$ cat part-r-00000

在这里插入图片描述

2 伪分布式模式


可参考笔者之前写的博客 Centos6下安装伪分布式hadoop

3 完全分布式模式

3.1 准备3台客户机


由笔者上一篇博客 大数据技术学习笔记(二)—— Hadoop运行环境的搭建 可知,我们已由模版机hadoop100 克隆了 hadoop101,并在hadoop101成功安装配置了 jdk 和 hadoop。

现在,我们再由模版机 hadoop100 创建克隆 hadoop102、hadoop103,我们对这两台新克隆的机器同样进行 修改IP地址修改主机名 操作。(仍可参考上一篇博客中对 hadoop101 的修改)

3.2 同步分发内容


我们已经在hadoop101成功安装配置了 jdk 和 hadoop,为避免再次在 hadoop102、hadoop103安装配置 jdk 和 hadoop带来的麻烦,我们可以通过将 hadoop101 安装配置的 jdk 和 hadoop同步分发给hadoop102、hadoop103的方式,简化操作步骤。

3.2.1 分发命令


  1. scp

scp(secure copy)安全拷贝,scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)。

基本语法

scp    -r          $pdir/$fname              $user@hadoop$host:$pdir/$fname
命令   递归       要拷贝的文件路径/名称    目的用户@主机:目的路径/名称
  1. rsync

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsyncscp 区别:用 rsync 做文件的复制要比 scp 的速度快, rsync 只对差异文件做更新。scp是把所有文件都复制过去。

基本语法

rsync    -av       $pdir/$fname              $user@hadoop$host:$pdir/$fname
命令   选项参数   要拷贝的文件路径/名称    目的用户@主机:目的路径/名称

选项参数说明

  • -a 归档拷贝
  • -v 显示复制过程
  1. 编写集群分发脚本 xsync

说明:在 /home/huwei/bin 这个目录下存放的脚本,huwei用户可以在系统任何地方直接执行。

/home/huwei/bin 目录下创建 xsync 文件

[huwei@hadoop101 ~]$ cd /home/huwei
[huwei@hadoop101 ~]$ mkdir bin
[huwei@hadoop101 ~]$ cd bin
[huwei@hadoop101 bin]$ vim xsync

在该文件中编写如下代码

fi
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103
do
echo ====================  $host  ====================
  #3. 遍历所有目录,挨个发送
  for file in $@
  do
    #4. 判断文件是否存在
    if [ -e $file ]
    then
      #5. 获取父目录
      pdir=$(cd -P $(dirname $file); pwd)
      #6. 获取当前文件的名称
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done

修改脚本 xsync 具有执行权限

[huwei@hadoop101 bin]$ chmod +x xsync

将脚本复制到 /bin 中,以便全局调用

[huwei@hadoop101 bin]$ sudo cp xsync /bin/

测试脚本(将/home/huwei/bin分发给其他机器)

[huwei@hadoop101 ~] xsync /home/huwei/bin

3.2.2 执行分发操作


将 hadoop101 安装配置的 jdk 和 hadoop 同步分发给 hadoop102

[huwei@hadoop101 ~]$ scp -r /opt/module/* huwei@hadoop102:/opt/module/

在这里插入图片描述

注意,两台主机首次通信时需要确认,键入yes,后续通信则不需要

拓展 scp 的用法,我们尝试在 hadoop103上向 hadoop101上主动拉取 jdk

[huwei@hadoop103 ~]$ scp -r huwei@hadoop101:/opt/module/jdk1.8.0_212 /opt/module/

在 hadoop102 上将 hadoop101 的 hadoop 发送给 hadoop103(该操作 rsync 不支持)

[huwei@hadoop102 ~]$ scp -r huwei@hadoop101:/opt/module/hadoop-3.1.3 huwei@hadoop103:/opt/module/

此时,hadoop102、hadoop103 上都有了 jdk 和 hadoop,下面需要将 jdk 和 hadoop 的环境变量也分发过去。

此时注意要使用 scp 将环境变量分发给 hadoop102、hadoop103时,hadoop102、hadoop103必须要 root 用户登录,因为只有 root 用户才有在 /etc/profile.d文件夹下写的权限

[huwei@hadoop101 ~]$ cd /etc/profile.d
[huwei@hadoop101 profile.d]$ scp -r ./my_env.sh root@hadoop102:/etc/profile.d/
[huwei@hadoop101 profile.d]$ scp -r ./my_env.sh root@hadoop103:/etc/profile.d/

使得 hadoop102、hadoop103下的环境变量生效

[huwei@hadoop102 ~]$ source /etc/profile
[huwei@hadoop103 ~]$ source /etc/profile

然后可分别在 hadoop102、hadoop103下进行测试,java -versionhadoop version

3.3 集群配置

3.3.1 集群部署规划


注意:

  • NameNodeSecondaryNameNode不要安装在同一台服务器
  • ResourceManager 也很消耗内存,不要和 NameNodeSecondaryNameNode 配置在同一台机器上。

在这里插入图片描述

3.3.2 配置文件说明


Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。当Hadoop集群启动后,先加载默认配置,然后再加载自定义配置文件,自定义的配置信息会覆盖默认配置。

hadoop 的默认配置文件

  • core-default.xml
  • hdfs-default.xml
  • mapread-default.xml
  • yarn-default.xml

hadoop提供可自定义的配置文件

  • core-site.xml
  • hdfs-site.xml
  • mapread-site.xml
  • yarn-site.xml

3.3.3 修改配置文件


  1. 核心配置文件
[huwei@hadoop101 ~]$ cd $HADOOP_HOME/etc/hadoop
[huwei@hadoop101 hadoop]$ vim core-site.xml

文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:9820</value>
	</property>
<!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
	</property>

<!-- 配置HDFS网页登录使用的静态用户为huwei -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>huwei</value>
	</property>

<!-- 配置该huwei(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.huwei.hosts</name>
        <value>*</value>
	</property>
<!-- 配置该huwei(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.huwei.groups</name>
        <value>*</value>
	</property>
<!-- 配置该huwei(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.huwei.groups</name>
        <value>*</value>
	</property>

</configuration>
  1. HDFS配置文件
[huwei@hadoop101 hadoop]$ vim hdfs-site.xml

文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- nn web端访问地址-->
	<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop101:9870</value>
    </property>
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop103:9868</value>
    </property>
</configuration>
  1. YARN配置文件
[huwei@hadoop101 hadoop]$ vim yarn-site.xml

文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
	</property>
<!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop102</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>
<!-- yarn容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
	</property>
<!-- yarn容器允许管理的物理内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
	</property>
<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>
  1. MapReduce配置文件
[huwei@hadoop101 hadoop]$ vim mapred-site.xml

文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

3.3.4 分发配置信息


[huwei@hadoop101 ~]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/

3.4 SSH无密登录配置

3.4.1 配置ssh


ssh 基本语法

ssh 另一台主机的主机名/ip地址

例如,我们在 hadoop101 上登录 hadoop102,可以看到我们必须输入hadoop102的登录密码

在这里插入图片描述

输入exit登出

我们在操作的过程中,少不了各台机器之间的通信,如果总是输入密码会很麻烦,所以我们要进行免密配置

3.4.2 无密钥配置


  1. 免密登录原理

在这里插入图片描述

  1. 生成公钥和私钥
[huwei@hadoop101 ~]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

在这里插入图片描述

查看生成的私钥、公钥的存放位置

[huwei@hadoop101 ~]$ cd /home/huwei/.ssh/
[huwei@hadoop101 .ssh]$ ll

在这里插入图片描述

.ssh文件夹下(~/.ssh)的文件功能解释

在这里插入图片描述

  1. 将公钥拷贝到要免密登录的目标机器上(授权)
[huwei@hadoop101 .ssh]$ ssh-copy-id hadoop101
[huwei@hadoop101 .ssh]$ ssh-copy-id hadoop102
[huwei@hadoop101 .ssh]$ ssh-copy-id hadoop103

以上步骤 2、3 的工作,也要在 hadoop102、hadoop103 走一遍。

此时,三台主机两两之间即可实现免密登录。

3.5 单点启动集群

3.5.1 启动 HDFS 集群


  1. 格式化
    在这里插入图片描述

如果集群是第一次启动,才需要在hadoop101 节点 格式化 NameNode(注意格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的 datalogs 目录,然后再进行格式化。)

[huwei@hadoop101 hadoop-3.1.3]$ hdfs namenode -format

在这里插入图片描述

  1. 启动 namenode

hadoop101 启动 namenode

hdfs --daemon start namenode

使用 jps 命令查看当前进程

在这里插入图片描述
Web 端查看 HDFS 的 NameNode

  • 浏览器中输入:http://hadoop101:9870
  • 查看HDFS上存储的数据信息

在这里插入图片描述

  1. 启动 datanode

hadoop101 hadoop102 hadoop103 分别启动 datanode

[huwei@hadoop101 ~]$ hdfs --daemon start datanode
[huwei@hadoop102 ~]$ hdfs --daemon start datanode
[huwei@hadoop103 ~]$ hdfs --daemon start datanode

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此时查看 web 端

在这里插入图片描述

  1. 启动 secondarynamenode

hadoop103 启动secondarynamenode

[huwei@hadoop103 ~]$ hdfs --daemon start secondarynamenode

jps 查看进程

在这里插入图片描述

Web端查看 HDFS 的 secondarynamenode(并没有什么东东)

  • 浏览器中输入:http://hadoop103:9868

3.5.2 启动 YARN 集群


  1. 启动 resourcemanager

hadoop102 启动 resourcemanager

[huwei@hadoop102 ~]$ yarn --daemon start resourcemanager
  1. 启动 nodemanager

hadoop101、 hadoop102、 hadoop103 分别启动 nodemanager

[huwei@hadoop101 ~]$ yarn --daemon start nodemanager
[huwei@hadoop102 ~]$ yarn --daemon start nodemanager
[huwei@hadoop103 ~]$ yarn --daemon start nodemanager

Web端查看YARN的ResourceManager

  • 浏览器中输入:http://hadoop102:8088
  • 查看YARN上运行的Job信息

在这里插入图片描述

jps 查看各主机上的进程

在这里插入图片描述

关于关闭集群,同上述启动集群的命令,只需将 start 修改为 stop 即可

3.6 群起集群

3.6.1 配置workers


当执行群启/群停脚本的时候,首先会解析 etc/hadoop/workers,解析到的内容都是每一台机器的地址,脚本会自动执行在每一台机器上启动 dn、nm。

[huwei@hadoop101 ~]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

在该文件中增加如下内容

hadoop101
hadoop102
hadoop103

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

同步所有节点配置文件

[huwei@hadoop101 ~]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/workers

3.6.2 启动集群


  1. 启动 HDFS

在配置了 NameNode 的节点(hadoop101)启动HDFS

[huwei@hadoop101 ~]$ start-dfs.sh
  1. 启动 YARN

在配置了 ResourceManager 的节点(hadoop102)启动YARN

[huwei@hadoop102 ~]$ start-yarn.sh

注意:

  • 关闭集群同上述命令,只需将 start 修改为 stop 即可
  • hadoop本身也给我们提供了start-all.sh可以实现一次性启动HDFS和YARN,但是这个命令也会额外的启动别的进程,这样会比较耗费服务器资源。

3.6.3 测试集群


在HDFS的web 界面打开HDFS的文件系统

在这里插入图片描述

在HDFS文件系统中手动创建 wcinput 文件夹,并在 wcinput 文件夹下手动上传hello.txt文件

在这里插入图片描述
执行 wordcount 程序

[huwei@hadoop101 ~]$ cd /opt/module/hadoop-3.1.3
[huwei@hadoop101 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput

可以看到

在这里插入图片描述

3.7 配置历史服务器


历史服务器是针对MR程序执行的历史记录,当集群关闭重启后,Web端查看YARN,找不到程序执行的历史记录了,为了查看程序的历史运行情况,需要配置一下历史服务器。

[huwei@hadoop101 ~]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml

在该文件里面增加如下配置

<!-- 历史服务器端地址(哪台主机都可) -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop101:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop101:19888</value>
</property>

分发配置

[huwei@hadoop101 ~]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

在hadoop101 启动历史服务器

[huwei@hadoop101 ~]$ mapred --daemon start historyserver

查看历史服务器是否启动

在这里插入图片描述

web 端查看 JobHistory

  • 浏览器中输入:http://hadoop101:19888/jobhistory

3.8 配置日志的聚集


日志是针对 MR 程序运行是所产生的的日志,配置日志的聚集方便后期分析问题有更好的执行过过程的依据。

应用运行完成以后,将程序运行日志信息上传到HDFS系统上。配置日志聚集可以方便的查看到程序运行详情,方便开发调试。

[huwei@hadoop101 ~]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

在该文件里面增加如下配置

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop101:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

注意:开启日志聚集功能,需要重新启动 NodeManagerResourceManagerHistoryServer

分发配置

[huwei@hadoop101 ~]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

关闭 NodeManager 、ResourceManager和HistoryServer

[huwei@hadoop102 ~]$ stop-yarn.sh
[huwei@hadoop101 ~]$ mapred --daemon stop historyserver

开启 NodeManager 、ResourceManager和HistoryServer

[huwei@hadoop102 ~]$ start-yarn.sh
[huwei@hadoop101 ~]$ mapred --daemon start historyserver

现在去看 HistoryServer

在这里插入图片描述

此时仍然看不到日志是怎么回事呢? 其实是因为我们当时执行程序的时候并没有开启日志聚集,现在我们开启了日志聚集功能,那么重新执行程序

删除HDFS上已经存在的输出文件

[huwei@hadoop101 ~]$ hadoop fs -rm -r /wcoutput

执行WordCount程序

[huwei@hadoop101 wcinput]$ cd /opt/module/hadoop-3.1.3
[huwei@hadoop101 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput

现在去看 HistoryServer ,可以看到日志了。

在这里插入图片描述

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

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

相关文章

人工智能(6):机器学习基础环境安装与使用

1 库的安装 整个机器学习基础阶段会用到Matplotlib、Numpy、Pandas等库&#xff0c;为了统一版本号在环境中使用&#xff0c;将所有的库及其版本放到了文件requirements.txt当中&#xff0c;然后统一安装 新建一个用于人工智能环境的虚拟环境 mkvirtualenv ai matplotlib3.8…

Mybatis应用场景之动态传参、两字段查询、用户存在性的判断

目录 一、动态传参 1、场景描述 2、实现过程 3、代码测试 二、两字段查询 1、场景描述 2、实现过程 3、代码测试 4、注意点 三、用户存在性的判断 1、场景描述 2、实现过程 3、代码测试 一、动态传参 1、场景描述 在进行数据库查询的时候&#xff0c;需要动态传入…

【源码解析】Spring源码解读-bean的加载

Spring的整体流程其实就是通过配置 xml、注解将自定义bean类信息进行配置&#xff0c;然后通过BeanDefinitionReader读取配置信息&#xff0c;由Dom转换成xml解析成Docment。在通过加载的配置信息进行初始化Bean对象&#xff0c;然后在对象的前后进行处理&#xff0c;也就是不同…

2023-10-22

一、总线通信协议简介 总线是计算机系统中负责连接各个硬件的通信线路&#xff0c;它可以传输数据、地址和控制信号。通信协议是指双方实体完成通信所遵循的规则。总线通信协议是一种规定总线设备之间数据通信方式和方法的规则&#xff0c;它包括数据的通信方式、速率、格式、…

python爬虫之js逆向入门:常用加密算法的逆向和实践

一、强大的Chrome DevTools Chrome DevTools是一组内置于Google Chrome浏览器中的开发者工具&#xff0c;用于帮助开发人员调试、分析和优化Web应用程序。它提供了一系列功能强大的工具&#xff0c;用于检查和编辑HTML、CSS和JavaScript代码&#xff0c;监视网络请求、性能分析…

redis怎么设计一个高性能hash表

问题 redis 怎么解决的hash冲突问题 &#xff1f;redis 对于扩容rehash有什么优秀的设计&#xff1f; hash 目标是解决hash冲突&#xff0c;那什么是hash冲突呢&#xff1f; 实际上&#xff0c;一个最简单的 Hash 表就是一个数组&#xff0c;数组里的每个元素是一个哈希桶&…

ida81输入密码验证算法分析以及破解思路

本文分析了ida81对输入密码的验证流程&#xff0c;分别对输入密码到生成解密密钥、密码素材的生成过程以及文件数据的加密过程这三个流程进行分析&#xff0c;并尝试找一些可利用的破绽。很遗憾&#xff0c;由于水平有限&#xff0c;目前也只是有个思路未能完全实现&#xff0c…

查看当前cmake版本支持哪些版本的Visual Studio

不同版本的的cmake对Visual Studio的版本支持不同&#xff0c;以下图示展示了如何查看当前安装的cmake支持哪些版本的Visual Studio。 1.打开cmake-gui 2.查看cmake支持哪些版本的Visual Studio

28. 使用 k8e 玩转 kube-vip with Cilium‘s Egress Gateway 特性

因为在私有云环境下,我们需要保障集群服务 APIServer地址的高可用,所以提供的方案就是使用一个 VIP 让 API Server 的流量可以负载均衡的流入集群。另外,kube-vip 还支持 Service LB,方便SVC 服务的负载均衡,结合 cilium Egress Gateway 特性可以做到集群内的容器对外访问…

canvas绘制刮涂层抽奖效果

实现的效果&#xff1a;主要用到画布设置图层覆盖效果globalCompositeOperation属性 实现的源代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"…

canvas常用的几种重叠绘图设置globalCompositeOperation

globalCompositeOperation描述了2个图形交叉的时候是什么样子&#xff0c;它的值有很多&#xff0c;这里就盗一张很经典的图&#xff1a; 我们来看一个source-in的例子吧&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset&q…

论文-分布式-并发控制-Lamport逻辑时钟

目录 前言 逻辑时钟讲解 算法类比为面包店内取号 Lamport算法的时间戳原理 Lamport算法的5个原则 举例说明 算法实现 参考文献 前言 在并发系统中&#xff0c;同步与互斥是实现资源共享的关键Lamport面包店算法作为一种经典的解决并发问题的算法&#xff0c;它的实现原…

VTM/VVC 编译与测试-- YUV与RGB空间转换

环境配置:ubuntu 18.04 一、VVC测试 软件下载: 官网下载 VVC:http://jvet.hhi.fraunhofer.de/ 这里可以选择版本。 编译工具: 在开始编译前,需要电脑的环境中中有gcc、g++、cmake、make这四个工具。 sudo apt-get install gcc g++ sudo apt-get install cmake sudo …

Android微信逆向--实现发朋友圈动态

Android微信逆向--实现发朋友圈动态 0x0 前言# 最近一直在研究Windows逆向的东西&#xff0c;想着快要把Android给遗忘了。所以就想利用工作之余来研究Android相关的技术&#xff0c;来保持对Android热情。调用微信代码来发送朋友圈动态一直是自己想实现的东西&#xff0c;研…

Internet Download Manager 逆向分析

写在前面 文章仅供学习&#xff0c;切勿用于商业用途&#xff0c;出于版权原因&#xff0c;文章不提供资源下载。 论坛上较早之前已经有前辈对IDM的序列号算法进行过逆向分析 以及最近有师傅尝试对本篇文章对象相同的版本进行了逆向分析&#xff0c;但是比较遗憾的是该文章并…

瑞萨e2studio(26)----SPI驱动TFT-LCD屏

瑞萨e2studio.26--SPI驱动TFT-LCD屏 概述视频教学csdn课程样品申请完整代码下载屏幕接口接线方式新建工程工程模板保存工程路径芯片配置工程模板选择时钟配置开始SPI配置SPI属性配置IO配置头文件定义回调函数lcd_init.clcd.c设置区域颜色显示字符串显示汉字显示图片结果演示 概…

点击查看详情 | 网页版微信客户管理系统如何操作试用?

微信作为我们日常生活中最常用的社交应用之一&#xff0c;早已成为我们与朋友、家人和同事保持联系的重要工具&#xff0c;也是营销引流的重要平台。 通过微信营销&#xff0c;可以比较精准定向亲近用户。而微信的功能并没有很能满足做微信营销的人群&#xff0c;所以我们需要借…

S5PV210裸机(五):定时器

本文主要探讨210定时器相关知识&#xff0c;210定时器主要包含PWN定时器&#xff0c;系统定时器&#xff0c;看门狗&#xff0c;RTC。 PWM定时器 210有5个PWM定时器,timer0、1、2、3通过对应PIO产生PWM波形信号并输出,timer4没有GPIO只产生内部定时器中断 PWM…

Python 安装CSF(布料模拟滤波)的环境配置

一、环境配置 1.1 下载源码: Github下载CSF库源码 1.2 解压文件如下: 二、安装CSF库 2.1在解压文件中找到python文件夹所在目录 2.2 输入cmd并回车,来打开终端窗口 2.3激活虚拟环境 通过: activate +你的虚拟环境名称。来激活安装CSF库的虚拟环境。【不执行此

k8s镜像加devops

展示 1.配套资料2.devops 3.elk日志收集 4.grafana监控 5.dashboard![在这里插入图片描述](https://img-blog.csdnimg.cn/bf294f9fd98e4c038858a6bf5c34dbdc.png 目的 学习k8s来来回回折腾很久了&#xff0c;光搭个环境就能折腾几天。这次工作需要终于静下心来好好学习了一…