五、【计算】Spark原理与实践(上) | 青训营笔记

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 五、【计算】Spark原理与实践(上) | 青训营笔记

👉引言💎


学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 热爱写作,愿意让自己成为更好的人............

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

学习目标:

  1. 了解大数据处理常见的场景链路
  2. 了解Spark技术栈,包括SparkCore中的RDD/调度/Shuffle/内存管理等概念机制,以及SQL在Spark引擎中执行的详细流程
  3. 了解目前业界主要遇到的挑战以及解决方案


一、Spark介绍


0名词解析


Spark生态组件:


  • Spark Core:Spark核心组件,它实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。
  • Spark SQL:用来操作结构化数据的核心组件,通过Spark SQL可以直接查询Hive、HBase等多种外部数据源中的数据。
  • Spark Structured Streaming:Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理。
  • MLlib:Spark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤算法等,还提供了模型评估、数据导入等额外的功能。
  • GraphX:Spark提供的分布式图处理框架,拥有对图计算和图挖掘算法的API接口以及丰富的功能和运算符。
  • 独立调度器、Yarn、Mesos、Kubernetes:Spark框架可以高效地在一个到数千个节点之间伸缩计算,集群管理器则主要负责各个节点的资源管理工作,为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行。


Spark 运行架构和工作原理:


  • Application(应用):Spark上运行的应用。Application中包含了一个驱动器(Driver)进程和集群上的多个执行器(Executor)进程。
  • Driver Program(驱动器):运行main()方法并创建SparkContext的进程。
  • Cluster Manager(集群管理器):用于在集群上申请资源的外部服务(如:独立部署的集群管理器、Mesos或者Yarn)。
  • Worker Node(工作节点):集群上运行应用程序代码的任意一个节点。
  • Executor(执行器):在集群工作节点上为某个应用启动的工作进程,该进程负责运行计算任务,并为应用程序存储数据。
  • Task(任务):执行器的工作单元。
  • Job(作业):一个并行计算作业,由一组任务(Task)组成,并由Spark的行动(Action)算子(如:save、collect)触发启动。
  • Stage(阶段):每个Job可以划分为更小的Task集合,每组任务被称为Stage。


Spark目前支持几个集群管理器:


  • Standalone :Spark 附带的简单集群管理器,可以轻松设置集群。
  • Apache Mesos:通用集群管理器,也可以运行 Hadoop MapReduce 和服务应用程序。(已弃用)
  • Hadoop YARN: Hadoop 2 和 3 中的资源管理器。
  • Kubernetes:用于自动部署、扩展和管理容器化应用程序的开源系统。

目标:了解常见的大数据处理pipeline,了解spark技术栈,通过提交一个基本的Spark程序开始Spark学习之路


  • 大数据处理技术栈

image.png

  • 常见大数据处理链路
    image.png


1 Spark初步认识:


官网

Spark官方网站主页:

image.png


  • 1.1 版本演进


Spark近年来的版本演进趋势图如下所示:image.png

从图中可以看出大概的演进趋势

  • 新版本对计算性能做出了更强的优化
  • 稳定性:与用户和开源社区合作,部署在多种应用场景下,使其稳定性更强
  • 易用性:继续完好spark的python/java API,同一时候使其安装部署更加方便
  • 未来可能会结合机器学习算法推出相关AI+功能


  • 1.2 生态特点

image.png


  • 1.3 多语言支持(SQL,java/Scala,Python,R)


  • 1.4内置丰富的数据源:


  • Text
  • Parquet/ORC
  • Json/CSV
  • JDBC
  • 自定义DataSource:
  • 1.5丰富的API(算子)
  • 1.6部署方式:
    Spark Local Mode
    Spark Standalone Mode
    On YARN/K8S


2 初识Spark


  • 1下载编译:
  • 在Github上克隆Spark包,并在本地或服务器上进行编译,下载编译命令大概如下:
  • git clone -b master github.com/apache/spar…
  • cd spark
  • ./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Psparkr -Phive -Phive-thriftserver-Pmesos -Pvarn
  • 编译完后会在目录下生成一个tgz包
  • 直接去官网下载Spark包


  • 包概览:


image.pngimage.png


2 搭建环境变量


image.png


运行示例:

  • Spark-shell

image.png


  • Spark-sql

image.png

  • pyspark(spark与python相结合,应用范围得以较大扩展)

image.png

  • 编译成jar包之后,使用spark-submit提交

image.png

  • UI界面

image.png

image.png


3 Spark运行架构和工作原理


image.png

Spark应用在集群上运行时,包括了多个独立的进程,这些进程之间通过驱动程序(Driver Program)中的SparkContext对象进行协调,SparkContext对象能够与多种集群资源管理器(Cluster Manager)通信,一旦与集群资源管理器连接,Spark会为该应用在各个集群节点上申请执行器(Executor),用于执行计算任务和存储数据。Spark将应用程序代码发送给所申请到的执行器,SparkContext对象将分割出的任务(Task)发送给各个执行器去运行。

需要注意的是

  • 每个Spark application都有其对应的多个executor进程。Executor进程在整个应用程序生命周期内,都保持运行状态,并以多线程方式执行任务。这样做的好处是,Executor进程可以隔离每个Spark应用。从调度角度来看,每个driver可以独立调度本应用程序的内部任务。从executor角度来看,不同Spark应用对应的任务将会在不同的JVM中运行。然而这样的架构也有缺点,多个Spark应用程序之间无法共享数据,除非把数据写到外部存储结构中。
  • Spark对底层的集群管理器一无所知,只要Spark能够申请到executor进程,能与之通信即可。这种实现方式可以使Spark比较容易的在多种集群管理器上运行,例如Mesos、Yarn、Kubernetes。
  • Driver Program在整个生命周期内必须监听并接受其对应的各个executor的连接请求,因此driver program必须能够被所有worker节点访问到。
  • 因为集群上的任务是由driver来调度的,driver应该和worker节点距离近一些,最好在同一个本地局域网中,如果需要远程对集群发起请求,最好还是在driver节点上启动RPC服务响应这些远程请求,同时把driver本身放在离集群Worker节点比较近的机器上。

🌹写在最后💖: 路漫漫其修远兮,吾将上下而求索!伙伴们,再见!🌹🌹🌹

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Web App开发 测试技术 持续交付
|
8月前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
338 2
|
7月前
|
弹性计算 人工智能 自然语言处理
云工开物:阿里云弹性计算走进高校第2期,与北京大学研一学生共探AI时代下的应用创新
阿里云高校合作、弹性计算团队​于北京大学,开展了第2届​【弹性计算进校园】​交流活动。
|
8月前
什么是数据封装?
数据封装是在通过网络传输信息之前将信息分解成更小的可管理块的过程。在这个过程中,源和目标地址与奇偶校验一起附加到标题中。
|
8月前
|
安全 网络安全 网络虚拟化
OCSP
OCSP
303 5
|
10月前
|
Ubuntu 编译器 C语言
Ubuntu 源码编译指定版本 make:神秘代码背后的激情冒险,等你来战!
【9月更文挑战第8天】在Ubuntu中,编译指定版本的源码`make`是一项挑战但也极具价值的任务。它允许我们根据特定需求定制软件,提升性能与功能适配。首先需安装必要工具包如GCC等;接着下载所需源码并阅读相关文档以了解编译要求。通过运行`./configure`、`make`及`sudo make install`命令完成编译安装流程。过程中可能遇到依赖项缺失或编译选项设置不当等问题,需根据错误提示逐一解决。对于大型项目,可利用多核编译加快速度。掌握这一技能有助于更好地探索开源世界。
137 3
|
消息中间件 监控 Java
Java中的消息队列技术选型与实现指南
Java中的消息队列技术选型与实现指南
|
Java 项目管理 Maven
Java一分钟之-Maven profiles与dependencyManagement
【6月更文挑战第5天】本文探讨了Maven的profiles和dependencyManagement特性在Java项目管理中的应用,包括基本概念和常见问题。Profiles用于根据不同环境激活配置,易错点在于忘记激活,应通过命令行或设置默认profile来避免。dependencyManagement集中管理依赖版本,过度依赖会导致子模块灵活性降低,应合理使用。结合两者,可在不同环境中控制依赖版本,提高项目配置效率。
351 8
|
移动开发 JavaScript 前端开发
分享111个JS时钟代码特效,总有一款适合您
分享111个JS时钟代码特效,总有一款适合您
565 0
|
存储 监控 安全
计算机网络硬件
一、计算机网络硬件 计算机网络硬件是指构成计算机网络的物理设备和组件,包括以下几个主要部分: 1. 网络接口卡(Network Interface Card, NIC):也称为网卡,是连接计算机到网络的接口设备。它负责将计算机内部的数据转换为网络可以识别和传输的格式,同时也负责将网络传输的数据转换为计算机可以理解和处理的格式。 2. 集线器(Hub):是一种用于将多个计算机连接在一起的设备。它通过物理层的广播方式将数据从一个端口广播到其他所有端口,所有连接在集线器上的计算机都可以接收到这些数据。 3. 交换机(Switch):与集线器类似,也是用于将多个计算机连接在一起的设备。但是交换机通过数
250 0