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

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。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001657878.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712001704975.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


### 最后


小生凡一,期待你的关注。


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





![img](https://img-blog.csdnimg.cn/img_convert/a16a8f90526b9eae7c5797c76a4794c0.png)
![img](https://img-blog.csdnimg.cn/img_convert/15a828c4c192049d4d1c64a6ccbc02c2.png)

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

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


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

20210712002012931.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)





[外链图片转存中...(img-GZor44N4-1714733545028)]
[外链图片转存中...(img-KXQjORVg-1714733545029)]

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

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值