【小白视角】大数据基础实践(七) Spark的基本操作_spark操作类型

2.7.3 Spark Streaming
  1. 实时数据流处理组件,类似Storm
  2. Spark Streaming提供了API来操作实时流数据。
2.7.4 MLlib
  1. Spark 有一个包含通用机器学习功能的包,就是MLlib(machine learning lib)
  2. MLlib 包含了分类,聚类,回归,协同过滤算法,还包括模块评估和数据导入。
  3. 它还提供了一些低级的机器学习原语,包括通用梯度下降优化算法。
  4. 除此之外,还支持集群上的横向扩展。
2.7.5 Graphx
  1. 是处理图的库,并进行图的并行计算。就像Spark Streaming和Spark SQL一样,Graphx也继承了Spark RDD API,同时允许创建有向图。
  2. Graphx提供了各种图的操作,例如subgraph和mapVertices,也包含了常用的图算法,例如PangeRank等。
2.7.6 Cluster Managers
  1. Cluster Managers就是集群管理。Sparkl能够运行在很多cluster managers上面,包括Hadoop YARN,Apache Mesos和Spark自带的单独调度器。
  2. 如果你有了Hadoop Yarn或是Mesos集群,那么Spark对这些集群管理工具的支持,使Spark应用程序能够在这些集群上面运行。

3. Spark运行架构

3.1 基本概念
  • RDD:是ResillientResillient Distributed DatasetDistributed Dataset(弹性分布式数据集)的简称,是分布式内存的一个抽象概念, 提供了一种高度受限的共享内存模型
  • DAG:是Directed Acyclic Graph(有向无环图)的简称,反映 RDD 之间的依赖关系
  • Executor:是运行在工作节点 WorkerNode)的一个进程,负责运行 Task
  • Application:用户编写的 Spark 应用程序
  • Task:运行在 Executor 上的工作单元
  • Job:一个 Job 包含多个 RDD 及作用于相应 RDD上的各种操作
  • Stage:是 Job 的基本调度单位,一个 Job 会分为多组 Task ,每组 Task 被称为 Stage或者也被称为 TaskSet ,代表了一组关联的、相互之间没有 Shuffle 依赖关系的任务组成的任务集
3.2 架构设计
  • Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)
  • 资源管理器可以自带或Mesos或YARN
  • 与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:
    1. 一是利用多线程来执行具体的任务,减少任务的启动开销
    2. 二是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销

在这里插入图片描述

  • 一个 Application 由一个 Driver 和若干个 Job 构成,一个 Job 由多个 Stage 构成,一个Stage 由多个没有 Shuffle 关系的 Task 组成
  • 当执行一个 Application 时, Driver 会向集群管理器申请资源,启动 Executor ,并向 Executor 发送应用程序代码和文件,然后在 Executor 上执行 Task ,运行结束后执行结果会返回给 Driver 或者写到 HDFS 或者其他数据库中

在这里插入图片描述

3.3 Spark 运行基本流程
  • 首先为应用构建起基本的运行环境,即由 Driver 创建一个 SparkContext ,进行资源的申请、任务的分配和监控
  • 资源管理器为 Executor 分配资源,并启动 Executor 进程
  • SparkContext 根据 RDD 的依赖关系构建 DAG 图, DAG 图提交给 DAGScheduler 解析成 Stage ,然后把一个个TaskSet 提交给底层调度器,Task Scheduler处理; Executor 向 SparkContext 申请 Task,Task Scheduler ,将 Task 发放给 Executor 运行,并提供应用程序代码
  • Task 在 Executor 上运行,把执行结果,反馈给 Task Scheduler ,然后反馈给 DAG Scheduler ,运行完毕后写入数据并释放所有资源

在这里插入图片描述

特点:

  • 每个Application 都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task
  • Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可
  • Task采用了数据本地性和推测执行等优化机制
3.4 Spark 运行原理
3.4.1 RDDs
  • Resilient Distributed Datasets (弹性分布式数据集 RDDs
  • RDDs 是 Spark 的分发数据和计算的基础抽象类,是Spark的核心概念;
  • 在 Spark 中,所有的计算都是通过RDDs的创建、转换、操作完成的。
  • RDDs 具有lineage graph(血统关系图)
  • 一个 RDD 就是一个不可改变的分布式集合对象,内部有许多partitions 组成,每个partition 都包括一部分数据,这些 partitions 可以在集群的不同节点上计算;
  • Partition 是 Spark 中的并行处理单元。
3.4.2 RDD运行原理
  • RDD 提供了一组丰富的操作以支持常见的数据运算,分为“动作 Action“转换 Transformation两种类型
  • RDD 提供的转换接口都非常简单,都是类似mapfiltergroupByjoin等粗粒度的数据转换操作,而不是针对某个数据项的细粒度修改 (不适合网页爬虫
  • 表面上 RDD 的功能很受限、不够强大 实际上 RDD 已经被实践证明可以高效地表达,许多框架的编程模型 比如MapReduceSQLPregel
  • Spark 用 Scala 语言实现了 RDDAPI ,程序员可以通过调用 API 实现对 RDD 的各种操作

RDD典型的执行顺序如下:

  • RDD读入外部数据源进行创建
  • RDD经过一系列的转换(Transformation)操作,每一次都会产生不同的RDD,供给下一个转换操作使用
  • 最后一个RDD经过“动作”操作进行转换,并输出到外部数据源
  • 这一系列处理称为一个Lineage(血缘关系),即DAG拓扑排序的结果

RDD的 transformationsactions

点击这里

RDD 运行过程:

  1. 创建 RDD 对象;
  2. SparkContext 负责计算 RDD 之间的依赖关系,构建 DAG
  3. DAGScheduler 负责把 DAG 图分解成多个 Stage ,每个 Stage 中包含了多个Task ,每个 Task 会被 TaskScheduler 分发给各个 WorkerNode 上的 Executor 去执行。
3.4.3 Scala

Scala 是一门现代的多范式编程语言,运行于 Java 平台( JVM Java 虚拟机),并兼容现有的 Java 程序

Scala 的特性:

  1. Scala 具备强大的并发性,支持函数式编程,可以更好地支持分布式系统
  2. Scala 语法简洁,能提供优雅的API
  3. Scala 兼容Java ,运行速度快,且能融合到 Hadoop 生态圈中
  4. Scala 是 Spark 的主要编程语言,但 Spark还支持 JavaPythonR 作为编程语言
  5. Scala 的优势是提供了 REPL Read Eval Print Loop,交互式解释器 ),提高程序开发效率

4. SparkSQL

Spark SQL在Hive兼容层面仅依赖HiveQL解析、Hive元数据,也就是说,从HQL被解析成抽象语法树(AST)起,就全部由Spark SQL接管了。Spark SQL执行计划生成和优化都由Catalyst(函数式关系查询优化框架)负责

在这里插入图片描述

  • Spark SQL增加了SchemaRDD(即带有Schema信息的RDD),使用户可以在Spark SQL中执行SQL语句,数据既可以来自RDD,也可以是Hive、HDFS、Cassandra等外部数据源,还可以是JSON格式的数据
  • Spark SQL目前支持Scala、Java、Python三种语言,支持SQL-92规范

在这里插入图片描述

5. Spark编程实践

5.1 编程环境
  • 操作系统:Linux(建议Ubuntu18.04或Ubuntu16.04);
  • Hadoop版本:3.1.3或2.7.1;
  • JDK版本:1.8;
  • Hadoop伪分布式配置
  • Spark 2.4.8或自编译版本
  • Scala 2.11.8或2.8.0
5.2 实验步骤:
5.2.1 Spark环境配置
  1. 检测java环境和hadoop环境。
    在这里插入图片描述
  2. 安装包下载
    在这里插入图片描述
    Scala: https://www.scala-lang.org/download/all.html
    Spark: http://spark.apache.org/downloads.html
    关于 Spark 官网下载页面中 Choose a package type 几个选项说明:
  • Source Code:spark 源码,需要编译才能使用,可以自由设置编译选项;
  • Pre-build with user-provide Hadoop:属于 Hadoop free 版本,用应用到任意 Hadoop 版本;
  • Pre-build for Hadoop 2.7、Pre-build for Hadoop 2.6:分别基于 Hadoop2.7、2.6 的预先编译版本,需要与本机安装的 Hadoop 版本对应使用;
  • Pre-build with Scala 2.12 and user provided Apache Hadoop:预先编译的版本,包含了 Scala2.12,可应用于任意 Hadoop 版本。
  1. 安装scala

解压安装包(sudo tar -zxvf scala-2.11.8.tgz -C /usr/local/),并更改 scala
在这里插入图片描述

所属用户和用户组为当前用户及所在组。
在这里插入图片描述
在这里插入图片描述

配置环境变量:添加

S

C

A

L

A

H

O

M

E

s

c

a

l

a

SCALA_HOME 变量为 scala 解压路径,并在

SCALAH​OME变量为scala解压路径,并在PATH 变量添加相应 的 bin 目录。
在这里插入图片描述
在这里插入图片描述

使得环境生效
在这里插入图片描述

查看是否安装成功
在这里插入图片描述
已经成功了!

  1. 安装spark

解压安装包(sudo tar -zxvf spark-2.4.8-bin-without-hadoop.tgz -C /usr/local/),更改所属用户及用户组,并将目录重命名为 spark-2.4.8,方便后续配置:
在这里插入图片描述

更改所属用户及用户组
在这里插入图片描述

并将目录重命名为 spark-2.4.8
在这里插入图片描述

配置环境变量,添加 SPARK_HOME 变量,并在 PATH 变量中添加相应的 bin 目录。
export SPARK_HOME=/usr/local/spark-2.4.8
export PATH=

P

A

T

H

:

PATH:

PATH:SPARK_HOME/bin在这里插入图片描述

在这里插入图片描述
Spark 配置文件配置:

在这里插入图片描述

将 spark-env.sh.template 文件复制为 spark-env.sh 文件:
在这里插入图片描述

并配置内容如下:
在这里插入图片描述

启动 spark:启动 spark 之前要先启动 HDFS
在这里插入图片描述

在这里插入图片描述

启动之后网页访问 Master:8080 可以查看当前 Spark workers 状态。
在这里插入图片描述

Spark-shell 进入spark shell
在这里插入图片描述

会有这种错误
在这里插入图片描述

但不需要慌张!不影响使用 scala 使用,如果要解决,可以通过添加系统环境变量。export TERM=xterm-color
在这里插入图片描述
在这里插入图片描述

就不会有了
在这里插入图片描述

1.5 举个例子
通 过 spark-submit 命令运行 spark 自 带 实 例 , spark 自 带 实 例 都 在
SPARK_HOME/examples/jars/spark-examples_2.11-2.4.8.jar 中提供:

spark-submit --class org.apache.spark.examples.SparkPi examples/jars/spark-examples_2.11-2.4.8.jar

注:在运行SparkPi实例时会输出很多运行日志,可以通过加 grep 命令进行过滤,显示关心的信息:

在这里插入图片描述

5.2.2 spark shell中编写Scala代码实现:

(1)分别从本地文件HDFS上的文件以及Spark Context的parallelized()方法生成分别生成RDD_1、RDD_2、RDD_3,要求本地文件格式为每行多个单词,以空格隔开;HDFS上的文本为每行1个单词,即单词以换行符隔开,每个RDD中都要包含1个或多个你的学号或者姓名拼音;
1.1 本地创建in.txt
在这里插入图片描述
写入内容
在这里插入图片描述
上传到spark
在这里插入图片描述
1.2 本地创建文件in0.txt
在这里插入图片描述
写入数据
在这里插入图片描述
上传到hdfs中
在这里插入图片描述
检查是否上传成功
在这里插入图片描述上传到spark
在这里插入图片描述

1.3 spark创建文件
在这里插入图片描述

创建成功!

(2) 输出RDD_1的第一行、RDD_2的所有内容、RDD_3的最大值;
2.1RDD_1的第一行
在这里插入图片描述
2.2 RDD_2的所有内容
在这里插入图片描述

2.3 RDD_3的最大值
在这里插入图片描述

(3) 统计 RDD_1 中“姓名拼音”、“学号”两个单词出现的次数;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果:
zqc 有6个
031904102 有 4个

(4) 对去重后的 RDD_1再去掉RDD_2中的内容;
在这里插入图片描述在这里插入图片描述在这里插入图片描述

(5) 将上述结果与RDD_3合并,并将RDD_3分别写入本地文件系统和HDFS文件系统;
在这里插入图片描述
在这里插入图片描述
查看是否成功放入
在这里插入图片描述
在这里插入图片描述
(6)编写scala代码实现写入任意内容到HDFS中,文件路径自定义,文件以”学号-姓名拼音.txt”命名。

先创建一个文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在HDFS上查看
在这里插入图片描述

5.2.3 编写Scala独立应用程序:

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

zZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)
在HDFS上查看
在这里插入图片描述

5.2.3 编写Scala独立应用程序:

[外链图片转存中…(img-drCHMP7e-1714733613017)]
[外链图片转存中…(img-tPuwQ5iW-1714733613017)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Spark Structured Streaming是一种基于Spark SQL引擎的流处理框架,它可以实现实时数据处理和分析。在使用Spark Structured Streaming进行大数据处理时,需要注意以下几点最佳实践: 1. 使用高可用性的集群:在使用Spark Structured Streaming时,需要保证集群的高可用性,以确保数据处理的稳定性和可靠性。 2. 选择合适的数据源:Spark Structured Streaming支持多种数据源,包括Kafka、Flume、HDFS等,需要根据实际情况选择合适的数据源。 3. 设计合理的数据处理流程:在设计数据处理流程时,需要考虑数据的实时性、处理效率和数据质量等因素,以确保数据处理的准确性和高效性。 4. 优化性能:在使用Spark Structured Streaming进行大数据处理时,需要优化性能,包括调整资源分配、调整并行度、使用缓存等方法,以提高数据处理的效率和速度。 5. 监控和调试:在使用Spark Structured Streaming进行大数据处理时,需要进行监控和调试,及时发现和解决问题,以确保数据处理的稳定性和可靠性。 ### 回答2: Spark Structured Streaming是一种用于实时流式数据处理的大数据最佳实践。它是Apache Spark的一部分,提供了一种简单而强大的方式来处理连续的数据流。 Spark Structured Streaming的实现原理基于Spark的弹性分布式数据集(RDD)模型,它将数据流视为一系列连续的批处理作业。这使得开发者能够使用Spark的强大功能进行实时数据分析和处理。 Spark Structured Streaming的关键特性包括: 1. 高级API:Structured Streaming提供了一种高级API,可以轻松地处理数据流。开发者只需编写一次数据处理逻辑,然后Spark会自动将其应用于连续的数据流。 2. 实时处理:Structured Streaming能够以低延迟处理数据流,提供近实时的结果。 3. 容错性:Structured Streaming具有Spark的容错机制,可以自动处理故障并继续处理数据流,确保数据不丢失。 4. 高吞吐量:Structured Streaming能够处理大规模的数据流,具有较高的吞吐量和扩展性。 5. 与其他Spark组件的集成:Structured Streaming可以与其他Spark组件(如Spark SQL和MLlib)无缝集成,从而可以方便地进行数据分析和机器学习任务。 在实践中,可以使用Spark Structured Streaming来解决许多实时数据处理的问题。例如,可以使用它进行实时日志分析、实时监测和预测、实时推荐和广告投放等。 总而言之,Spark Structured Streaming是一种强大且灵活的实时数据处理解决方案,适用于大规模的数据流处理场景。它提供了简单的API和高性能的处理能力,为开发者提供了处理实时数据流的最佳实践。 ### 回答3: 大数据最佳实践中,Spark的Structuring是一种优秀的实时处理框架,它针对流数据进行高效的处理和分析。StructStreaming提供了一种简单、易于使用的API来处理结构化数据流,并支持强大的时间窗口操作、累加器和支持容错的状态更新。 Spark StructStreaming的最佳实践包括以下几个方面: 1. 数据流处理:结构化流可以处理各种实时数据源,如Kafka、Flume等,并且能够处理高吞吐量和低延迟数据。在处理数据流时,可以使用规约、窗口操作等技术来实现实时的数据计算和聚合。 2. 内存优化:Spark StructStreaming可以将数据缓存到内存中以提高性能,并使用解析器和列式存储来最大限度地减少内存占用和I/O开销。此外,通过调整内存分配和堆外内存配置,可以进一步优化性能。 3. 容错性和数据一致性:StructStreaming提供了容错性和一致性保证,可以在节点故障时自动恢复数据处理,并确保最终输出的一致性。 4. 结构化数据查询:Spark StructStreaming支持基于SQL的查询语言,可以使用SQL语句对流数据进行查询和分析。此外,还可以使用DataFrame和DataSet API进行更高级的数据操作和转换。 5. 流式机器学习:StructStreaming可以与Spark的机器学习库集成,实现基于流数据的实时机器学习模型训练和预测。通过结合流式数据和机器学习算法,可以实现实时的数据分析和预测。 总而言之,Spark StructStreamin的最佳实践是基于结构化数据流的实时处理和分析。它提供了简单易用的API和强大的功能,可以应用于各种大数据场景,并提供高性能、容错性和一致性保证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值