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

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独立应用程序:

使用 Scala 语言编写的 Spark 程序,需要使用 sbt 进行编译打包。Spark 中没有自带sbt,需要单独安装。可以到 官网 下载 sbt 安装文件,最新版即可
在这里插入图片描述
在这里插入图片描述

下载好
在这里插入图片描述

创建一个目录
在这里插入图片描述

这里我们把 sbt 安装到“/usr/local/sbt”目录下,执行如下命令:
在这里插入图片描述

在这里插入图片描述
把 bin 目录下的 sbt-launch.jar 复制到 sbt 安装目录下
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
新建一个文件然后将下列内容写下去

#!/bin/bash 
SBT\_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M" 
java $SBT\_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

在这里插入图片描述

保存后,还需要为该 Shell 脚本文件增加可执行权限:
然后,可以使用命令 sbt sbtVersion 查看 sbt 版本信息:
在这里插入图片描述
完成了,是有一点点慢!
在这里插入图片描述

(1) 实现wordcount功能,并将结果写入本地文件;
在本地创建目录
在这里插入图片描述
在这里插入图片描述

创建这个文件。

在这里插入图片描述

写入数据。

在这里插入图片描述
检查目录结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)分别使用sbt打包上述程序;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)通过spark-submit执行生成的jar。
在这里插入图片描述
在这里插入图片描述

  1. 编写Scala独立应用程序:

实现生成任意RDD,并将结果写入文件;



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001510469.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 重命名并设置权限组  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001526123.png)


在终端中执行如下命令创建一个文件夹 spark\_zqc\_maven\_scala 作为应用程序根,目录:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001541539.png)


写入下面内容


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001555343.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


(2) 分别使用maven打包上述程序;  
 该 程 序 依 赖 Spark Java API, 因 此 我 们 需 要 通 过 Maven 进 行 编 译 打 包 。 在./spark\_zqc\_maven\_scala 目录中新建文件 pom.xml,然后,在 pom.xml 文件中 添加如下内容,用来声明该独立应用程序的信息以及与 Spark 的依赖关系:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001622267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


为了保证 Maven 能够正常运行,先执行如下命令检查整个应用程序的文件结构,


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001635821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


接下来,我们可以通过如下代码将整个应用程序打包成 JAR 包(注意:计算机需要保持连接网络的状态,而且首次运行打包命令时,Maven 会自动下载依赖包,需要消耗几分钟的时间):


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001643350.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001648506.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


(3) 通过spark-submit执行生成的jar。  


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/7c0b116b491b7efa2b39807e506ffad0.png)
![img](https://img-blog.csdnimg.cn/img_convert/ce9651aaa7570a256adef665bdc7a957.png)
![img](https://img-blog.csdnimg.cn/img_convert/4bdd7f44f78a5500735629a04be96778.png)
![img](https://img-blog.csdnimg.cn/img_convert/1fddb6a4938f5193aeed40b45e69c51b.png)
![img](https://img-blog.csdnimg.cn/img_convert/f46569e9bef98e6adaf774f8d20da044.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**
![img](https://img-blog.csdnimg.cn/img_convert/e859f4c9e30eeb06648cebe09ebe4591.png)

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


[外链图片转存中...(img-4nFP8brM-1712999691004)]
[外链图片转存中...(img-i03d7mEb-1712999691005)]
[外链图片转存中...(img-qIfQHXef-1712999691005)]
[外链图片转存中...(img-Migi4bEn-1712999691005)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**
[外链图片转存中...(img-5I8vgxu2-1712999691006)]

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

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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和强大的功能,可以应用于各种大数据场景,并提供高性能、容错性和一致性保证。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值