2024-02-22(Spark)

news2024/9/24 1:14:43

1.Spark Application程序入口为:SparkContext,任何一个应用首先需要构建SparkContext对象,两个步骤构建:

第一步,创建SparkConf对象。设置Spark Application基本信息,比如应用的名称AppName和应用运行Master。

第二步,基于SparkConf对象,创建SparkContext对象。

2.Python语言开发Spark程序步骤?

主要是获取SparkContext对象,基于SparkContext对象作为执行环境入口

3.如何提交Spark应用?

将程序上传到服务器上,通过spark-submit客户端工具进行提交。

在代码中不要设置master,如果设置,则以代码的master为准,spark-submit工具的设置就无效了。

提交程序到集群中的时候,读取的文件一定是各个机器都能访问到的地址,比如HDFS。

4.Spark集群角色回顾(YARN为例)

Master(ResourceManager)角色:集群大管家,整个集群的资源管理和分配。

Worker(NodeManager)角色:单个机器的管家,负责在单个服务器上提供运行容器,管理当前机器的资源。

Driver:单个Spark任务的管理者,管理Executor的任务执行和任务分解分配,类似YARN中的ApplicationMaster。

Executor:具体干活的进程,Spark的工作任务(Task)都有Executor来负责执行。

5.Python语言Spark程序运行的流程

Driver进程将构建的SparkContext对象序列化分发到各个Executor,Executor拿到SC(SparkContext)对象后,再各自的去HDFS中拿一部分数据进行处理。这就实现了分布式的处理HDFS中待处理的数据。然后再将各自处理完的数据结果汇总给Driver。(也就是说Driver开始,Driver汇总结束,中间全部是Executor分布式运行)

6.Python on Spark的运行原理

Spark是运行在Java虚拟机或者Scale虚拟机上的,因此Python语言是无法沟通的,因此有一个可以理解为Python Driver的东西和原始的JVM Driver进行通信(把python代码通过Py4j模块翻译为可以原生的JVMDriver去运行)

而在Executor端,Worker会启动一个pyspark的守护进程做一个中转站,完成python executor和JVM executor的中转。

整体流程:python代码来到Driver进程后,又Py4j转化为JVM Driver去命令各个Workder执行,然后Worker中的JVM Executor会通过pyspark守护进程来做中转,pyspark守护进程会将指令调度到pyspark worker去执行。(Executor端,本质上是python进程在工作,指令是由JVM Executor通过RPC通讯发送而来)

Python代码 ---> JVM代码 ---> JVM Driver ---> RPC ---> 调度JVM Executor ---> PySpark中转 ---> Python Executor进程

7.分布式代码执行的重要特征是什么?

代码在集群上运行,是被分布式运行的。(写的一份代码,但是运行是分布在多台机器上运行)

在Spark中,非任务处理部分由Driver执行(非RDD代码)

任务处理部分由Executor执行(RDD代码)

Executor的数量可以很多,所以任务的计算是分布式在运行的。

8.简述PySpark的架构体系

Python on Spark 在Driver端由JVM执行,Executor端由JVM做命令转发,底层由Python解释器来工作。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

接下来进入Spark Core阶段(也就是Spark的一些核心算子(算子:API))

9.为什么需要RDD

分布式计算需要的要素:

a.分区控制(不同服务器负责运行的那一部分)

b.Shuffle/洗牌操作(不同服务器上运行数据的交互,归纳合并等操作)

c.数据存储/序列化/发送

d.数据计算API

e.等一些列的操作

以上这些功能,不能简单地通过Python内置的本地集合对象(如List/字典等去完成)。我们在分布式框架中,需要有一个统一的数据抽象对象,来实现上述分布式计算所需的功能,这个抽象对象,就是RDD。

RDD可以视为整个Spark框架中最核心的数据抽象对象,基本上大部分核心功能,都是由RDD来提供的。

10.RDD的定义

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变,可以分区,里面的元素可以并行计算的集合。

Dataset:一个数据集合,用于存放数据的(本地集合是本进程集合,RDD是跨越机器的,因此RDD集合是跨进程集合)

Distributed:RDD中的数据是分布式存储的,可用于分布式计算。(RDD的数据是跨越机器存储的/跨进程)

Resilient:RDD中的数据可以存储在内存中或者磁盘中。

姑且:把RDD视为一个增强的List集合对象吧。

11.RDD的5大特性

a.RDD是有分区的

b.RDD的方法会作用在其所有的分区上

c.RDD之间是有依赖关系的(RDD有血缘关系),RDD之间会进行迭代,形成一个依赖链条

d.Key-Value类型的RDD可以有分区器

默认分区器:Hash分区规则,也可以手动自己设置一个分区器(rdd.partitionBy方法来设置)

这个特性是可选的,因为也并不是所有的RDD都是Key-Value类型的格式

Key-Value型RDD:RDD中存储的是二元元组,便是Key-Value型RDD

e.RDD的分区规划,会尽量靠近数据所在的服务器

因为这样可以走本地读取,避免网络读取,提高性能。

12.WordCount结合RDD特性进行执行流程分析

13.不论是python,Scala,Java,Spark RDD程序的程序入口都是SparkContext对象

只有构建出来SparkContext对象,才能基于它执行后续的API调用和计算操作

本质上,SparkContext对于编程来说,主要功能就是创建第一个RDD出来

14.RDD创建的两种方式

a.通过并行化集合创建(本地对象 转 分布式RDD)

就是sparkContext对象去调用parallelize(参数1,参数2) API就行了。参数1:集合对象,参数2:分区数

b.读取外部数据源(读取文件)

就是sparkContext对象去调用textFile(参数1,参数2)API就行了。参数1:文件路径(支持本地文件和HDFS文件等),参数2:表示最小分区数

15.什么是RDD的算子

分布式集合对象(RDD)的API就是算子,换个昵称罢了。

分布式对象的API就是算子,叫做算子只是为了区分本地对象的API,本地的叫方法or函数;分布式对象的叫算子,仅此而已。

RDD算子分为两类:Transaction转换算子;Action动作算子。

返回值仍然是RDD的就是转换算子,反之,返回值不是RDD的就是动作算子。

转换算子是提供执行计划,它是懒加载的,需要等动作算子开始执行,才能让转换算子所预设的计划进行工作。

16.常见的转换算子

map算子:将RDD数据的一条条的处理(处理的逻辑基于map算子中接受的处理函数),返回新的RDD

flatMap算子:对RDD执行map操作,然后进行解除嵌套操作。

解除嵌套eg:

reduceByKey算子:针对KV型RDD,自动按照Key分组,然后根据你提供的聚合逻辑,完成组内数据(value)的聚合操作

groupBy算子:将RDD的数据进行分组

Filter算子:过滤想要的数据进行保留

distinct算子:对RDD数据进行去重,返回新的RDD

union算子:2个RDD合并成1个RDD返回

join算子:对两个RDD执行JOIN操作(可以实现SQL的内/外连接),只能用于二元元组

intersection算子:求2个RDD的交集,返回一个新的RDD

glom算子:将RDD的数据,加上嵌套,这个嵌套按照分区来进行

比如RDD数据[1,2,3,4,5]有两个分区,那么被glom之后,数据变为[[1,2,3],[4,5]]

groupByKey算子:针对KV型RDD,自动按照key分组

sortBy算子:对RDD数据进行排序,,基于你指定的排序依据

sortByKey算子:针对KV型RDD数据,按照key进行排序

countByKey算子:统计key出现的次数(一般用于KV型RDD)

collects算子:将RDD各个分区内的数据,统一收集到Driver中,形成一个List对象

fold算子:和reduce一样,接受传入逻辑进行聚合,聚合是带有初始值的

first算子:取出RDD的第一个元素

take算子:取RDD的前N个元素,组合成list返回

top算子:对RDD数据集进行降序排序,取出前N个

count算子:计算RDD有多少条数据,返回值是一个数字

takeSample算子:随机抽样RDD的数据

takeOrderd算子:对RDD进行排序取前N个

foreach算子:对RDD的每一个元素,执行你提供的逻辑的操作(和map一个意思),但是这个方法没有返回值

saveAsTextFile算子:将RDD的数据写入到文本文件中

mapPartitions算子:和map类似,但是map是一次传递分区中的一个数据,而mapPartitions一次传递一整个分区的数据过来进行计算。

foreachPartition算子:和普通的foreach一样,一次处理的是一整个分区数据

partitionBy算子:对RDD进行自定义分区操作

repartitions算子:对RDD分区执行重新分区

17.如果提交到集群运行,除了主代码以外,还依赖了其他的代码文件,需要设置一个参数,来告知Spark,还有依赖文件要同步上传到集群中,参数叫做:spark.submit.pyFiles,参数的值可以是单个.py文件,也可以是.zip压缩包(多个依赖文件先压缩的意思)

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

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

相关文章

【PX4SimulinkGazebo联合仿真】在Simulink中使用ROS2控制无人机沿自定义8字形轨迹正向飞行(带偏航角控制)并在Gazebo中可视化

在Simulink中使用ROS2控制无人机沿自定义8字形轨迹正向飞行(带偏航角控制)并在Gazebo中可视化 系统架构Matlab官方例程Control a Simulated UAV Using ROS 2 and PX4 Bridge运行所需的环境配置PX4&Simulink&Gazebo联合仿真实现方法建立Simulink模…

渗流量监测方法有哪些,怎么选择?

在水利工程中,渗流量的监测是至关重要的,因为它直接影响着建筑物的安全和性能。渗流量观测就是观测和分析在水头作用下渗过建筑物和地基的水量。为了准确测量这一数据,我们需要选择合适的监测方法。那么,如何选择渗流量监测方法呢…

Nginx跳转模块location

一.location模块概述 1.定义 location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域名)、url匹配,对特定请求进行处理。 2.三种匹配类别 精准匹配:l…

LeetCode刷题---对称二叉树

解题思路: 首先对二叉树进行判空,如果根节点为空,则返回true 接下来对当前节点的左节点和右节点进行判断 1.如果左节点和右节点同时为空,则返回true。 2.如果左节点和右节点只有一个为空时,返回false。 3.如果左节点的值和右节点的…

独家深度 | 一文看懂 ClickHouse vs Elasticsearch:谁更胜一筹?

简介: 本文的主旨在于通过彻底剖析ClickHouse和Elasticsearch的内核架构,从原理上讲明白两者的优劣之处,同时会附上一份覆盖多场景的测试报告给读者作为参考。 作者:阿里云数据库OLAP产品部 仁劼 原文地址:https://developer.ali…

时序预测demo 代码快速实现 MLP效果比LSTM 好,简单模拟数据

【PyTorch修炼】用pytorch写一个经常用来测试时序模型的简单常规套路(LSTM多步迭代预测) 层数的理解: LSTM(长短期记忆)的层数指的是在神经网络中堆叠的LSTM单元的数量。层数决定了网络能够学习的复杂性和深度。每一层…

PLC_博图系列☞基本指令“插入输入”

PLC_博图系列☞基本指令“插入输入” 文章目录 PLC_博图系列☞基本指令“插入输入”背景介绍插入输入说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 插入输入 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门子的博图软件。我并不是专…

基于ORB-SLAM2与YOLOv8剔除动态特征点(三种方法)

基于ORB-SLAM2与YOLOv8剔除动态特征点(三种方法) 写上篇文章时测试过程比较乱,写的时候有些地方有点失误,所以重新写了这篇 本文内容均在RGB-D环境下进行程序测试 本文涉及到的动态特征点剔除速度均是以https://cvg.cit.tum.de/data/datasets/rgbd-dat…

Java学习-21 网络编程

什么是网络编程? 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的) 基本的通信架构 基本的通信架构有2种形式: CS架构(Client客户端/Server服务端) BS架构(Browser浏览器/Server服务端)。 网络通信三要素 IP …

粉色ui微信小程序源码/背景图/头像/壁纸小程序源码带流量主

云开发版粉色UI微信小程序源码,背景图、头像、壁纸小程序源码,带流量主功能。 云开发小程序源码无需服务器和域名即可搭建小程序另外还带有流量主功能噢!微信平台注册小程序就可以了。 这套粉色UI非常的好看,里面保护有背景图、…

【国际化】用JQuery-i18next的国际化demo,引入json

参考: 使用 i18next 的 jQuery 国际化 (i18n) 渐进式指南 (locize.com) i18next-http-backend/example/jquery/index.html at master i18next/i18next-http-backend (github.com) 文档 可能需要解决一下跨域问题,因为浏览器读取本…

基于Java+小程序点餐系统设计与实现(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…

ABCDE联合创始人BMAN确认出席Hack .Summit() 2024香港Web3盛会

ABCDE联合创始人和普通合伙人BMAN确认出席Hack .Summit() 2024! ABCDE联合创始人和普通合伙人BMAN确认出席由 Hack VC 主办,并由 AltLayer 和 Berachain 联合主办,与 SNZ 和数码港合作,由 Techub News 承办的Hack.Summit() 2024区…

保护你的Web应用——CSRF攻击与防御

在Web应用开发过程中,保护用户的隐私和安全至关重要。而CSRF(Cross-Site Request Forgery,跨站请求伪造)攻击是一种常见的安全威胁,通过利用受信任用户的身份进行恶意操作,威胁到用户的账户和数据安全。本文…

django配置视图并与模版进行数据交互

目录 安装django 创建一个django项目 项目结构 创建视图层views.py 写入视图函数 创建对应视图的路由 创建模版层 配置项目中的模版路径 创建模版html文件 启动项目 浏览器访问结果 安装django pip install django 创建一个django项目 这里最好用命令行完成&#xf…

为什么需要MDL锁

点击上方蓝字关注我 在数据库管理中,元数据(metadata)的保护至关重要,而MySQL中的"元数据锁"(MDL锁)就是它的守护者。 1. 什么是MDL锁MDL锁,全名Metadata Lock,是MySQL中…

用windbg调试uefi在hyper-v

添加环境变量 CLANG_BINC:\Program Files\NASM\ NASM_PREFIXC:\Program Files\NASM\ 添加path C:\Program Files (x86)\Windows Kits\10\Tools\x64\ACPIVerify 修改edk2-master\Conf\target.txt TARGET_ARCH X64 编译这两个包 #ACTIVE_PLATFORM EmulatorPkg/…

去新加坡旅游,你必须要收藏了解的当地电商欺诈风险!

目录 多元化发展的新加坡电商 平台和消费者面临的欺诈风险 电商平台应如何防控? 2月9日,除夕,中国与新加坡免签正式生效。免签政策简化了持普通护照中国游客入境新加坡的程序,使通关更为便捷。根据协定,双方持普通护照…

【复现】某尔顿 安全审计系统任意文件读取漏洞_56

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 某尔顿网络安全审计产品支持1-3线路的internet接入、1-3对网桥;含强大的上网行为管理、审计、监控模块;用…

计算机网络-局域网和城域网(一)

1.什么是局域网? 单一机构所拥有的专用计算机网络,中等规模地理范围,实现多种设备互联、信息交换和资源共享。 2.逻辑链路控制LLC: 目的是屏蔽不同的介质访问控制方法,以向高层(网络层)提供统…