Spark初識
spark幾種模式
- local 下載下來后,不做什么配置
- StandLone 了解即可
·····Spark集群: 1個節(jié)點 N個節(jié)點 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
測試執(zhí)行的命令:
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 生產(chǎn)上
IDEA 編程 開發(fā) 本地都不需要去下載Spark的安裝包 pom里面加上對應的依賴
RDD
A Resilient【彈性的】 Distributed【分布式】 Dataset【數(shù)據(jù)集】 (RDD)
彈性 分布式計算可以容錯(節(jié)點掛了、數(shù)據(jù)丟了....)
分布式 可以運行在多個節(jié)點上 并行
數(shù)據(jù)集 集合、文件、Hive Table、HBase Table、RDBMS Table
RDD ===》 集合就是一個數(shù)據(jù)集
Represents an immutable, 不可變 RDDA map => RDDB
partitioned collection of elements 集合里面的元素是可以分區(qū)的、切割 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 并行方式執(zhí)行
Internally, each RDD is characterized by five main properties:【RDD的五大特性】
-
- A list of partitions 一個RDD包含多個分區(qū)
file ==> 多個block
partition/block ==> 并行
RDD中體現(xiàn):protected def getPartitions: Array[Partition]
- A list of partitions 一個RDD包含多個分區(qū)
-
- A function for computing each split/parttion
一個函數(shù)對RDD每個分區(qū)的數(shù)據(jù)進行操作
RDD 進行Map方法 ===》RDD里面的每個分區(qū)/分片 都作用上map方法
Input Split ===》 MapTask
input ===> N個InputSplit分別交給對應的MR去執(zhí)行
RDD中體現(xiàn):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:沒依賴:集合數(shù)據(jù)、測試數(shù)據(jù)、文本數(shù)據(jù)
RDD中體現(xiàn):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分區(qū)
13x ==>
18x ==>
other ==>
RDD中體現(xiàn):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:最佳位置
移動計算優(yōu)于移動數(shù)據(jù),就近原則,減少網(wǎng)絡IO開銷
RDD中體現(xiàn):protected def getPreferredLocations(split: Partition): Seq[String] = Nil
1個partition分區(qū) ==》對應 一個task[線程]
RDD = 5 5個task就是并選走的
Partition是一個邏輯概念 InputSplit