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