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

Spark 程序开发与提交:本地与集群模式全解析

Spark 的介绍与搭建:从理论到实践-CSDN博客

Spark 的Standalone集群环境安装与测试-CSDN博客

PySpark 本地开发环境搭建与实践-CSDN博客

目录

一、本地开发与远程提交测试

(一)问题背景

(二)解决方案

集群环境准备

Windows 指定远程解析器​

问题

验证是否已经安装

(三)代码提交到集群

自动提交

手动提交

(四)代码实现与参数传递

单词统计案例

运行过程中出现错误

修改配置文件

参考

二、集群提交:spark - submit 脚本

(一)复习

(二)spark - submit 的用法

任务的命令格式

具体案例讲解

参数详解

(三)Driver 驱动进程和 Executor 计算进程

(四)实战案例

WordCount 程序提交示例

编写提交任务的命令

本地模式测试

Standalone 模式

(五)Driver 启动位置:client 模式与 cluster 模式

基本概念

工作流程对比​编辑

集群提交:deploy mode

三、总结


        在大数据处理领域,Apache Spark 是一款强大的分布式计算框架。它提供了高效、灵活的数据处理能力,广泛应用于各种数据密集型应用场景。无论是在本地开发环境还是在集群环境中,正确地开发和提交 Spark 程序都是至关重要的。本文将深入探讨 Spark 程序在本地开发并远程提交到集群测试的过程,以及使用 spark - submit 脚本在集群模式下提交程序的相关知识,包括参数配置、运行模式等内容。

一、本地开发与远程提交测试

(一)问题背景

        在本地开发 Spark 程序时,常常会面临一些挑战。比如,当使用 HDFS 上的数据进行开发时,数据量可能过大,导致本地运行消耗大量本地资源且运行时间很长。因此,需要一种便捷的方法,能够在本地编写代码后,通过简单操作将代码自动提交到集群上运行。

(二)解决方案

集群环境准备

首先要启动集群,在第一台机器上执行以下命令:

start - dfs.sh
cd /opt/installs/spark
sbin/start - master.sh
sbin/start - workers.sh
sbin/start - history - server.sh

Windows 指定远程解析器

        创建一个用于同步本地代码到服务上的文件夹。在 Linux 上创建同步目录,将 Windows 上的代码和数据同步到/root/pyspark_code目录下:

mkdir -p /root/pyspark_code

这样,后续右键运行代码时,就可以将代码自动提交给集群运行。如果需要换回本地运行,可以相应地切换环境。

问题

解决方案:在bigdata01中,安装pyspark。

我们在linux上配置了阿里云的源,不代表在base中也可以使用,运行时需要带上源地址
pip install pyspark==3.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
验证是否已经安装
pip list 或者  conda list
也可以这么干:
pip list | grep pyspark

下载完成之后,重启一下 pycharm.

(三)代码提交到集群

自动提交

手动提交

同步后,成功会显示绿色,在linux上查看,有代码:

(四)代码实现与参数传递

单词统计案例
import os
import timefrom pyspark import SparkContext, SparkConf
import sysif __name__ == '__main__':# 配置环境os.environ['JAVA_HOME'] = '/opt/installs/jdk'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = '/opt/installs/hadoop'# 配置base环境Python解析器的路径os.environ['PYSPARK_PYTHON'] = '/opt/installs/anaconda3/bin/python3'  # 配置base环境Python解析器的路径os.environ['PYSPARK_DRIVER_PYTHON'] = '/opt/installs/anaconda3/bin/python3'# 获取sc 对象conf = SparkConf().setMaster("spark://bigdata01:7077").setAppName("wordcount单词统计")sc = SparkContext(conf=conf)print(sc)# 编写各种需求代码print(sys.argv[0])# 读取hdfs上的数据fileRdd = sc.textFile(sys.argv[1])filterRdd = fileRdd.filter(lambda line:len(line.strip()) > 0)flatMapRdd = filterRdd.flatMap(lambda line: line.split())mapRdd = flatMapRdd.map(lambda word: (word,1))reduceBykeyRdd = mapRdd.reduceByKey(lambda total,num : total + num)reduceBykeyRdd.saveAsTextFile(sys.argv[2])#time.sleep(10000)# 关闭scsc.stop()

运行的话,直接在本地右键运行即可,以上代码需要传递参数,所以在ide工具中写。

运行过程中出现错误
Initial job has not accepted any resources; check your cluster UI to ensure that workers are registe

有可能是以下几个问题:

1、集群资源不足,关闭掉没用的资源

2、目前集群中有其他任务,占用了资源,直接关闭掉

修改配置文件

修改 worker 的内存大小:

如何关闭呢,http://bigdata01:8080

选择任务后面的 【kill】 按钮

参考

spark报错:WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI..._initial job has not accepted any resources; check -CSDN博客

二、集群提交:spark - submit 脚本

(一)复习

在 Pycharm 中开发好的程序要在 Linux 中执行,可以使用spark - submit脚本。例如:

/opt/installs/spark/bin/spark - submit --master spark://bigdata01:7077 /opt/installs/spark/examples/src/main/python/pi.py 200

spark - submit的作用是将写好的代码提交到 Spark 环境(可能是本地或集群环境)运行,它是基于 Linux 平台实现 Spark 程序提交运行的客户端工具。

(二)spark - submit 的用法

任务的命令格式
提交任务的命令:
spark-submit [options] <app jar | pythonfile | R file> [app arguments]杀死一个正在运行的任务
spark-submit --kill [submission ID] --master [spark://...]查看某个任务的状态:
spark-submit --status [submission ID] --master [spark://...]


以上这些,其实只需要学习如何提交任务即可,因为我们有图形化界面
http://bigdata01:8080 

具体案例讲解
# 提交程序的语法
# spark-submit [可选的选项] Python文件 Python文件中用到的参数
spark-submit --master local[2] / spark://bigdata01:7077 / yarn \
……
hdfs://bigdata01:9820/spark/app/pyspark_core_word_args.py /spark/wordcount/input /spark/wordcount/output
参数详解
  • --master:用于指定程序运行的模式,有本地模式(--master local)、Standalone 模式(--master spark://master:7077)、YARN 模式(--master yarn)等 5 种模式,其作用等同于在代码中设置setMaster
  • --deploy - mode:用于指定 Driver 进程运行位置,重点内容,后面详细讲解。
  • --name:用于指定程序的名称,等同于代码中的setAppName
  • --jars:指定一些额外的 jar 包,如读写 MySQL 时需要的 MySQL 驱动包。
  • --conf:指定当前程序运行的额外配置,等同于代码中的set

(三)Driver 驱动进程和 Executor 计算进程

Spark 程序在集群模式运行时会启动两种进程:Driver 驱动进程和 Executor 计算进程,每种进程运行都需要资源。

  • Driver 进程:每个程序有 1 个,负责申请资源、解析代码、构建 Job/Task、分配调度 Task、监控 Task 运行,构建有向无环图 DAG。
  • Executor 进程:每个程序可以有多个,分布式启动在多台节点上,负责运行 Driver 分配的 Task 任务。可以类比 MR 程序运行在 YARN 上,Driver 类似于 Application Master(项目经理),Executor 类似于 Container(包含 Map Task、ReduceTask 等进程)。

此外,还有一些与资源相关的参数

  • Driver 资源选项
    • --driver - memory:指定 Driver 进程能够使用的内存大小,默认是 1G。
    • --driver - cores:指定 Driver 进程能够使用的 CPU 核数,默认是 1Core。
    • --supervise:指定如果 Driver 故障,就自动重启。
  • Executor 资源选项
    • --executor - memory:指定每个 Executor 能够使用的内存。
    • --executor - cores:指定每个 Executor 能够使用的 CPU。
    • --total - executor - cores:Standalone 集群模式下,指定所有 Executor 总共使用的 CPU 核数,用于间接指定 Executor 的个数。
    • --num - executors:YARN 集群模式下,直接指定 Executor 的个数。
    • --queue:指定提交程序到哪个队列中运行。

以上这些参数,还可以直接写在代码中,可以配置在conf文件

加载顺序:优先级:代码中配置【set】 > 参数选项【--conf】 > 配置文件【公共配置:spark-defualt.conf】

默认配置 -> 集群管理器配置 -> 环境变量配置 -> 命令行参数 -> 用户提供的SparkConf配置 -> 执行时环境变量配置

优先级最高的:

用户提供的SparkConf配置 > 命令行参数 > 公共的配置(spark-default.conf)> 默认配置

(四)实战案例

WordCount 程序提交示例

上传 Python 代码文件时要注意注释掉代码中的master、本地环境变量相关内容,因为代码中的设置优先级较高,去掉这些才能使用spark - submit中编写的配置。以下是一个示例代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-from pyspark import SparkContext, SparkConf
import os
import sys"""
-------------------------------------------------Description :	TODO:用于实现词频统计SourceFile  :	04.pyspark_core_wordcount_hdfs_args
-------------------------------------------------
"""if __name__ == '__main__':# todo:0-设置系统环境变量# os.environ['JAVA_HOME'] = 'D:/jdk1.8.0_241'# os.environ['HADOOP_HOME'] = 'D:/hadoop-3.3.0'# os.environ['PYSPARK_PYTHON'] = 'D:/Anaconda/python.exe'# os.environ['PYSPARK_DRIVER_PYTHON'] = 'D:/Anaconda/python.exe'# os.environ['HADOOP_USER_NAME'] = 'root'# todo:1-构建SparkContext# 甚至 任务的名字都可以不写,让提交任务的时候指定conf = SparkConf().setAppName("SparkSubmitApp")# .setMaster("local[2]")\sc = SparkContext(conf=conf)# todo:2-数据处理:读取、转换、保存# step1: 读取数据:SparkContext对象负责读取文件,用传递的第二个参数作为程序的输入地址input_rdd = sc.textFile(sys.argv[1])# 输出第一行# print(input_rdd.first())# 打印总行数# print(input_rdd.count())# step2: 处理数据rs_rdd = input_rdd\.filter(lambda line: len(line.strip()) > 0)\.flatMap(lambda line: line.strip().split(" "))\.map(lambda word: (word, 1))\.reduceByKey(lambda tmp,item: tmp+item)# step3: 保存结果# 打印结果rs_rdd.foreach(lambda x: print(x))# 结果保存到文件中:路径不能提前存在,将第二个参数作为输出路径rs_rdd.saveAsTextFile(sys.argv[2])# todo:3-关闭SparkContextsc.stop()

编写提交任务的命令
本地模式测试
/opt/installs/spark/bin/spark-submit \
--master local[2] \
/home/pyspark_core_word_args.py \
/home/data.txt \
/home/output01

如果出现以上这个是因为,本地模式之前配置集群时软连接已经被毁了,读取数据默认是去hdfs上读取的,没结果,假如你想运行创建软连接

rm -rf /opt/installs/spark
ln -s /opt/installs/spark-local  /opt/installs/spark

Standalone 模式

创建软连接

rm -rf /opt/installs/spark
ln -s /opt/installs/spark-standalone  /opt/installs/spark

没指定资源的写法 

/opt/installs/spark/bin/spark-submit \
--master spark://bigdata01:7077 \
/home/_06_WordCount_远程.py \
hdfs://bigdata01:9820/spark/wordcount/input \
hdfs://bigdata01:9820/spark/wordcount/jiqun01

指定资源的写法

方法一

/opt/installs/spark/bin/spark-submit \
--master spark://bigdata01:7077 \
--driver-memory 512M \
--driver-cores 1 \
--supervise \
--executor-memory 1G \
--executor-cores 1 \
--total-executor-cores 2 \
/home/_06_WordCount_远程.py \
hdfs://bigdata01:9820/spark/wordcount/input \
hdfs://bigdata01:9820/spark/wordcount/jiqun02

方法二 

/opt/installs/spark/bin/spark-submit  \
--master spark://bigdata01:7077 \
--deploy-mode client \
--driver-memory 1G  \
--driver-cores 1  \
--supervise  \
--executor-cores 1   \
--executor-memory 1G   \
--total-executor-cores 2  \
/root/pyspark_code/main/Demo06.py /spark/wordcount/input/data.txt /spark/wordcount/output09 

(五)Driver 启动位置:client 模式与 cluster 模式

基本概念

--deploy-mode client | cluster 只有这两个

当你提交任务时,假如等于 client , 此时Driver 进程在提交任务的那台机器上运行。假如在bigdata01上提交任务 spark-submit ,Driver 就在bigdata01上运行。

假如 等于cluster,此时driver 在某一台服务器上运行。集群上哪一台都可以。

pyspark 不支持 cluster ,支持 client

集群模式下任何一个Spark程序都包含两种进程Driver和Executor
程序提交以后,会先启动Driver进程
Driver进程:驱动进程,每一个Spark程序都有1个向主节点申请资源去启动Executor进程
Driver等待所有Executor都启动完成会解析代码变成Task任务
Driver会将Task任务调度分配给Executor去运行,并且监控所有Task运行

Executor进程:计算进程,每一个Spark程序都至少有1个
Executor进程会利用Worker节点的资源运行
所有Executor一旦启动成功,向Driver反向注册负责运行Driver所分配所有Task任务

工作流程对比

step1:客户端提交程序给主节点
step2:主节点会根据提交参数在对应的位置启动Driver进程
step3:Driver向主节点申请启动Executor计算进程
step4:Master根据配置在Worker节点上启动对应的Executor
step5:所有Executor启动成功以后会向Driver反向注册
step6:Driver解析代码,根据代码构建Task,分配给Executor运行,并监控所有Task

集群提交:deploy mode

程序启动之后,Driver在哪里,取决于提交任务的时候deploy mode 的值是什么

DEPLOY_MODE 这个值只有两个,一个是client ,一个是cluster

client:默认值,表示Driver运行在客户端节点上【在哪台机 器提交代码的哪台机器就是客户端】

cluster:建议值,表示Driver可以随机运行在某台从节点上【工作中一般都用cluster模式】

# deploy-mode ==client
/opt/installs/spark/bin/spark-submit \
--master spark://bigdata01:7077 \
--deploy-mode client \
--driver-memory 512M \
--driver-cores 1 \
--supervise \
--executor-memory 1G \
--executor-cores 1 \
--total-executor-cores 2 \/home/pyspark_core_word_args.py \
/spark/wordcount/input \
/spark/wordcount/output03# deploy-mode ==cluster
/opt/installs/spark/bin/spark-submit \
--master spark://bigdata01:7077 \
--deploy-mode cluster \
--driver-memory 512M \
--driver-cores 1 \
--supervise \
--executor-memory 1G \
--executor-cores 1 \
--total-executor-cores 2 \/home/pyspark_core_word_args.py \
/spark/wordcount/input \
/spark/wordcount/output05

client 模式,该模式下,Driver 充当了非常重要的角色,任务在运行的时候,必须保证Driver的服务正常运行。Driver需要做的事情很多,任务在运行过程中,Driver不能走。

cluster 模式:在该模式下,client端,提交完之后,就可以走了,Driver进程放在了AppMaster里面,spark集群将任务执行完即可。

假如deploy-mode==client 可以理解为胖客户端模式,deploy-mode==cluster 可以理解为瘦客户端模式。

Exception in thread "main" org.apache.spark.SparkException: Cluster deploy mode is currently not supported for python applications on standalone clusters.

目前的版本中,pysparks 在在不支持模式为cluster的写法,所以会报以上错误,请知晓,换成scala等是不会有问题的。

以下这两张是Yarn集群的图,帮助理解概念。

client模式的一个示意图:

cluster模式:

区别:yarn 模式下就有 appmaster

client模式: Driver进程和AppMaster是共存关系,各玩各的

cluster模式:Driver进程和AppMaster合二为一,Driver在AppMaster里面。

deploy-mode 有 cluster 和 client 两个可选参数,默认为 client。这里以 Spark On Yarn 模式对两者进行说明 :

  • 在 cluster 模式下,Spark Drvier 在应用程序的 Master 进程内运行,该进程由集群上的 YARN 管理,提交作业的客户端可以在启动应用程序后关闭;
  • 在 client 模式下,Spark Drvier 在提交作业的客户端进程中运行,Master 进程仅用于从 YARN 请求资源。

spark-submit 提交任务时,client模式和cluster模式有何不同。
以Yarn集群为例:
client模式:  Driver进程和AppMaster是 不在一起的,各玩各的。Driver进程在提交命令的电脑上运行,运行期间,该服务器不能停止,因为Client 在这个模式下起的作用很大。
cluster模式:Driver进程和AppMaster合二为一,Driver在AppMaster里面。Client端仅仅是提交了代码到集群,提交完就没有什么事情了,可以关闭。

三、总结

        本文详细介绍了 Spark 程序从本地开发远程提交到集群测试的方法,以及使用spark - submit脚本在集群模式下提交程序的相关知识。在本地开发时,通过合理配置集群环境和同步代码目录,可以方便地将代码提交到集群运行。而在集群提交方面,spark - submit脚本的参数配置至关重要,不同的参数如--master--deploy - mode、各种资源相关参数等决定了程序在集群中的运行模式和资源分配情况。特别是--deploy - modeclientcluster模式,在 Driver 进程的启动位置和整个程序的运行机制上有很大区别。理解这些内容对于正确开发和高效运行 Spark 程序,充分利用集群资源来处理大数据任务具有重要意义。无论是在开发过程中遇到资源问题的排查,还是根据实际场景选择合适的提交模式和参数配置,都需要对这些知识有深入的掌握,以便更好地发挥 Spark 在大数据处理中的优势。

相关文章:

Spark 程序开发与提交:本地与集群模式全解析

Spark 的介绍与搭建&#xff1a;从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 目录 一、本地开发与远程提交测试 &#xff08;一&#xff09;问题背景 &#xff08;二&#xff09;解决方案 集群环境准…...

Linux编程:DMA增加UDP 数据传输吞吐量并降低延迟

文章目录 0. 引言1. 原理介绍1.1 DMA 与中断的协同机制1.2. DMA优化UDP 数据包发送 2. DMA 配置优化 0. 引言 UDP 网络传输常面临高 CPU 占用、传输延迟和丢包等挑战。本文将介绍 DMA 如何优化 UDP 数据包的发送&#xff0c;以提高吞吐量、减少延迟并降低 CPU 占用。 阅读本文…...

鸿蒙开启无线调试

DevEco Studio没找到通过WI-FI连接手机的可视化操作按钮&#xff0c;就去官网看了下hdc - TCP连接场景 操作也比较简单&#xff1a; 第1步&#xff1a;PC通过USB连接手机/平板&#xff1b; 第2步&#xff1a;在手机/平板的“开发者选项”中打开“无线调试”并记录下IP和端口…...

C. DS循环链表—约瑟夫环 (Ver. I - B)

题目描述 N个人坐成一个圆环&#xff08;编号为1 - N&#xff09;&#xff0c;从第S个人开始报数&#xff0c;数到K的人出列&#xff0c;后面的人重新从1开始报数。问最后剩下的人的编号。 例如&#xff1a;N 3&#xff0c;K 2&#xff0c;S 1。2号先出列&#xff0c;然后是…...

【刷题】优选算法

优选算法 双指针 202. 快乐数 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 【思路】 第一个实例是快乐数&#xff0c;因为会变为1且不断是1的循环 第二个实例不可能为1&#xff0c;因为会陷入一个没有1的循环 根据两个实例和鸽巢原理可以发现不断的平方和最…...

Python 在PDF中绘制形状(线条、矩形、椭圆形等)

在PDF中绘制图形可以增强文档的视觉效果。通过添加不同类型的形状&#xff0c;如实线、虚线、矩形、圆形等&#xff0c;可以使文档更加生动有趣&#xff0c;提高读者的阅读兴趣。这对于制作报告、演示文稿或是教材特别有用。本文将通过以下几个示例介绍如何使用Python 在PDF中绘…...

《今日制造与升级》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《今日制造与升级》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《今日制造与升级》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国机械工业联合会 …...

loading为什么不更新

场景&#xff1a;封装好的弹框&#xff0c;按钮上加了个loading状态&#xff0c;根据传入的值弹框提交的模块内容不一样。loading更新过后&#xff0c;但是值没有变。 注&#xff09;写法一loading不更新&#xff0c;写法二loading值更新。 一、写法一 写法一中的 acceptanc…...

Rust 力扣 - 1652. 拆炸弹

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们只需要遍历长度长度为k的窗口&#xff0c;然后把窗口内数字之和填充到结果数组中的对应位置即可 题解代码 impl Solution {pub fn decrypt(code: Vec<i32>, k: i32) -> Vec<i32> {let n c…...

使用Golang实现开发中常用的【并发设计模式】

使用Golang实现开发中常用的【并发设计模式】 设计模式是解决常见问题的模板&#xff0c;可以帮助我们提升思维能力&#xff0c;编写更高效、可维护性更强的代码 屏障模式 未来模式 管道模式 协程池模式 发布订阅模式 下面是使用 Go 语言实现屏障模式、未来模式、管道模式…...

基于Zynq FPGA对雷龙SD NAND的性能测试评估

文章目录 一、SD NAND特征1.1 SD卡简介1.2 SD卡Block图 二、SD卡样片三、Zynq测试平台搭建3.1 测试流程3.2 SOC搭建 四、软件搭建五、测试结果六、总结 一、SD NAND特征 1.1 SD卡简介 雷龙的SD NAND系列有多种型号&#xff0c;本次测试使用的是CSNP4GCR01-AMW和CSNP32GCR01-A…...

4.WebSocket 配置与Nginx 的完美结合

序言 在现代 web 应用中&#xff0c;WebSocket 作为一种全双工通信协议&#xff0c;为实时数据传输提供了强大的支持。若要确保 WebSocket 在生产环境中的稳定性和性能&#xff0c;使用 Nginx 作为反向代理服务器是一个明智的选择。本篇文章将带你了解如何在 Nginx 中配置 Web…...

Docker:镜像构建 DockerFile

Docker&#xff1a;镜像构建 DockerFile 镜像构建docker build DockerfileFROMCOPYENVWORKDIRADDRUNCMDENTRYPOINTUSERARGVOLUME 镜像构建 在Docker官方提供的镜像中&#xff0c;大部分都是基础镜像&#xff0c;他们只提供某个简单的功能&#xff0c;如果想要一个功能更加丰富…...

浮动路由:实现出口线路的负载均衡冗余备份。

浮动路由 Tip&#xff1a;浮动路由指在多条默认路由基础上加入优先级参数&#xff0c;实现出口线路冗余备份。 ip routing-table //查看路由表命令 路由优先级参数&#xff1a;越小越优 本次实验测试两条默认路由&#xff0c;其中一条默认路由添加优先级参数&#xff0c;设置…...

二叉树的遍历和线索二叉树

二叉树遍历 二叉树结点的定义 typedef struct BiNode{Elemtype data;struct BiNode* lchild, *rchild; }BiNode, *BiTree; 先序 递归算法 void PreOrder1(BiTree T){if(T!NULL){visit(T);PreOrder(T->lchild);PreOrder(T->rchild);} } 非递归算法&#xff08;栈实现…...

SpringBoot3 集成Junit4

目录 1. 确保项目中包含JUnit 4依赖添加JUnit 4依赖 2. 配置Spring Boot使用JUnit 4在测试类中使用RunWith注解 3. 编写测试代码4、总结 【扩展】RunWith(SpringRunner.class) 中SpringRunner的作用1. **加载 Spring 应用上下文&#xff08;ApplicationContext&#xff09;**2.…...

Scala的set的添加删减和查询

添加&#xff1a;最好用于不可变数组&#xff0c;因为它会产生新数组&#xff0c;而不是在原数组上进行修改。 在尾部添加元素 可变数组 删减&#xff1a;按元素值删除元素 - 查询&#xff1a;查询元素是否存在.contains package Test //Set //特点&#xff1a;元素是唯…...

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…...

【spark面试题】RDD和DataFrame以及DataSet有什么异同

RDD&#xff08;Resilient Distributed Dataset&#xff09;&#xff1a; 概念&#xff1a;可理解为分布式的列表。它的每个元素代表数据的一行&#xff0c;具有支持泛型这一显著特点。这种泛型支持让开发人员能够处理各种类型的数据&#xff0c;具有很强的灵活性。例如&#…...

[Python]关于Tensorflow+Keras+h5py+numpy一些骚操作备忘

起因&#xff1a;要在Anaconda使用Tensorflow和Keras框架 这里提前小结一下&#xff1a; 1&#xff0c;一定要注意Python、Tensorflow、Keras不同版本的对应关系。 2&#xff0c;交叉用conda install 和pip install安装依赖库可能容易出现问题&#xff0c;在Anaconda虚拟环境…...

深度学习:Transformer 详解

Transformer 详解 对于Transformer模型的详细解释&#xff0c;可以更深入地探讨其各个组成部分、工作原理、以及在自然语言处理任务中的应用方法。以下是对Transformer模型的一个更全面和详细的解释&#xff0c;包括其架构细节和关键技术&#xff1a; 1. 基本架构 Transform…...

jmeter 性能测试步骤是什么?

JMeter是一款流行的开源性能测试工具&#xff0c;用于测试各种服务器和网络应用的性能。在进行JMeter性能测试时&#xff0c;通常需要遵循以下步骤&#xff1a; 确定测试目标&#xff1a;首先&#xff0c;明确性能测试的目标。这可以是测试一个网站的负载能力、测试一个API的响…...

前端入门一之JS最基础、最基础语法

前言 JS是前端三件套之一&#xff0c;也是核心&#xff0c;本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点&#xff1b;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 初体验输入输出语句变量和常量常量变量…...

解决Swp交换空间被占满问题

解决ubuntu交换空间被占满问题 step1: cat /proc/sys/vm/swappiness 60 step2: sudo sysctl vm.swappiness10 #临时修改 step3: sudo sh -c “echo “vm.swappiness10” >> /etc/sysctl.conf” step4: sysctl -p #生效...

草地景观中的土地覆被变化:将增强型大地遥感卫星数据组成、LandTrendr 和谷歌地球引擎中的机器学习分类与 MLP-ANN 场景预测相结合

目录 简介 方法 结论 代码1:影像集合 代码2: 随机森林和svm分类 结果 简介 了解草原生境在空间和时间上的动态对于评估保护措施的有效性和制定可持续管理方法至关重要,特别是在自然 2000 网络和欧洲生物多样性战略范围内。 根据遥感数据绘制的土地覆盖图对于了解植被…...

【c++语言程序设计】字符串与浅层复制(深拷贝与浅拷贝)

字符串常量是用一对双引号括起来的字符序列&#xff0c;例如&#xff0c;"abcd" " China"" This is a string." 都是字符串常量。它在内存中的存放形式是&#xff0c;按串中字符的排列次序顺序存放&#xff0c;每个字符占1字节&#xff0c;并在末…...

《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)

《TCP/IP网络编程》学习笔记 | Chapter 4&#xff1a;基于TCP的服务器端/客户端&#xff08;1&#xff09; 《TCP/IP网络编程》学习笔记 | Chapter 4&#xff1a;基于TCP的服务器端/客户端&#xff08;1&#xff09;理解TCP和UDPTCP/IP协议栈TCP/IP协议的诞生背景链路层网络层T…...

深入解析gdb -p 与gdb attach 的区别与使用场景

摘要&#xff1a;本文将详细对比gdb -p 与gdb attach 这两个命令的使用方法、场景及优缺点&#xff0c;帮助读者更好地理解并运用这两个调试工具。 一、引言 在Linux系统中&#xff0c;GDB&#xff08;GNU Debugger&#xff09;是一款功能强大的调试工具&#xff0c;广泛应用…...

C语言 | Leetcode C语言题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; /*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/ type…...

论文阅读笔记:Image Processing GNN: Breaking Rigidity in Super-Resolution

论文阅读笔记&#xff1a;Image Processing GNN: Breaking Rigidity in Super-Resolution 1 背景2 创新点3 方法4 模块4.1 以往SR模型的刚性4.2 图构建4.2.1 度灵活性4.2.2 像素节点灵活性4.2.3 空间灵活性 4.3 图聚合4.4 多尺度图聚合模块MGB4.5 图聚合层GAL 5 效果5.1 和SOTA…...