大数据项目——实战项目:广告数仓(第二部分)集群环境部署

目录

第4章 广告数仓架构设计

第5章 集群环境准备

5.1 服务器准备

5.1.1 创建3台虚拟机

5.1.2 SSH无密登录配置

5.1.3 编写集群分发脚本xsync

5.1.4 JDK准备

5.1.5 环境变量配置说明

5.2 Hadoop部署

5.2.1  完全分布式运行模式(开发重点)

5.2.2  Hadoop部署

5.2.3 配置集群

5.2.4 配置历史服务器

5.2.5 配置日志的聚集

5.2.6 分发Hadoop

5.2.8 Hadoop群起脚本


第4章 广告数仓架构设计

        以下是本项目完整架构图

要点说明:

1)数据采集

        本数仓项目的数据来源有两个——外部媒体上报的广告曝光点击数据流和内部广告管理平台的数据库。

        (1)广告曝光点击数据流

        首先使用Nginx服务器接收数据请求,然后将数据落盘到日志文件。之后使用Flume采集日志文件并将数据暂时写入Kafka进行缓冲,后边再由Flume消费Kafka并将数据写入HDFS

        (2)广告管理平台数据库

        使用专门的数据库同步工具DataX进行批量同步,直接由数据库写入HDFS。

2)分析引擎

为保证报表较低的查询延迟,使用Clickhouse作为分析引擎。

3BI工具

使用FineBI制作报表。

第5章 集群环境准备

5.1 服务器准备

5.1.1 创建3台虚拟机

本项目须使用三台服务器(虚拟机),相关环境配置可参照如下博客。

大数据技术——Hadoop运行环境搭建-CSDN博客

5.1.2 SSH无密登录配置

        因为hadoop102未外配置的是NameNode,hadoop103配置的是ResourceManager,都要求对其他节点无密访问。在每台虚拟机都需要进行无密登录。都进行一下操作。

(1)hadoop102上生成公钥和私钥:

[gg@hadoop102 .ssh]$ ssh-keygen -t rsa

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

(2)将hadoop102公钥拷贝到要免密登录的目标机器上

[gg@hadoop102 .ssh]$ ssh-copy-id hadoop102

[gg@hadoop102 .ssh]$ ssh-copy-id hadoop103

[gg@hadoop102 .ssh]$ ssh-copy-id hadoop104

5.1.3 编写集群分发脚本xsync

1)xsync集群分发脚本

(1)需求:循环复制文件到所有节点的相同目录下

(2)需求分析

                ①rsync命令原始拷贝:

                rsync  -av     /opt/module      root@hadoop103:/opt/

                ②期望脚本:

                        xsync要同步的文件名称

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

(3)脚本实现

        ①在用的家目录/home/atguigu下创建bin文件夹

[gg@hadoop102 ~]$ mkdir bin

        ②在/home/atguigu/bin目录下创建xsync文件,以便全局调用

[gg@hadoop102 ~]$ cd /home/atguigu/bin

[gg@hadoop102 ~]$ vim xsync

        在该文件中编写如下代码

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
doecho ====================  $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:$pdirelseecho $file does not exists!fidone
done

③修改脚本xsync具有执行权限

[gg@hadoop102 bin]$ chmod +x xsync

④测试脚本

[gg@hadoop102 bin]$ xsync xsync

5.1.4 JDK准备

1)卸载现有JDK3台节点)

在三台机器上分别执行以下命令

[gg@hadoop102 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

         (1)rpm -qa:表示查询所有已经安装的软件包

         (2)grep -i:表示过滤时不区分大小写

         (3)xargs -n1:表示一次获取上次执行结果的一个值

         (4)rpm -e --nodeps:表示卸载软件

2)用XShell工具将JDK导入到hadoop102的/opt/software文件夹下面

3)在Linux系统下的opt目录中查看软件包是否导入成功

[atguigu@hadoop102 software]# ls /opt/software/

看到如下结果:

4解压JDK/opt/module目录下

[atguigu@hadoop102 software]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

5配置JDK环境变量

         (1)新建/etc/profile.d/my_env.sh文件

[atguigu@hadoop102 module]# sudo vim /etc/profile.d/my_env.sh

添加如下内容,然后保存(:wq)退出

#JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_212export PATH=$PATH:$JAVA_HOME/bin

         (2)让环境变量生效

[atguigu@hadoop102 software]$ source /etc/profile.d/my_env.sh

6测试JDK是否安装成功

[atguigu@hadoop102 module]# java -version

如果能看到以下结果、则Java正常安装

java version "1.8.0_212"

7分发JDK

[atguigu@hadoop102 module]$ xsync /opt/module/jdk1.8.0_212

8)分发环境变量配置文件

[atguigu@hadoop102 module]$ sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh

9分别在hadoop103hadoop104上执行source

[atguigu@hadoop103 module]$ source /etc/profile.d/my_env.sh

[atguigu@hadoop104 module]$ source /etc/profile.d/my_env.sh

5.1.5 环境变量配置说明

        Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bashrc,~/.bash_profile等,下面说明上述几个文件之间的关系和区别。

bash的运行模式可分为login shellnon-login shell

例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个login shell。而当我们执行以下命令ssh hadoop103 command,在hadoop103执行command的就是一个non-login shell。

        这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载/etc/profile~/.bash_profile~/.bashrcnon-login shell启动时会加载~/.bashrc

        而在加载~/.bashrc(实际是~/.bashrc中加载的/etc/bashrc)或/etc/profile时,都会执行如下代码片段,

        因此不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。

5.2 Hadoop部署

本项目依托Hadoop生态,故需提前在集群中安装Hadoop,Hadoop的安装和配置。

5.2.1  完全分布式运行模式(开发重点)

分析:

        1)准备3台客户机(关闭防火墙、静态IP、主机名称

        2)安装JDK

        3)配置环境变量

        4)安装Hadoop

        5)配置环境变量

        6)配置集群

        7)单点启动

        8)配置ssh

        9)群起并测试集群

5.2.2  Hadoop部署

1)集群部署规划

        注意:NameNode和SecondaryNameNode不要安装在同一台服务器

        注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

hadoop102

hadoop103

hadoop104

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

2)用SecureCRT工具将hadoop3.3.4.tar.gz导入到opt目录下面的software文件夹下面

切换到sftp连接页面,选择Linux下编译的hadoop jar包拖入,如图2-32所示

图2-33 拖入Hadoop的tar包

3)进入到Hadoop安装包路径下

[atguigu@hadoop102 ~]$ cd /opt/software/

4)解压安装文件到/opt/module下面

[atguigu@hadoop102 software]$ tar -zxvf hadoop-3.3.4.tar.gz -C /opt/module/

5)查看是否解压成功

[atguigu@hadoop102 software]$ ls /opt/module/hadoop-3.3.4

6)重命名

[atguigu@hadoop102 software]$ mv /opt/module/hadoop-3.3.4 /opt/module/hadoop

7)将Hadoop添加到环境变量

        (1)获取Hadoop安装路径

[atguigu@hadoop102 hadoop]$ pwd

/opt/module/hadoop

        (2)打开/etc/profile.d/my_env.sh文件

[atguigu@hadoop102 hadoop]$ sudo vim /etc/profile.d/my_env.sh

在profile文件末尾添加JDK路径:(shitf+g)

#HADOOP_HOMEexport HADOOP_HOME=/opt/module/hadoopexport PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbin

(3)保存后退出

:wq

        (4)分发环境变量文件

[atguigu@hadoop102 hadoop]$ sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh

(5)source 使之生效(3台节点)3台虚拟机均运行

[atguigu@hadoop102 module]$ source /etc/profile.d/my_env.sh

[atguigu@hadoop103 module]$ source /etc/profile.d/my_env.sh

[atguigu@hadoop104 module]$ source /etc/profile.d/my_env.sh

5.2.3 配置集群

1)核心配置文件

配置core-site.xml

[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop

[atguigu@hadoop102 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://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop/data</value>
</property><!-- 配置HDFS网页登录使用的静态用户为atguigu --><property><name>hadoop.http.staticuser.user</name><value>atguigu</value>
</property><!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 --><property><name>hadoop.proxyuser.atguigu.hosts</name><value>*</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理用户所属组 --><property><name>hadoop.proxyuser.atguigu.groups</name><value>*</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理的用户--><property><name>hadoop.proxyuser.atguigu.users</name><value>*</value>
</property>
</configuration>

2)HDFS配置文件

配置hdfs-site.xml

[atguigu@hadoop102 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>hadoop102:9870</value></property><!-- 2nn web端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>hadoop104:9868</value></property><!-- 测试环境指定HDFS副本的数量1 --><property><name>dfs.replication</name><value>3</value></property>
</configuration>

3)YARN配置文件

配置yarn-site.xml

[atguigu@hadoop102 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>hadoop103</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>true</value></property><property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property>
</configuration>

4)MapReduce配置文件

配置mapred-site.xml

[atguigu@hadoop102 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>

5)配置workers

[atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop/etc/hadoop/workers

在该文件中增加如下内容:

hadoop102

hadoop103

hadoop104

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

5.2.4 配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

1)配置mapred-site.xml

[atguigu@hadoop102 hadoop]$ vim mapred-site.xml

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

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

5.2.5 配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

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

开启日志聚集功能具体步骤如下:

1)配置yarn-site.xml

[atguigu@hadoop102 hadoop]$ vim yarn-site.xml

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

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

5.2.6 分发Hadoop

[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop/

5.2.7 群起集群

1)启动集群

        (1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenodedatanode进程,然后再删除datalog数据)

[atguigu@hadoop102 bin]$ cd /opt/module/hadoop/

[atguigu@hadoop102 hadoop]$ bin/hdfs namenode -format

        (2)启动HDFS

[atguigu@hadoop102 hadoop]$ sbin/start-dfs.sh

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

[atguigu@hadoop103 hadoop]$ sbin/start-yarn.sh

        (4)Web端查看HDFS的Web页面:http://hadoop102:9870/

        (5)Web端查看SecondaryNameNode

                ① 浏览器中输入:http://hadoop104:9868/status.html

                ② 查看SecondaryNameNode信息

5.2.8 Hadoop群起脚本

(1)在/home/atguigu/bin目录下创建hdp.sh

[atguigu@hadoop102 bin]$ cd /home/atguigu/bin

[atguigu@hadoop102 bin]$ vim hdp.sh

(2)写入以下内容:

#!/bin/bash
if [ $# -lt 1 ]
thenecho "No Args Input..."exit ;
fi
case $1 in
"start")echo " =================== 启动 hadoop集群 ==================="echo " --------------- 启动 hdfs ---------------"ssh hadoop102 "/opt/module/hadoop/sbin/start-dfs.sh"echo " --------------- 启动 yarn ---------------"ssh hadoop103 "/opt/module/hadoop/sbin/start-yarn.sh"echo " --------------- 启动 historyserver ---------------"ssh hadoop102 "/opt/module/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")echo " =================== 关闭 hadoop集群 ==================="echo " --------------- 关闭 historyserver ---------------"ssh hadoop102 "/opt/module/hadoop/bin/mapred --daemon stop historyserver"echo " --------------- 关闭 yarn ---------------"ssh hadoop103 "/opt/module/hadoop/sbin/stop-yarn.sh"echo " --------------- 关闭 hdfs ---------------"ssh hadoop102 "/opt/module/hadoop/sbin/stop-dfs.sh"
;;
*)echo "Input Args Error..."
;;
esac

(3)增加权限

[atguigu@hadoop102 bin]$ chmod +x hdp.sh

(4)启动集群

[atguigu@hadoop102 bin]$ hdp.sh start

日志如下。

(5)停止集群

[atguigu@hadoop102 bin]$ hdp.sh stop

日志如下

到此我们就部署好Hadoop了,完成了前五个章节,前三个章节在此文章里大数据项目——实战项目:广告数仓(第一部分)-CSDN博客

欢迎大家阅读!

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

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

相关文章

去噪、梯度与边缘检测

图像噪点消除 噪声在图像处理中指的是图像中出现的干扰因素&#xff0c;通常由采集设备或传输过程引起。噪声使得图像的亮度变得不均匀或引入了随机的干扰点。常见的噪声类型包括&#xff1a; 高斯噪声&#xff1a;符合正态分布的噪声&#xff0c;会使图像变得模糊或出现噪点。…

Java基础之switch分支语句

switch分支语句 ​ switch语句也称为分支语句&#xff0c;其和if语句有点类似&#xff0c;都是用来判断值是否相等&#xff0c;但switch默认只支持byte、short、int、char这四种类型的比较&#xff0c;JDK8中也允许String类型的变量做对比。 语法&#xff1a; switch (表达式…

8.15 哈希表中等 139 Word Break review 467 Unique Substrings in Wraparound String

139 Word Break【逐一对比vs.多种 分割 组合】 片面思考的思路&#xff1a; class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {//字符串和对应的字典&#xff0c;如果s种可以用空格分隔出一个或多个字典里的词就返回true//核心&#x…

windows 安装TVM

TVM支持在Windows环境下使用&#xff0c;但需要一些额外的配置。以下是如何在Windows Python环境中安装TVM的详细步骤。 1. 安装TVM的预备条件 在Windows上安装TVM之前&#xff0c;需要确保系统已经安装了以下工具和依赖项&#xff1a; Visual Studio: 安装包含C开发工具的V…

利用ZXing.Net Bindings for EmguCV识别条形码及绘制条形码边框17(C#)

上一篇博文&#xff1a;绘制条形码的效果不是很好&#xff1a;利用Emgucv绘制条形码边框16(C#)-CSDN博客 测试环境&#xff1a; win11 64位操作系统 visual studio 2022 ZXing.Net.Bindings.EmguCV 0.16.4 测试步骤如下&#xff1a; 1 新建.net framework 4.8的控制台项目…

Linux日常运维-主机名hosts

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 本小章内容就是Linux进阶部分的日常运维部分&#xff0c;掌握这些日常运维技巧或者方法在我们的日常运维过程中会带来很多方…

【Vue3】嵌套路由

【Vue3】嵌套路由 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…

【Linux】缓冲区和文件系统

目录 一、缓冲区 1.1 概念 1.2 用户缓冲区和内核缓冲区 二、磁盘的结构 三、文件系统 3.1 初识“块”和inode 3.2 磁盘分区和文件系统 一、缓冲区 1.1 概念 要理解什么是缓冲区&#xff0c;先看这段代码 #include <stdio.h> #include <string.h> #includ…

Linux系统驱动(十八)SPI总线(未整理)

文章目录 一、SPI总线协议简介二、SPI子系统驱动&#xff08;二&#xff09;SPI子系统API&#xff08;三&#xff09;SPI设备树节点 三、代码示例 一、SPI总线协议简介 高速、同步、全双工、非差分、总线式 传输速度在几十M 差分总线和非差分总线 非差分总线&#xff1a;受压…

江协科技STM32学习笔记(第13章 WDG看门狗)

第13章 WDG看门狗 13.1 WDG看门狗 13.1.1 WDG简介 看门狗就是程序运行的一个保障措施&#xff0c;我们得在程序中定期地喂狗&#xff0c;如果程序卡死了&#xff0c;没有在规定的时间里喂狗&#xff0c;那么看门狗硬件电路就会自动帮我们复位一下&#xff0c;防止程序长时间…

最新爆火文生图模型FLUX

在AI图片生成领域&#xff0c;Flux模型的推出引起了广泛关注。随着AI技术的不断进步&#xff0c;新的模型层出不穷&#xff0c;而Flux正是其中的一颗新星。 Flux&#xff1a;一款迅速走红的AI图片生成模型 8月初&#xff0c;初创公司Black Forest Labs推出了文本生成图像模型…

米联客-FPGA程序设计Verilog语法入门篇连载-10 Verilog语法_一般设计规范

软件版本&#xff1a;无 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用所有系列FPGA 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑&#xff01; 1概述 本小节讲解Verilog语法的一般…

合并两个有序数组(LeetCode)

题目 给你两个按 非递减顺序 排列的整数数组 和 &#xff0c;另有两个整数 和 &#xff0c;分别表示 和 中的元素数目。请你 合并 到 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数组不应由函数返回&#xff0c;而是…

Docker最佳实践进阶(一):Dockerfile介绍使用

大家好&#xff0c;上一个系列我们使用docker安装了一系列的基础服务&#xff0c;但在实际开发过程中这样一个个的安装以及繁杂命令不仅仅浪费时间&#xff0c;更是容易遗忘&#xff0c;下面我们进行Docker的进阶教程&#xff0c;帮助我们更快速的部署和演示项目。 一、什么是…

【初阶数据结构】通讯录项目(可用作课程设计)

文章目录 概述1. 通讯录的效果2. SeqList.h3. Contact.h4. SeqList.c5. Contact.c6. test.c 概述 通讯录项目是基于顺序表这个数据结构来实现的。如果说数组是苍蝇小馆&#xff0c;顺序表是米其林的话&#xff0c;那么通讯录就是国宴。 换句话说&#xff0c;通讯录就是顺序表…

个人可识别信息(PII) AI 去除 API 数据接口

个人可识别信息(PII) AI 去除 API 数据接口 ai / 隐私保护 基于 AI 模型自动去除个人识别信息&#xff08;PII&#xff09; 个人信息保护 / AI 模型 。 1. 产品功能 基于自有专业模型进行 PII 自动去除高效处理敏感信息全接口支持 HTTPS&#xff08;TLS v1.0 / v1.1 / v1.2 /…

【剑指 offer】镜像二叉树

目 录 描述&#xff1a; 操作给定的二叉树&#xff0c;将其变换为源二叉树的镜像 思路&#xff1a; 仔细观察可以发现&#xff0c;所谓的二叉树镜像本质是自顶向下(or自底向上)进行左右子树交换的过程 public class Solution {public void Mirror(TreeNode root) {if(root nu…

音视频开发继续学习

RGA模块 RGA模块定义 RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说&#xff1a;要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频&#xff0c;此时就要用到RGA模块了。 RGA模块结构体定义 RGA区域属性结构体 imgType&am…

LeetCode-3148. 矩阵中的最大得分

本人算法萌新,为秋招找工作开始磨炼算法,算法题均用python实现,如果我有哪些地方做的有问题的,还请大家不吝赐教. 1.题干 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格&#xff08;不必相邻&…

提高办公效率,四款语音转文字工具推荐!

无论是在会议记录、采访速记还是日常笔记中&#xff0c;语音转文字技术都展现出了其独特的价值。接下来是就为大家推荐几款市面上广受好评的语音转文字工具&#xff01; 365在线转文字 链接&#xff1a;https://www.pdf365.cn/ 365在线转文字是一款非常实用的在线语音转文字…