【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

news2024/12/26 11:53:05

前言:
💞💞大家好,我是书生♡,本阶段和大家一起分享和探索大数据技术–spark计算引擎,本篇文章主要讲述了:spark的概念,spark的起源,Spark的计算框架,Spark组成架构,Spark部署方式,Spark开发方式等等。欢迎大家一起探索讨论!!!
💞💞代码是你的画笔,创新是你的画布,用它们绘出属于你的精彩世界,不断挑战,无限可能!

个人主页⭐: 书生♡
gitee主页🙋‍♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,前端,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬

目录

  • 1. Spark的概念
  • 2. Spark的起源
  • 3. Spark和Hadoop的区别
  • 4. Spark特性
  • 5. Spark架构--流程
    • 5.1 MapReduce架构--流程
    • 5.2 HIve计算流程
    • 5.3 Spark计算流程
    • 5.4 Spark组成架构
    • 5.5 Spark Core 和RDD的关系
      • 5.5.1 RDD是什么
      • 5.5.1 Spark Core是什么
      • 5.5.3 Spark Core 和RDD的关系
  • 6. Spark部署方式
  • 7. spark开发方式
    • 7.1 交互式开发
      • 7.1.1 Scala交互式开发
      • 7.1.2 Python交互式开发
    • 7.2 脚本式开发
  • 8. PyCharm远程开发配置

1. Spark的概念

定义:

  • Apache Spark是专为大规模数据处理而设计的快速通用的分布式计算引擎(基于内存),是开源的类Hadoop MapReduce的通用分布式计算框架。和MapReduce一样,都是完成大规模数据的计算处理。
  • Spark 被设计用于处理诸如批处理、流处理、机器学习、图计算等多种类型的数据处理任务,并且可以在各种数据源上运行,包括结构化与非结构化的数据。
    在这里插入图片描述

RDD是整个 Spark 的核心数据结构,Spark整个平台都围绕着RDD进行

在这里插入图片描述
小结:

  • Spark 保留了分布式并行计算的优点并改进了其明显的缺陷。
  • 中间数据存储在内存中
  • 提供丰富的操作数据的API提高了开发速度。

2. Spark的起源

在这里插入图片描述

3. Spark和Hadoop的区别

HadoopSpark
类型分布式存储和处理大规模数据的框架,包含计算、存储、调度分布式计算引擎
场景大规模数据的批处理(离线)迭代计算、交互式计算、流计算(实时)
价格对机器要求低,便宜对内存有要求,相对较贵
编程范式Map+Reduce,API 较为底层,算法适应性差API 较为顶层,方便使用
数据存储结构MapReduce中间计算结果在HDFS磁盘上,速度慢RDD中间运算结果在内存中,速度快
运行方式Task以进程方式执行Task以线程方式执行

Spark能完全取代Hadoop? —》不能

  • Spark主要用于替代Hadoop中的MapReduce计算模型。存储依然可以使用HDFS,但是中间结果可以存放在内存中,内存数据的读写速度要比磁盘快的多,所以Spark的计算速度要比MapReduce快
  • Spark已经很好地融入了Hadoop生态圈,它可以借助于YARN实现资源调度管理,借助于HDFS实现分布式存储

注意:Presto也是基于内存计算的,Presto不适合海量数据处理,而且不能创建库表。Spark对海量数据在内存上的计算做了优化,内存不足是会将结果存在磁盘上,适合海量数据处理,并且可以进行库表创建

面试题:Hadoop的基于进程计算和Spark的基于线程计算方式优缺点?

Hadoop MapReduce (基于进程)

  • 优点:

容错性: MapReduce 框架提供了强大的容错机制,当任务失败时,它会自动重新调度失败的任务。 大规模数据处理:
适用于处理大规模的数据集,因为每个Map或Reduce任务都是独立运行的,可以并行执行。

  • 缺点:

高延迟: MapReduce 中的进程启动和关闭成本较高,导致较高的延迟。 不适合迭代计算:
对于需要多次迭代的算法,每次迭代都需要读取和写入磁盘,效率较低。

Apache Spark (基于线程)

  • 优点:

内存计算: Spark 可以将中间结果缓存在内存中,减少磁盘I/O操作,从而提高处理速度。
低延迟: 基于线程的执行模型减少了任务启动的开销,提高了整体性能。
支持多种类型的数据处理:如批处理、流处理、机器学习等。

  • 缺点:

内存消耗:内存中的数据存储可能会导致较大的内存占用
线程安全问题:多线程并发访问共享资源时需要考虑线程安全问题。
资源竞争:在多任务环境下,多个Spark作业可能会竞争有限的资源,影响性能。

进程和线程的区别:

  • 进程是操作系统资源分配的基本单位,分配资源需要花费时间
  • 线程是处理器任务调度和执行的基本单位,使用进程创建的资源执行任务
  • 一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源
  • 进程之间不共享资源
  • 不同进程之间的线程相互不可见
  • 线程不能独立执行,必须依附在进程中执行

4. Spark特性

Spark四大特性:高效性易用性通用性兼容性

  • 高效性

    计算速度快,由于Apache Spark支持内存计算,并且是通过线程执行计算任务,所以在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。

  • 易用性

    支持多种编程语言开发 (Python,Java,Scala,SQL,R等),降低了学习难度

  • 通用性

    • 支持多种计算方式
      • RDD计算 -> Spark core
      • SQL计算(离线计算)-> Spark SQL
      • 图计算 -> Spark GraphX
      • 机器学习计算 -> Spark MLlib
      • 流式数据计算(实时数仓中使用)-> Spark Streaming
    • 支持多种开发方式
      • 交互式开发 -> 通过输入命令完成程序运行
      • 脚本式开发 -> 通过编写代码文件完成程序运行
  • 兼容性

    • 支持三方工具接入
      • 数据存储工具
        • hdfs
        • kafka
        • hbase
        • es
        • mysql
      • 资源调度工具
        • yarn
        • standalone(spark自带)
        • mesos
      • 高可用工具
        • zookeeper
    • 支持多种操作系统
      • Linux
      • Windows
      • Mac

5. Spark架构–流程

5.1 MapReduce架构–流程

在这里插入图片描述

  • 客户端提交一个MR程序给ResourceManager(校验请求是否合法…)
  • 如果请求合法,ResourceManager随机选择一个NodeManager用于生成appmaster(应用程序控制者,每个应用程序都单独有一个appmaster)
  • appmaster会主动向ResourceManager应用管理器(application manager)注册自己,告知自己的状态信息,并且保持心跳
  • appmaster会根据任务情况计算自己所需要的container资源(cpu,内存),主动向ResourceManager资源调度器(resource
    scheduler)申请并获取这些container资源
  • appmaster获取到container资源后,把对应指令和container分发给其他NodeManager,让NodeManager启动task任务(maptask,reducetask)
  • NodeManager要和appmaster保持心跳,把自己任务计算进度和状态信息等同步给appmaster,(注意当maptask任务完成后会通知appmaster,appmaster接到消息后会通知reducetask去maptask那儿拉取数据)直到最后任务完成
  • appmaster会主动向ResourceManager注销自己(告知ResourceManager可以把自己的资源进行回收了,回收后自己就销毁了)

5.2 HIve计算流程

在这里插入图片描述

HIve就是将HIveSql语言转换为MR的计算语言,其他的和MR一样

5.3 Spark计算流程

在这里插入图片描述

Spark就是将SparkSql语言转换为Spark的RDD计算方式,中间数据存储在内存上,最终结果是存储在HDFS上的

5.4 Spark组成架构

  • Spark Core: 基于RDD计算, 处理非结构化数据(多维数据), spark的核心数据结构, 所有组件基于RDD进行计算
  • Spark SQL: 基于DataFrame/DataSet计算, 处理结构化数据, 提供了DSL方式和SQL两种编写方式。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
  • Spark/Structured Streaming: 流计算, 进行实时计算。Spark Streaming允许程序能够像普通RDD一样处理实时数据
  • Spark ML/MLlib: 机器学习, AI项目开发, 推荐系统 了解
  • Spark Graphx: 图计算组件, 控制图、并行图操作和计算的一组算法和工具的集合

在这里插入图片描述

5.5 Spark Core 和RDD的关系

5.5.1 RDD是什么

  • RDD (Resilient Distributed Datasets)

RDD弹性分布式数据集 的缩写,它是 Apache Spark 中最基本的数据抽象。RDD 代表一个不可变的、可分区的、包含元素的集合,这些元素可以并行地在集群的不同节点上进行计算。

以下是 RDD 的一些关键特点:

  1. 不可变性:一旦创建,RDD 就不能改变其内部的状态或结构。
  2. 分区:RDD 可以被划分为多个分区,这些分区可以在集群的不同节点上进行并行处理。
  3. 容错性:RDD 具有自动恢复丢失数据的能力,并且能够从失败中恢复。
  4. 懒加载:许多 RDD 操作都是惰性的,这意味着它们不会立即执行,直到遇到一个行动(action)操作时才会触发实际的计算。
  5. 血统:RDD 之间的转换操作会形成一种依赖关系,这种依赖关系被称为“血统”,Spark 使用血统信息来重新计算丢失的数据分区。

5.5.1 Spark Core是什么

  • Spark Core

Spark Core 是 Apache Spark 的核心组件,提供了 Spark 的基础功能,包括任务调度、内存管理、故障恢复以及与存储系统的交互等。Spark Core 提供了一个运行时环境,支持所有其他的 Spark 模块,例如 Spark SQL、Spark Streaming、MLlib(机器学习库)和 GraphX(图处理库)。

Spark Core 的主要组成部分包括:

  1. RDD API:提供了用于操作和处理数据集的功能。
  2. 任务调度器:负责任务的分配和执行。
  3. 内存管理器:管理应用程序使用的内存。
  4. 容错机制:确保即使在硬件故障的情况下也能正确执行程序。

5.5.3 Spark Core 和RDD的关系

通俗点来说就是:Spark Core是Spark的核心组件,他的底层引擎就是RDD ,Spark Core 的编程模型允许开发者以 RDD 为基础编写应用程序,SparkCore要遵守RDD的规则。
我们如果要使用SparkSQL去Sql语句的话,sql要遵守DataFrame/DataSet类型,然后转化为RDD能执行的代码(DataFrame 和 Dataset API 内部已经实现了对 RDD 的封装和优化。当你使用 DataFrame 或 Dataset API 时,Spark 会自动将这些操作转换为一系列的 RDD 转换操作),但是Spark Core不需要进行转化,即可以直接进行计算执行代码,因为他的底层引擎就是RDD

总结

  • Spark Core 是 Spark 的核心组件,支持 RDD 作为其主要的数据抽象。
  • RDD是一种低级别的数据抽象,适用于更细粒度的控制和自定义逻辑。
  • DataFrame 和 Dataset是更高层次的抽象,提供了更简单的接口和更好的性能优化。
  • 当使用 DataFrame 和 Dataset 时,Spark 会自动将操作转换为RDD 操作,但用户通常不需要关心这个细节。

6. Spark部署方式

Spark部署模式分为Local模式(本地单机模式)和集群模式

  1. Local 模式(本地模式)
  • 本地模式部署,使用一台服务器进行部署,一般用于测试代码,在本地能运行成功的代码在集群下也能运行成功
  1. 集群模式
  • spark on standalone模式
  • Standalone模式被称为集群单机模式。Spark框架自带了完整的资源调度管理服务,可以独立部署到一个集群中,无需依赖任何其他的资源管理系统。在该模式下,Spark集群架构为主从模式,即一台Master节点与多台Slave节点,Slave节点启动的进程名称为Worker。此时集群会存在单点故障问题,利用Zookeeper搭建Spark HA集群解决单点问题。

在这里插入图片描述

集群主从架构

  • cluster manager: 主节点, 管理集群,控制整个集群,监控worker。在YARN模式中为资源管理器
  • worker: 从节点, 控制计算任务, 创建executor或driver进程
  • driver: 进程程序, 负责管理计算任务, 当spark的计算代码程序运行Application的main()函数时就会产生一个drive。
  • executor: 进程程序, 负责执行计算任务, 在executor进程中创建线程执行task
  • spark on yarn模式
  • Yarn模式被称为Spark on Yarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务,由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以有效提高资源利用率,Yarn模式又分为Yarn Cluster模式和Yarn Client模式:
  • yarn cluster模式: 由yarn自行选择资源充足的节点创建driver进程, 生成环境中使用
  • yarn client模式: spark应用程序提交到哪台节点, 就由哪台节点创建driver进程, 测试环境中使用

在这里插入图片描述

  • spark on mesos模式 了解
  • mesos资源调度工具管理spark集群资源,Mesos模式被称为Spark on Mesos模式,Mesos与Yarn同样是一款资源调度管理系统,可以为Spark提供服务,由于Spark与Mesos存在密切的关系,因此在设计Spark框架时充分考虑到了对Mesos的集成,但如果你同时运行Hadoop和Spark,从兼容性的角度来看,Spark on Yarn是更好的选择。

7. spark开发方式

spark开发方式有两种:

  • 交互式开发:交互式开发是指在开发过程中,程序员可以即时地测试代码片段或者函数的效果,而不必等到整个程序完成后再进行测试
  • 脚本开发:脚本开发是一种传统的编程方式,程序员编写完整的脚本或程序文件,然后一次性运行整个脚本。这种方式适用于自动化任务和构建大型应用程序。

7.1 交互式开发

交互式开发有 2中模式:

  • Scala交互式开发
  • Python交互式开发

Scala 交互式开发 :
   Scala 是一种静态类型的函数式编程语言,同时兼容面向对象编程风格。在 Scala 中进行交互式开发通常涉及到使用
REPL(Read-Eval-Print Loop)环境,如 scala 命令行工具或集成开发环境中的 Scala REPL 特性。

Python 交互式开发:
   Python 是一种动态类型的解释型语言,广泛应用于数据分析领域。在 Python 中进行交互式开发通常涉及到使用 Jupyter Notebook、Zeppelin 或 IPython shell 等工具。

准备前提:启动Hadoop集群 ,因为Spark的最终结果是存储在HDFS上面的因此我们其实要启动的是HDFS

#  启动Hadoop集群
start-all.sh  

7.1.1 Scala交互式开发

  • 输入spark-shell指令进入终端进行开发
spark-shell

在这里插入图片描述

7.1.2 Python交互式开发

注意:park依赖的Python解析器版本是Python3,系统中如果没有Python3会报如下错误

python3:没有那个文件或目录

  • 安装Anaconda工具, 自带python3解析器

python3的安装可以借助Anconada工具完成,Anconada中自带Python3,同时还集成了各种Python的科学计算库(Pandas,Numpy等)Anconada的安装参考《部署文档》注意安装完成后需要重启服务
init 6

anaconda虚拟环境操作指令:

# 查看所有的虚拟环境
conda info --envs
# 创建新的虚拟环境, 并安装python解析器 conda create -n 虚拟环境名 python=版本号
conda create -n itcast python=3.9
# 切换进入虚拟环境 conda activate 虚拟环境名
conda activate itcast
# 退出虚拟环境
conda deactivate
# 删除 conda remove -n 虚拟环境名 --all
conda remove -n itcast --all

conda activate base # 要先进入base虚拟环境
输入pyspark
进入python终端

在这里插入图片描述
我们可以在这里进行计算(注意:相当在内存中进行了计算,结果不会保留)
在这里插入图片描述

7.2 脚本式开发

先写一个以.py 结尾的文件
然后执行
示例:要自信root下面的sparkshell1.py文件
在这里插入图片描述

我们既可以通过python3 来执行
在这里插入图片描述
注意:

我们需要在文件中 导入 pyspark这个模块,如果环境中没有,那么就会报错,这个时候我们只需要下载pyspark这个模块就可以了。

pip install pyspark==3.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

然后再次运行程序,即可以正常的出结果。

注意:一般不同spark应用程序可以使用不同的spark和python解析器, 可以通过以下代码指定spark和python解析器
也可以将以下spark和python解析器路径添加到 /etc/bashrc 文件中, 此时就不需要在每个应用程序中手动指定spark和python解析器(练习时可以设置, 实际工作中不建议使用此方式)

我们在进入etc目录下会有一个bashrc文件

在这里插入图片描述
这个文件里面就存放我们的spark和python解析器的路径,这样我们就可以避免每一次都需要写路径
在这里插入图片描述

8. PyCharm远程开发配置

  • 创建一个pycharm项目
  • 创建好项目之后,我们点击“文件”–“设置”–“SSH连接”
    这一步是为了我们的pycharm能够连接上我们的服务器
    在这里插入图片描述
    我们需要连接几台这里就连接几台
  • 配置远程的Python环境
    pycharm中点击File,选择Settings,选择项目python解析器: Python Interpreter, 添加新的python解析器
    在这里插入图片描述
    我们这里选择我们刚那个连接好的服务器,看python具体在那一台上面
    在这里插入图片描述
    一直点击下一步,然后选择系统解释器,我们可以修改服务器上同步文件夹的位置
    在这里插入图片描述
    最后点击创建就可以了
  • 配置sftp服务

当配置Python远程环境时,指定了远程映射目录后,会自动配置sftp。

  • 使用sftp操作远程服务器的文件
  • 将本地开发的代码自动上传服务器

我们这里选择自动上传文件在这里插入图片描述

下面这个配置是自动生成的,如果出现问题可以自行修改
在这里插入图片描述
在这里插入图片描述

  • 第一个python spark开发程序
    创建一个文件写入数据
    在这里插入图片描述
    右键执行查看结果,是否能正常运行
    在这里插入图片描述
  • 配置数据库
    点击右边的数据库标识
    在这里插入图片描述

点击加号,选择数据源
在这里插入图片描述
进入后填写数据库的链接信息,最后测试通过就可以。第一次连接时候需要下载驱动

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

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

相关文章

Python爬虫入门03:用Urllib假装我们是浏览器

文章目录 引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块 模拟浏览器请求使用Request方法添加请求头信息代码示例1. 设置请求URL和请求头2. 定义请求参数并转换为适当的格式3. 使用Request方法封装请求4. 发送请求并获取响应 常用使用方…

项目实战_表白墙(升级版)

你能学到什么 表白墙(升级版)Mybatis的一些简单应用 正文 前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中,接下来咱们借助MyBatis来实现数据库的操作。 数据准备 如果我们…

Linux-用户和用户组管理

用户管理 创建 useradd USERNAME(名字) [rootlocalhost ~]# useradd bao 创建指令 怎么判断创建成功与否(是否报错) 观察是否报错可行但用变量的方式判断会更加直观 [rootlocalhost ~]# echo $? 变量 什么是变量&…

Vant2框架tab切换list不加载问题(切换后onload不继续触发)

遇到的问题: van-list 加载,页面上有个切换的 van-tab,实现切换不同的类型,加载不同的list的功能。 Vant2 的 List 列表 就有个 bug,当切换 tab 的时候,它的 onload 没有自动触发。 然而在当前标签页&#…

AMD第二季度财报:数据中心产品销售激增,接近总收入一半

#### 财报亮点 7月30日,AMD公布了截至6月29日的第二季度财务业绩,利润超过了华尔街的预期。根据TechNews的报道,最值得注意的是,AMD现在近一半的销售额来自于数据中心产品,而非传统的PC芯片、游戏主机或是工业与汽车嵌…

IDEA打开项目显示在顶端

问题 IDEA打开项目显示在顶端,更改到左侧 解决方案 删除项目中.idea文件,重新打开

【pikachu靶场】跨站脚本攻击详细教程Cross-Site Scripting(xss)

文章目录 XSS(跨站脚本)概述 1.反射型xss(get) 2.反射型xss(post) 3.存储型XSS 4.DOM型xss 5.DOM型XSS-X 6.xss之盲打 7.xss之过滤 8.xss之htmlspecialchars 9.xss之href输出 10.xss之js输出 XSS…

并发编程相关面试题-Synchronized

重量级锁实现的原理 1、synchronized是JVM内置锁,基于Monitor机制实现,依赖底层操作系统的互斥锁Mutex(互斥量),它是一个重量级锁、 2、synchronized同步方法是通过方法中的access_flags中设置ACC_SYNCHRONIZED标志来…

换根dp学习总结3

我也不想搞这么多,但是这东西真的太难了,因为我还是个蒟蒻。算了蒟蒻继续写这次的总结了 寻找全图最远路径问题——Computer ——题目来源于hdu2196 题意:题目就是说会输入多组数据,每组数据给你一个n,表示结点的总数…

怎么评价程序员40岁了竟然还在撸代码?

怎么评价外卖员40岁了竟然还在送外卖? 怎么评价滴滴司机40岁了竟然还在跑滴滴? 怎么评价老师40岁了竟然还在教书?难道程序员的本职工作不是敲代码吗?无论你是管理层还是螺丝钉,工业环境下怎么可能一行代码都不敲呢&…

RocketMQ Dashboard安装

RocketMQ Dashboard 是一个基于 Web 的管理工具,用于监控和管理 RocketMQ 集群。它提供了一个用户友好的界面,使管理员能够轻松地查看和操作 RocketMQ 系统中的各种组件和状态。 主要功能包括: 集群管理: 监控和管理 NameServer 和 Broker …

web框架:django基础(二)

文章目录 django基础(二)1.回顾2.今日概要3.路由系统3.1 传统的路由3.2 正则表达式路由3.3 路由分发小结 3.4 name3.5 namespaceapp_namenamespace的多层嵌套 3.4 最后的 / 如何解决?3.5 当前匹配对象小结 4.视图4.1 文件or文件夹4.2 相对和绝…

《QDebug 2024年7月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Qt5 QML 在某些环境下,有些字体中文渲染有问题 如 Qt5.15 在部分安卓机上复制的复只有半截宽,半径的径字也不对,等等 用 Qt6.7 测试则正常,或者换成其他如小米、阿里巴巴…

Golang的TLS版本配置参数-排坑经历

一、背景 公司有个黑盒监控拨测组件,类似可以通过各种协议如HTTP、TCP、ICMP等等针对目标主机、目标IP、目标站点进行定时拨测,通过返回的状态码等信息来推断,目标业务系统/主机、站点是否存在异常,健康情况如何。 最近在配置一个…

一文搞懂机器学习!2024.6月最新!(附代码实现)

前言 机器学习入门精品文章 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文介绍机器学习的基础内容。 机器学习是人工智能的一个分支,它使计算机系统能够从数据中学习并做出决策或预测&am…

Jangow-1.0.1靶机漏洞复现(未完成)

首先,这个靶机只能使用VirtualBox打开,靶机下载地址为 https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机软件下载地址为 Download_Old_Builds – Oracle VM VirtualBox 开启靶机后访问ip进入如下页面,点击site进入到一个…

【C++】哈希容器

unordered系列关联式容器 在之前的博文中介绍过关联式容器中的map与set,同map与set一样,unordered_set与unordered_set也是关联式容器。 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,查询效率可以达到logN;在…

详解HTTP代理与SOCKS代理之间的差异

代理服务器在网络安全和隐私保护方面,发挥着十分重要的作用。其中,HTTP代理和SOCKS代理是两种常见的代理方式,它们在原理、功能和应用场景上有着明显的差异。本文将为大家深入分析这两种代理之间的区别,帮助大家更好地选择适合自己…

Linux中如何添加磁盘分区

在Linux中添加分区通常涉及到几个步骤,包括识别磁盘、创建分区、格式化分区,以及挂载或将其用作特定的文件系统类型(如LVM、RAID等)。以下是一个基本的步骤指南,假设你正在使用命令行界面(CLI)和…

《技术人求职之道》之简历优化篇(下):技能与项目亮点,如何让你的简历熠熠生辉

摘要 本文将深入探讨技术求职者在撰写简历时的关键要素,包括专业技能的表达和项目经验的描述。文章首先提出专业技能描述的六条基本原则,包括统一技术词汇、标点符号一致性、技术关键字的驼峰命名法、技术分类、技术热度和掌握度排序以及慎用“精通”。接着,指导读者如何美…