Spark和Hadoop的安装

实验内容和要求

1.安装HadoopSpark

       进入Linux系统,完成Hadoop伪分布式模式的安装。完成Hadoop的安装以后,再安装Spark(Local模式)。

2HDFS常用操作

        使用hadoop用户名登录进入Linux系统,启动Hadoop,参照相关Hadoop书籍或网络资料,或者也可以参考本教程官网的“实验指南”栏目的“HDFS操作常用Shell命令”,使用Hadoop提供的Shell命令完成如下操作:

        (1)启动Hadoop,在HDFS中创建用户目录“/user/hadoop”;

        (2)在Linux系统的本地文件系统的“/home/hadoop”目录下新建一个文本文件test.txt,并在该文件中随便输入一些内容,然后上传到HDFS的“/user/hadoop”目录下;

        (3)把HDFS中“/user/hadoop”目录下的test.txt文件,下载到Linux系统的本地文件系统中的“/home/hadoop/下载”目录下;

        (4)将HDFS中“/user/hadoop”目录下的test.txt文件的内容输出到终端中进行显示;

        (5)在HDFS中的“/user/hadoop”目录下,创建子目录input,把HDFS中“/user/hadoop”目录下的test.txt文件,复制到“/user/hadoop/input”目录下;

        (6)删除HDFS中“/user/hadoop”目录下的test.txt文件,删除HDFS中“/user/hadoop”目录下的input子目录及其子目录下的所有内容。

3.  Spark读取文件系统的数据

        (1)在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;

        (2)在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;

        (3)编写独立应用程序,读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。

实验环境

VMware 16.1.2 build-17966106

ubuntu-22.04.4-desktop-amd64.iso

Java 11

scala-2.13.13.tgz

hadoop-3.3.6.tar.gz

spark-3.5.1-bin-hadoop3-scala2.13.tgz

sbt-1.9.9.tgz

安装JDK

安装Java

sudo apt update
sudo apt upgrade
sudo apt-get install openjdk-11-jre openjdk-11-jdk

 配置环境变量

vim ~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

让路径生效

source ~/.bashrc

 验证是否成功

安装Scala

下载解压

Scala 2.13.13 | The Scala Programming Languageicon-default.png?t=N7T8https://www.scala-lang.org/download/2.13.13.html确保文件的路径是~/下载/scala-2.13.13.tgz

将文件解压到/usr/local下并且更名为scala

sudo tar -zxf ~/下载/scala-2.13.13.tgz -C /usr/local   
cd /usr/local/
sudo mv ./scala-2.13.13 ./scala 

配置

让普通用户拥有对scala目录的权限

sudo chown -R hadoop ./scala 

配置环境变量 

vim ~/.bashrc

export PATH=$PATH:/usr/local/scala/bin

source ~/.bashrc

验证是否成功 

安装ssh 

安装

sudo apt install openssh-server

登录

ssh localhost

切换到root用户

su –

修改sshd_config

vim /etc/ssh/sshd_config

添加 PasswordAuthentication yes

配置免密登录

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

一直回车即可

安装hadoop

https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gzicon-default.png?t=N7T8https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

下载解压

sudo tar -zxf ~/下载/hadoop-3.3.6.tar.gz -C /usr/local   
cd /usr/local/
sudo mv ./hadoop-3.3.6/ ./hadoop           

配置

sudo chown -R hadoop ./hadoop       # 修改文件权限

添加hadoop环境变量

vim ~/.bashrc

export HADOOP_HOME=/usr/local/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

修改hadoop-env.sh与yarn-env.sh文件

cd  /usr/local/hadoop/etc/hadoop
vim hadoop-env.sh
vim yarn-env.sh

在最后添加

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

修改core-site.xml 和 hdfs-site.xml

cd /usr/local/hadoop/etc/hadoop/
vim  core-site.xml

 将<configuration>内容修改如下:

<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property><property><name>hadoop.http.staticuser.user</name> #解决web端无法删除上传文件<value>hadoop</value></property>
</configuration>
vim hdfs-site.xml

  将<configuration>内容修改如下:

<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/tmp/dfs/data</value></property>
</configuration>

格式化NameNode (仅需要执行一次即可,之后不需要执行)

cd /usr/local/hadoop
./bin/hdfs namenode -format

开启 NameNode 和 DataNode 守护进程

cd /usr/local/hadoop
./sbin/start-dfs.sh

配置YARN

修改 mapred-site.xml文件

cd /usr/local/hadoop/etc/hadoop
vim mapred-site.xml

  将<configuration>内容修改如下: 

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

修改vim yarn-site.xml文件

vim vim yarn-site.xml

  将<configuration>内容修改如下: 

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.hostname</name><value>localhost</value></property>
</configuration>

修改start-yarn.sh和stop-yarn.sh

cd ./sbin
vim start-yarn.sh
vim stop-yarn.sh

在文件中加入以下三行:

YARN_RESOURCEMANAGER_USER=root

HADOOP_SECURE_DN_USER=yarn

YARN_NODEMANAGER_USER=root

启动YARN

cd /usr/local/hadoop
./sbin/start-yarn.sh

开启历史服务器

cd /usr/local/hadoop
./bin/mapred --daemon start historyserver

localhosticon-default.png?t=N7T8http://localhost:9870/

安装Spark

下载 |Apache Sparkicon-default.png?t=N7T8https://spark.apache.org/downloads.html

sudo tar -zxf ./spark-3.5.1-bin-hadoop3-scala2.13.tgz -C /usr/local
cd /usr/local
sudo mv spark-3.5.1-bin-hadoop3-scala2.13/ spark

配置

sudo chown -R hadoop:hadoop spark   # 此处的 hadoop 为你的用户名

修改spark-env.sh

cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
vim ./conf/spark-env.sh

 在第一行下面添加以下配置信息

export SPARK_MASTER_PORT=7077
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP=localhost
export SPARK_LOCAL_IP=localhost

启动spark

cd /usr/local/spark
./sbin/start-all.sh

测试spark

cd /usr/local/spark
bin/run-example SparkPi 2>&1 |grep "Pi is"

启动shell

cd /usr/local/spark
bin/spark-shell

安装sbt

下载解压

下载 |SBT公司 (scala-sbt.org)icon-default.png?t=N7T8https://www.scala-sbt.org/download/

sudo tar -zxvf ./sbt-1.9.9.tgz -C /usr/local
cd /usr/local/sbt

 下面慢可以用这个

echo "deb https://repo.scala-sbt.org/scalasbt/debian all main" | sudo tee /etc/apt/sources.list.d/sbt.list
echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | sudo tee /etc/apt/sources.list.d/sbt_old.list
curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | sudo apt-key add
sudo apt-get update
sudo apt-get install sbt

配置

sudo chown -R hadoop /usr/local/sbt
cd /usr/local/sbt
cp ./bin/sbt-launch.jar ./
vim /usr/local/sbt/sbt

 内容如下:

#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
chmod u+x /usr/local/sbt/sbt

启动sbt

cd /usr/local/sbt
./sbt sbtVersion

新建项目

sudo mkdir -p /example/sparkapp/src/main/scala
cd /example/sparkapp/src/main/scala
sudo touch SimpleApp.scala
sudo vim SimpleApp.scala 

 内容如下:

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConfobject SimpleApp {
def main(args: Array[String]) {val logFile = "file:///usr/local/spark/README.md" // Should be some file on your systemval conf = new SparkConf().setAppName("Simple Application")val sc = new SparkContext(conf)val logData = sc.textFile(logFile, 2).cache()val numAs = logData.filter(line => line.contains("a")).count()val numBs = logData.filter(line => line.contains("b")).count()println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))}
}

创建.sbt文件

cd /example/sparkapp
sudo touch build.sbt
sudo vim build.sbt
name := "Simple Project"
version := "1.0"
scalaVersion := "2.13.13"
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.5.1"

打包

/usr/local/sbt/sbt package

 如果出现无法创建文件的错误,需要在前面加一个sudo.或者整个在root用户下面安装配置。

[error] [launcher] error during sbt launcher: java.io.IOException: Could not create directory /sparkapp/target/global-logging: java.nio.file.AccessDeniedException: /sparkapp/target

执行

cd /example/sparkapp
spark-submit --class "SimpleApp" ./target/scala-2.13/simple-project_2.13-1.0.jar 2>&1 | grep "Lines"

安装Maven

安装

apt install maven

新建测试项目

midir -p /example/sparkapp2/src/main/scala
cd /example/sparkapp2/src/main/scala
sudo touch SimpleApp.scala
sudo vim SimpleApp.scala
/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConfobject SimpleApp {
def main(args: Array[String]) {val logFile = "file:///usr/local/spark/README.md" // Should be some file on your systemval conf = new SparkConf().setAppName("Simple Application")val sc = new SparkContext(conf)val logData = sc.textFile(logFile, 2).cache()val numAs = logData.filter(line => line.contains("a")).count()val numBs = logData.filter(line => line.contains("b")).count()println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))}
}

创建pom.xml文件

cd /example/sparkapp2
sudo touch pom.xml
sudo vim pom.xml
<project><groupId>shuda.hunnu</groupId><artifactId>simple-project</artifactId><modelVersion>4.0.0</modelVersion><name>Simple Project</name><packaging>jar</packaging><version>1.0</version><repositories><repository><id>jboss</id><name>JBoss Repository</name><url>http://repository.jboss.com/maven2/</url></repository></repositories><dependencies><dependency> <!-- Spark dependency --><groupId>org.apache.spark</groupId><artifactId>spark-core_2.13</artifactId><version>3.5.1</version></dependency></dependencies><build><sourceDirectory>src/main/scala</sourceDirectory><plugins><plugin><groupId>org.scala-tools</groupId><artifactId>maven-scala-plugin</artifactId><executions><execution><goals><goal>compile</goal></goals></execution></executions><configuration><scalaVersion>2.13.13</scalaVersion><args><arg>-target:jvm-11</arg></args></configuration></plugin></plugins></build>
</project>

修改setting.xml文件

sudo vim /usr/share/maven/conf/settings.xml
sudo vim /etc/maven/settings.xml

需要把文件中原本mirror标题的地方给取消注释,然后添加如下内容: 

<mirror>  <id>alimaven</id>   <name>aliyun maven</name>     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  <mirrorOf>central</mirrorOf>  
</mirror>

 如果标签缺失就会出现如下报错(双标签变成单标签)

[ERROR] Error executing Maven.
[ERROR] 1 problem was encountered while building the effective settings
[FATAL] Non-parseable settings /usr/share/maven/conf/settings.xml: end tag name </settings> must match start tag name <mirrors> from line 146 (position: TEXT seen ...</activeProfiles>\n  -->\n</settings>... @261:12)  @ /usr/share/maven/conf/settings.xml, line 261, column 12

打包执行

.jar文件的路径可能会发生改变。

sudo /usr/share/maven/bin/mvn package
spark-submit --class "SimpleApp" ./target/simple-project-1.0.jar 2>&1 | grep "Lines"

启动Hadoop,在HDFS中创建用户目录“/user/hadoop”

cd /usr/local/hadoop
./sbin/start-dfs.sh                #启动HDFS
./sbin/start-yarn.sh               #启动YARN
hadoop fs -mkdir -p /user/Hadoop   #创建用户目录/user/hadoop
hadoop fs -ls /user                #检查目录是否创建成功

在Linux系统的本地文件系统的“/home/hadoop”目录下新建一个文本文件test.txt,并在该文件中随便输入一些内容,然后上传到HDFS的“/user/hadoop”目录下

sudo vim test.txt
hadoop fs -put test.txt /user/hadoop

不能重复上传put: `/user/hadoop/test.txt': File exists

把HDFS中“/user/hadoop”目录下的test.txt文件,下载到Linux系统的本地文件系统中的“/home/hadoop/下载”目录下

sudo rm test.txt             #先将原始位置上面的test.txt删除
hadoop fs -get /user/hadoop/test.txt /home/hadoop/

将HDFS中“/user/hadoop”目录下的test.txt文件的内容输出到终端中进行显示

hadoop fs -cat /user/hadoop/test.txt

在HDFS中的“/user/hadoop”目录下,创建子目录input,把HDFS中“/user/hadoop”目录下的test.txt文件,复制到“/user/hadoop/input”目录下

hadoop fs -mkdir -p /user/hadoop/input

删除HDFS中“/user/hadoop”目录下的test.txt文件,删除HDFS中“/user/hadoop”目录下的input子目录及其子目录下的所有内容

hadoop fs -rm /user/hadoop/test.txt

hadoop fs -rm -r /user/hadoop/input  #用hdfs dfs 替代hadoop fs也行

这里删除目录是用-r,不能用-rf。-rm: Illegal option -rf

在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数

cd /usr/local/spark
./sbin/start-all.sh
bin/spark-shell #启动spark-shell

val fileData=sc.textFile("file:/home/hadoop/test.txt")
val count=fileData.count()

在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数 

val fileData=sc.textFile("/user/hadoop/test.txt")
val count=fileData.count()

不写file,默认是hdfs

val fileData=sc.textFile("hdfs:/user/hadoop/test.txt")
val count=fileData.count()

编写独立应用程序,读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令

创建项目

sudo mkdir -p /example/sparkapp3/src/main/scala
cd /example/sparkapp3/src/main/scala
sudo touch SimpleApp.scala
sudo vim SimpleApp.scala 
/*HDFStest.scala */import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConfobject SimpleApp {def main(args: Array[String]): Unit = {val logFile ="hdfs:/user/hadoop/test.txt"val conf = new SparkConf().setAppName("Simple Application")val sc = new SparkContext(conf)val logData = sc.textFile(logFile, 2)val num = logData.count()printf("The num of this file is %d\n", num)}
} 

创建.sbt文件 

cd /example/sparkapp3
sudo touch build.sbt
sudo vim build.sbt
name := "Simple Project"
version := "1.0"
scalaVersion := "2.13.13"
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.5.1"

 打包执行

这个--class,应该是需要和类名保持一致的,为了方便,我把类名还是改成了SimpleApp.

/usr/local/sbt/sbt package
spark-submit --class " SimpleApp " ./target/scala-2.13/simple-project_2.13-1.0.jar  2>&1 | grep "num" 

 如果这个是直接抄网上的话,有的路径不对(这个路径最好与前面保持一致,网上的就是端口,两种方法的路径都不一样,简直是误人子弟),我也不知道他们是怎么运行出来的,就很无语,而且都是给图片。

总结

在HDFS中使用命令和本地差不多,但是还是有点小区别,前面是用hadoop fs -,或者hdfs dfs -,然后命令的参数可能发生了变化,编写scala程序还是有点小问题,主要卡的最久的就是在网上看了一个觉得可以运行出来,结果一直显示路径错误了,结果仔细一看,放的位置都不一样,服了。

需要在.bashrc中粘贴这些语句。

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:/usr/local/scala/bin
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
export PATH=$PATH:$SPARK_HOME/sbin
export LD_LIBRARY_PATH=/usr/local/hadoop/lib/native
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

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

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

相关文章

Flink基础概念及算子

Flink基础概念-算子 一、Flink概述二、Flink集群角色和核心概念1.Flink运行时架构&#xff08;Standealone会话模式&#xff09;2.并行度&#xff08;Parallelism&#xff09;3.算子链&#xff08;Operator Chain&#xff09;4. 任务槽&#xff08;Task Slots&#xff09; 三、…

GO环境及入门案例

文章目录 简介一、win GO开发环境安装二、Linux go运行环境二、GO代码入门2.1 导包案例2.2 赋值2.3 变量、函数2.4 三方库使用 简介 go不是面向对象语言&#xff0c; 其指针、结构体等比较像C&#xff0c;知名的go 开源项目有docker k8s prometheus node-exporter等 一、win …

C语言语法进阶

条件运算符 条件运算符是 C 语言中唯一的一种三目运算符。三目运算符代表有三个操作数&#xff1b;双目 运算符代表有两个操作数&#xff0c;如逻辑与运算符就是双目运算符&#xff1b;单目运算符代表有一个操作数&#xff0c; 如逻辑非运算符就是单目运算符。运算符也称操作符…

arping命令详解

arping – send ARP REQUEST to a neighbour host. arping 是一个在网络中发送 ARP 请求以查找特定 IP 地址对应的 MAC 地址的命令行工具。它的功能类似于 ping 命令&#xff0c;基于ARP协议报文的交互机制&#xff0c;只能测试同一网段或子网的网络主机的连通性。 ARP 是 Add…

软件杯 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

如何使用JSONB类型在PostgreSQL中存储和查询复杂的数据结构?

文章目录 解决方案1. 创建包含JSONB列的表2. 插入JSONB数据3. 查询JSONB数据4. 创建索引以优化查询性能 示例代码结论 在PostgreSQL中&#xff0c;JSONB是一种二进制格式的JSON数据类型&#xff0c;它允许你在数据库中存储和查询复杂的JSON数据结构。与普通的JSON类型相比&…

《操作系统导论》第27章读书笔记:插叙:线程API

《操作系统导论》第27章读书笔记&#xff1a;插叙&#xff1a;线程API —— 2024-04-21 杭州 上午 本章讲得比较啰嗦&#xff0c;问题是本章的二级标题后面都会作为一个章节来讲&#xff0c;所以本章属于概况介绍类章节&#xff0c;另外这几个并发的章节使用的都是是POSIX线程…

【python】启动一个公司级项目的完整报错和解决方案

启动一个项目对于新手都是不容易的事情 操作 打开项目 使用pyCharm打开python项目以后&#xff0c;先找main方法&#xff0c;一般在根目录有一个.py的文件 点进去以后会让你配置Python解释器 每个项目都有自己的一个虚拟环境&#xff0c;配置自己的解释器&#xff0c;可能…

windows驱动开发-设备栈

设备栈是windows内核中非常重要的部分&#xff0c;这部分理解可以让我们在调试中节省大量的时间&#xff0c; 在windows NT体系中&#xff0c;内核所有的设备被按照连接次序加载到设备树上&#xff0c;这棵树的根节点是ROOT节点&#xff0c;每一个设备可以从当前路径一直遍历到…

QMT和Ptrade有什么区别?该如何选择?

QMT&#xff08;Quantitative Model Trading&#xff09;和Ptrade&#xff08;Professional Trading&#xff09;是两种不同的交易策略和方法&#xff0c;它们在金融市场中被广泛应用。了解它们的区别有助于投资者根据自己的需求和目标做出选择&#xff1a; QMT&#xff08;量…

将记录从excel当中导出为.sql文件,再新增到数据库

一、背景 临时遇到了一个需求&#xff0c;比如根据人员的名字查询对应记录&#xff0c;看起来还是很简单的&#xff0c;直接用select查询就可以&#xff0c;然而如果此时存在以下情况&#xff1a; 数据库根本就没有人员信息表&#xff1b;------这个倒是好操作&#xff1b;现…

AlDente Pro for mac最新激活版:电池长续航软件

AlDente Pro是一款专为Mac用户设计的电池管理工具&#xff0c;旨在提供电池安全和健康管理的一站式解决方案。它具备实时监控电池状态的功能&#xff0c;让用户随时了解电池的电量、充电次数、健康状态等信息。 AlDente Pro for mac最新激活版下载 同时&#xff0c;AlDente Pro…

分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测

分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测 目录 分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Mat…

Vue3 + Js + Element-Plus + VueX后台管理系统通用解决方案

前言 本文是作为学习总结而写的一篇文章&#xff0c;也是方便以后有相关需求&#xff0c;可以直接拿来用&#xff0c;也算是记录吧&#xff0c;文中有一些文件的引入&#xff0c;没给出来&#xff0c;完整项目地址&#xff08;后续代码仓库放这里&#xff09; 1、layout解决方…

【Python性能优化】list、array与set

list、array与set 详述测试代码 详述 本文对比 list 与 set 在插入和取值时的性能差异&#xff0c;以提供一条什么时候该选择什么数据类型的建议。先上结果&#xff1a; array 与 list 的不同&#xff1a; 内存方面 array 是 C array 的包装&#xff0c;它直接存储数据&#xf…

【002_音频开发_基础篇_Linux音频架构简介】

002_音频开发_基础篇_Linux音频架构简介 文章目录 002_音频开发_基础篇_Linux音频架构简介创作背景Linux 音频架构ALSA 简介ASoC 驱动硬件架构软件架构MachinePlatformCodec ASoC 驱动 PCMALSA设备文件结构 ALSA 使用常用概念alsa-libALSA Open 流程ALSA Write 流程2种写入方法…

Eclipse+Java+Swing实现学生信息管理系统-TXT存储信息

一、系统介绍 1.开发环境 操作系统&#xff1a;Win10 开发工具 &#xff1a;Eclipse2021 JDK版本&#xff1a;jdk1.8 存储方式&#xff1a;Txt文件存储 2.技术选型 JavaSwingTxt 3.功能模块 4.工程结构 5.系统功能 1.系统登录 管理员可以登录系统。 2.教师-查看学生…

打破国外垄断|暴雨发布纯血国产电脑

要说现在国产手机这边已然进入纯自研模式&#xff0c;但电脑这边却还是仍未打破国外技术垄断。但就在刚刚&#xff0c;暴雨发布自研架构台式机open Station X &#xff0c;这是纯血鸿蒙系统之后国产又一款纯血产品发布&#xff01;标志的我们已经彻底打破西方在硬件及软件方面的…

c++ - 空间申请和释放 new/delete

文章目录 一、c/c内存分布二、new/delete 的使用三、malloc/free 和 new/delete 的对比四、new/delete 的实现原理五、匹配问题 一、c/c内存分布 求下面各个变量的位置 // c/c内存分布int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar …

PyTorch与深度学习:探索现代神经网络的魅力

在科技飞速发展的今天&#xff0c;深度学习作为人工智能领域的重要分支&#xff0c;已经在图像识别、自然语言处理、语音识别等多个领域取得了突破性的进展。而PyTorch&#xff0c;作为一款开源的深度学习框架&#xff0c;以其简洁易用、动态计算图等特性&#xff0c;赢得了广大…