SparkCore
Spark
- spark是大数据生态中一个性能极好的分布式计算框架
一、特点:
-
速度快:通过测试,相同机器相同数据集,运算速度比Hadoop2.x 中MapReducer快超过100倍
-
简单易用:可以支持开发者使用Java, Scala, Python, R, and SQL多种方式进行编程
运行效率:Java > Scala > Python > R
开发效率:HiveSQL > Scala > Python > Java -
通用性
Spark提供了分布式计算的一揽子解决方法
SparkCore:高性能的批处理运算(完全替代MR)
SparkSQL:结构化数据分析(完全替代Hive)
SparkStreaming: 流式计算(完全替代Storm)
- 兼容性
- 任务调度方式和集群模式:Spark可以直接将任务管理在已有的Hadoop(YARN),Apache Mesos, Kubernetes等专门进行计算资源管理和调度的组件,也可以使用standalone模式,搭建完全独立的Spark集群。
- 数据读取:兼容所有已知的数据源
二、Standalone
-
是Spark提供的最经典的分布式集群运行方案
-
集群角色
-
Master 主节点
管理集群状态
与客户端进行交互,接收客户端提交的任务,并将任务分配给worker节点执行 -
Worker
处理master分配的任务,并将执行完的结果返回driver程序或者输出到各种存储组件中
-
-
核心概念
-
spark job
通过scala、java、python编写的含有main方法的可执行程序,
main中需要创建一个SparkContext,这个程序称之为一个job的driver程序,将程序打包成可执行的jar -
executor 执行器 (进程)
一个executor只能属于一个job
一个job会创建多个executor
每个worker节点上,只会为一个job创建一个executor -
task 任务 (线程)
task属于executor,每个executor中根据程序的并发度启动不同数量task并行执行
-
三、Spark的standalone模式集群搭建
-
下解压改名字
- 版本:
经典版本:1.6.3 市场占有率 20%
较新版本:2.x 2.4.0 2.4.7 70%↑
最新版本:3.0.1 5%↓
- 版本:
-
修改配置文件分发安装包
-
spark-env.sh
spark环境相关配置# standalone模式的master SPARK_MASTER_HOST=master节点的主机名 # 默认使用7077 SPARK_MASTER_PORT=master节点的端口 # 配置java_home export JAVA_HOME=/opt/jdk1.8
-
spark-site.conf
spark集群设置相关配置spark.master spark://bd0401:7077
-
slaves
spark的standalone的worker所在的节点# 集群所有机器的主机名 一行一个
-
-
添加环境变量
echo 'export SPARK_HOME=/opt/spark-2.2.1' >> /etc/profile echo 'export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH' >> /etc/profile source /etc/profile
-
启动并测试
start-spark-all.sh
四、Spark的任务编写方式
-
spark-shell
-
优点:
方便,不需要编译器,直接在命令行中使用类似scala解释器的环境,编写spark程序,并且实时提交到集群运行 -
缺点:
不方便导入第三方依赖
不便于调试
不便于代码的保存
-
-
通过IDEA等继承开发环境编写spark job
-
优点
方便项目开发
弥补了所有的shell的缺陷 -
缺点
编写好的job需要打成jar包提交到集群运行
-
五、RDD
-
RDD的概述
RDD是一个弹性分布式数据集 -
5个主要特点
-
A list of partitions
一个分区的列表 -
A function for computing each split
函数并行应用在每个分片(分区)上 -
A list of dependencies on other RDDs
维护一个与其他的RDD的依赖链条 lineage -
Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
可选的,可以自定义一个分区器对KV数据的RDD进行自定义分区 -
Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
可选的,Spark会使用更优化的位置策略减少网络IO
-
-
不可变性
RDD是一个不可变集合,对RDD的操作只能产生新的集合 -
RDD懒加载的特点
RDD的血统中,只有最终调用了action算子才从头开始进行运算
如果全是transformation算子,RDD只编译不执行- RDD算子的分类
- transformation算子
转换算子返回值是RDD
- transformation算子
- action算子
行动返回值不是RDD
- RDD算子的分类