目录
3.选择正确scala版本(2.12.14) 编辑编辑编辑编辑编辑编辑
1.spark基本信息
-
1.生产背景
- mr、hive批处理、离线处理 存在一些局限性
- 1.mr、api开发复杂
- 2.只能做离线计算不能做实时计算
- 3.性能不高
- mr、hive批处理、离线处理 存在一些局限性
-
2.什么是spark
-
1.官网
-
2.计算引擎
- Spark 是一种专门用于交互式查询、机器学习和实时工作负载的开源框架。 它没有自己的存储系统,但会在其他存储系统
-
3.功能
- 1.批处理/流式数据 Batch/streaming data
- 2.SQL分析 soL analytics
- 3.大规模数据科学 Data science at scale
- 4.机器学习 Machine learning
-
4.特点
- 1.速度快
- 1.spark基于内存计算
- 2.DAG
mr1=>mr2=>mr3 - 3.pipline 【通道的】
- 4.编程模式 线程级别
- 2.易用性
- 1.开发语言:java、scala、python】、sql
- 2.外部数据源
- 3.80多个高级算子:scala算子
- 3.通用性
- 子模块
- sparkcore 离线计算
- sparksql 离线计算
- sparkstreaming、structstreaming 实时计算
- mllib 机器学习
- 图计算 图处理
- 子模块
- 1.速度快
-
5.运行作业的地方
- 1.yarn
- 2.messos
- 3.k8s
- 4.standalone【spark本身集群】
-
-
3.hadoop生态圈 vs spark生态圈
-
1.Batch
- mr、hive
- spqrkcore、sparksql
-
2.SQL
- hive、impala
- sparksql
-
3.stream
- storm
- sparkstreaming、sss
-
4.MLLib
- Mahout
- MlLlib
-
5.real 存储
- HNase、cassandra
- DataSource、Api
- spqrk不能替换hadoop,spark可以替换mr
-
6.hadoop 和 spark 不同点
-
1.应用场景不同
- Hadoop是一个分布式数据存储架构,将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,降低了硬件的成本。
- Spark是一个专门用来对那些分布式存储的大数据进行处理的工具,它要借助hdfs的数据存储。
-
2.处理速度不同
- hadoop的MapReduce是分步对数据进行处理的,从磁盘中读取数据,进行一次处理,将结果写到磁盘,然后在从磁盘中读取更新后的数据,再次进行的处理,最后再将结果存入磁盘,这存取磁盘的过程会影响处理速度。
- spark从磁盘中读取数据,把中间数据放到内存中,完成所有必须的分析处理,将结果写回集群,所以spark更快。
-
3.容错性不同
- Hadoop将每次处理后的数据都写入到磁盘上,基本没有错数据丢失的情况。
- Spark的数据对象存储在弹性分布式数据集 RDD,RDD是分布在一组节点中的只读对象集合,如果数据集一部分丢失,则可以根据于数据衍生过程对它们进行重建。而且RDD 计算时可以通过 CheckPoint 来实现容错。
-
-
-
4.spark版本
- spark 1.x
- spark 2.x (主流)
- spark 3.x (主流)
-
5.编程模型(RDD)
-
1.Spark编程模型的最主要抽象
- 第一个抽象是 RDD(弹性分布式数据集)
- 第二个抽象是两种共享变量,即支持并行计算的广播变量和累加器。
-
2.mr和spark使用区别
- low level => mapreduce
- high level => spark 高级算子
RDD开发比mapreduce降低开发人员的开发成本 .
-
3.什么是RDD
-
RDD全称:resilient distributed dataset
-
1.RDD:弹性分布式数据集
-
2.数据集
-
这个数据集的全部或部分可以缓存在内存中,并且可以在多次计算时重用。RDD其实就是一个分布在多个节点上的数据集合。
-
-
3. partitions解释
-
partition 是RDD的最小单元
-
RDD是由分布在各个节点上的partition 组成的。
-
-
-
4.RDD计算方式
-
1.弹性、
- 容错 => 计算的时间可以重试
-
2.分布式
-
1.RDD分布式计算的需求
- 分区控制
- Shuffle控制
- 数据存储\序列化\发送
- 数据计算API
- 一个统一的数据抽象对象,来实现上述分布式计算所需的功能,这个抽象对象就是RDD
-
2.存储方式
- RDD: 1 2 3 4 5 6 (举例)
partition1: 1 2 3
partition2: 4 5
partition3: 6
bigdata13:partition1
bigdata14:partition2
bigdata15:partition3
- RDD: 1 2 3 4 5 6 (举例)
-
3.计算方式
- 对rdd进行操作实际上是操作rdd分区中的数据
rdd: 1 2 3 4 5 6 + 1
partition1:1 2 3 + 1
partition2:4 5 + 1
partition3:6 + 1
- 对rdd进行操作实际上是操作rdd分区中的数据
-
4.RDD五大特性
- 1.A list of partitions
- rdd底层存储一系列partition
- RDD是一个由多个partition(某个节点里的某一片连续的数据)组成的的list;将数据加载为RDD时,一般会遵循数据的本地性(一般一个hdfs里的block会加载为一个partition)。
- 2.A function for computing each split
- 针对rdd做计算/操作其实就是对rdd底层的partition进行计算
- 一个函数计算每一个分片,RDD的每个partition上面都会有function,也就是函数应用,其作用是实现RDD之间partition的转换。
- 3.A list of dependencies on other RDDs
- rdd之间的依赖关系(血缘关系)
- rdda => rddb => rddc
rddb对rdda有依赖关系
- rdda => rddb => rddc
- 依赖还具体分为宽依赖和窄依赖,但并不是所有的RDD都有依赖。为了容错(重算,cache,checkpoint),也就是说在内存中的RDD操作时出错或丢失会进行重算。
- rdd之间的依赖关系(血缘关系)
- 4.Optionally,a Partitioner for Key-value RDDs
- partitioner => kv类型的rdd
rdd:1 2 3 4 5 6
partition1: 1 2 3
partition1: 1 2 3
partition1: 1 2 3 - 如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区,例如这里自定义的Partitioner是基于key进行分区,那则会将不同RDD里面的相同key的数据放到同一个partition里面
- partitioner => kv类型的rdd
- 5.Optionally, a list of preferred locations to compute each split on
- 最优的位置去计算,也就是数据的本地性。
- 优点:减少数据传输的网络io
- 好处
- 有限吧作业调度在数据所在节点【理想状态】
- 常见计算:
作业调度在别的节点上 ,数据在另外一台节点上吗,只能把数据通过网络把数据传输到 作业所在节点上去进行计算
- 最优的位置去计算,也就是数据的本地性。
- 1.A list of partitions
- 3.数据集
- 构建rdd本身的数据
-
- RDD操作
- 1.构建sparkcore作业
- mapreduce:程序入口 job
- Initializing Sprak
- 1.SparkContext => sparkcore 程序入口
- 2.SpartConf => 指定 spark APP详细信息
- 1.AppName:作业名字
- 2.Master:作业运行在什么地方 spark作业的运行模式
- 工作中
- yarn
- k8s
- local
- code编写测试阶段
- local
- 工作中
- 2.如何指定Master spark作业运行模式
- 1.local模式
- 2.
- 1.构建sparkcore作业
-
-
2.spark在idea中使用
构建sparkcore 作业 【idea】
-
1.勾选maven
- org.scala-tools.archetypes:scala-archetype-simple
-
2.version选择1.0
-
3.选择正确scala版本(2.12.14)
-
4.添加依赖:
<!--spark-core依赖--> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.2.1</version> </dependency>
3.spark部署【分布式计算框架】
- spark部署部署分布式的 ,spark支持分布式
-
1.安装
- 1.解压
[hadoop@bigdata13 software]$ tar -zxvf ./spark-3.3.1-bin-hadoop3.tgz -C ~/app/ - 2.软连接
[hadoop@bigdata13 app]$ ln -s spark-3.3.1-bin-hadoop3 spark - 3.环境变量
- [hadoop@bigdata13 app]$ vim ~/.bashrc
[hadoop@bigdata13 app]$ source ~/.bashrc#SPARK_HOME export SPARK_HOME=/home/hadoop/app/spark export PATH=${PATH}:${SPARK_HOME}/bin
- [hadoop@bigdata13 app]$ vim ~/.bashrc
- 1.解压
-
2.spark使用
-
1.启动
- [hadoop@bigdata13 app]$ spark-shell --master local[2]
- [hadoop@bigdata13 app]$ spark-shell --master local[2]
-
2.网页
- http://bigdata13:4040
-
3.创建RDD
-
1.集合模式
-
1.创建Array
- val data = Array(1,2,3,4,5,6)
-
2.生成RDD
- val distData = sc.parallelize(data)
- val distData = sc.parallelize(data)
-
-
2.查看job
- distData.collect
- distData.collect
-
-
4.spark参数内容
-
spark-she11:
- masterspark作业运行环境--deploy-mode yarn模式 运行选择
- classspark作业包 运行主类mainclass 包名
- name指定spark作业的名字
- jars 指定第三方的依赖包
- conf 指定spark作业配置参数
-
yarn 参数补充
- num-executors指定申请资源的参数
- executor-memory 指定申请资源的参数
- executor-cores指定申请资源的参数
- queue 指定作业 运行在yarn的哪个队列上
-
-
4.命令使用
-
1.修改名字 --name
- [hadoop@bigdata13 ~]$ spark-shell --master local[2] --name "spark-dl2262"