Spark初识
spark几种模式
- local 下载下来后,不做什么配置
- StandLone 了解即可
·····Spark集群: 1个节点 N个节点 VS Hadoop
······· Master Worker
一台机器
·····vi spark-env.sh
export Spark_MASTER_HOST=hadoop
·····slaves
hadoop
多个机器:
slaves 每行配置一个hostname
scp到其他机器上
start-all.sh
jps
Master
Worker
hadoop:8080 +1 WebUI
spark://hadoop:7077
spark-shell --master hadoop:7077
····启动集群:sbin ./start-all.sh
默认端口号是8080,假如被占用,默认加一 8081
测试执行的命令:
spark-submit
--class org.apache.spark.examples.SparkPi
--master spark://ruozedata001:7077
/home/hadoop/app/spark-3.1.1-bin-hadoop3.2/examples/jars/spark-examples_2.12-3.1.1.jar
3
YARN 生产上
IDEA 编程 开发 本地都不需要去下载Spark的安装包 pom里面加上对应的依赖
RDD
A Resilient【弹性的】 Distributed【分布式】 Dataset【数据集】 (RDD)
弹性 分布式计算可以容错(节点挂了、数据丢了....)
分布式 可以运行在多个节点上 并行
数据集 集合、文件、Hive Table、HBase Table、RDBMS Table
RDD ===》 集合就是一个数据集
Represents an immutable, 不可变 RDDA map => RDDB
partitioned collection of elements 集合里面的元素是可以分区的、切割 vs hdfs
that can be operated on in parallel.
Array(1,2,3 4,5,6, 7,8,9,10 )
map filter zip sortBy group ...
PairRDDFunctions: k-v
MR:File ==》 Input Split ==》 Map Task 并行方式执行
Internally, each RDD is characterized by five main properties:【RDD的五大特性】
-
- A list of partitions 一个RDD包含多个分区
file ==> 多个block
partition/block ==> 并行
RDD中体现:protected def getPartitions: Array[Partition]
- A list of partitions 一个RDD包含多个分区
-
- A function for computing each split/parttion
一个函数对RDD每个分区的数据进行操作
RDD 进行Map方法 ===》RDD里面的每个分区/分片 都作用上map方法
Input Split ===》 MapTask
input ===> N个InputSplit分别交给对应的MR去执行
RDD中体现:def compute(split: Partition, context: TaskContext): Iterator[T]
- A function for computing each split/parttion
-
- A list of dependencies on other RDDs RDD有很多依赖的
RDDA ==》 RDDB ===> RDDC
RDD:没依赖:集合数据、测试数据、文本数据
RDD中体现:protected def getDependencies: Seq[Dependency[_]] = deps
- A list of dependencies on other RDDs RDD有很多依赖的
-
-
Optionally【可选的】, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
hash分区
13x ==>
18x ==>
other ==>
RDD中体现:val partitioner: Option[Partitioner] = None
-
- Optionally【可选的】, a list of preferred locations to compute each split on (e.g. block locations for
- an HDFS file)
preferred locations:最佳位置
移动计算优于移动数据,就近原则,减少网络IO开销
RDD中体现:protected def getPreferredLocations(split: Partition): Seq[String] = Nil
1个partition分区 ==》对应 一个task[线程]
RDD = 5 5个task就是并选走的
Partition是一个逻辑概念 InputSplit