spark 是用于大规模数据处理的统一分析引擎。

RDD是一种分布式内存抽象。



1.1 Spark****是什么

定义:Apache Spark是用于大规模数据 (large-scala data) 处理的统一分析引擎

RDD 是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,开且有一定的容错方式。而这也 是整个Spark 的核心数据结构,Spark 整个平台都围绕着RDD进行。

Spark是一款分布式内存计算的统一分析引。 其特点就是对任意类型的数据进行自定义计算.

Spark可以计算,结构化、半结构化、非结构化等各种类型的数据结构,同时也支持使用Python、Java、 Scala、R以及SQL语言上开发应用程序计算数据。

Spark的适用市场非常广泛,所以,被称之为统一的(适用面广)的分析引(数据处理)

尽管Spark相对于Hadoop而言其有较大优势,但Spark并不能完全代替Hadoop。在计算层面,Spark相比校MR《MapReduce) 有巨大的性能优势,但至今仍有许多计算工具基于MR构架,比如非常成热的Hive

Spak仅能计算,而Hadoop生态圈不仅有计算(MR)也有存储(HDFS)资源管理调度(YARN),HDFSMYARNB是许多大数据体系的核心框架。

1.3****扩展阅读:Spark VS Hadoop

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

答案: Hadoop中的MR中每个map/reduce task都是个java进程方式运行,好处在于进程之间是瓦相独立的,每个task独享进程资源,没有互相干扰,监控方便,但是向题在于task之间不方便共享数据,执行效率比较低。比如多个maptask读取不同数据源文件需要将数据源加载到每个map task中,造成重复加载和浪费内存。而基于线程的方式计算是为了数报共享和提高执行效率,Spark采用了线程的最小的执行 单位,但缺点是线程之间会有资源竞争

[扩展阅读]:线程基本概念

线程是CPU的基木调度单位

一个进程一般包含多个线程。一个进程下的多个线程其享进程的资源

不同进程之间的线程相互不可见

线程不能独立执行

一个线程可以创建和撤销另外一个线程

1.4Spark****四人特点

1.速度快

2.简单易用

3.通用性强

4.适用性强

1.5Spark 框架模块-了解

1.6 Spark****的运行模式-了解

Spark提供多种运行模式,包括:

本地模式(单机) Local

本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境

Standalone模式(集群)

Spark小的各个角色以独立进程的形式存在,非且成Spark集群年境

·Hadoop YARN式(集群)

Spark小的各个角色运行在YARN的容器内部,开组成Spark果那环

Kubernetes模式 (容器集样)

Spark中的各个角色运行在Kubernetes的容器内部。并组成Spark集群环境

云服务模式(运行在云平台上)

总结:

Spark解决什么问题?

海量数据的计算,可以进行离线批处理以及实时流计算

Spark有哪些模块?

核心SparkCore、SQLf算(SparkSQL) 、流计算(SparkStreaming)、图计算(GraphX)、机器学习(MLlib)

Spark特点有哪些?

速度快、使用简单、通用性强、多种模式运行

Spark——yarn

一些软件的安装地址

/export/server/spark-3.1.2-bin-hadoop3.2/

使用指定路径启动pyspark

pyspark --master yarn --conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3"  --conf "spark.pyspark.python=/root/anaconda3/bin/python3"

使用spark-sbmit进行提交命令

[root@node1 bin]# spark-submit --master yarn --conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" --conf "spark.pyspark.python=/root/anaconda3/bin/python3"  export/server/spark-3.1.2-bin hadoop3.2/examples/src/main/python/pi.py 10

RDD

RDD是什么?

弹性分布式数据集,分布式计算的的实现载体(数据抽象)。

RDD的五大特称:

(1)A list of partitions

一组分区:RDD由很多partition构成,有多少partition就对应有多少task

(2)A function for computing each split

一个函数:对RDD做计算,相当于对RDD的每个split或partition做计算

(3)A list of dependencies on other RDDs

RDD之间有依赖关系,可溯源

(4)Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)

一个Partitioner:即RDD的分片函数,如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区

(5)Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

一个列表:存储存取每个Partition的优先位置(preferred location),计算每个split时,在split所在机器的本地上运行task是最好的,避免了数据的移动,split有多个副本,所以preferred location不止一个

修改pyspark的yarn模式

首先 配置环境

先配置虚拟环境的jieba

cd /root/anaconda3/envs/pyspark_env/bin/

pip install --target=/root/anaconda3/envs/pyspark_env/lib/python3.8/site-packages jieba

后配置本地环境的jieba

cd ~

pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple/

启动环境

start-dfs.sh

start-yarn.sh

进入zookeeper的bin目录

zkServer.sh start

在hdfs的test/input/上传数据

提交代码

spark-submit --master yarn --conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" --conf "spark.pyspark.python=/root/anaconda3/bin/python3" --py-files ~/defs.py ~/main.py