2021-03-11

Spark初识

spark几种模式

  1. local 下载下来后,不做什么配置
  2. 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 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 list of dependencies on other RDDs RDD有很多依赖的
      RDDA ==》 RDDB ===> RDDC
      RDD:没依赖:集合数据、测试数据、文本数据

    RDD中体现:protected def getDependencies: Seq[Dependency[_]] = deps

    • 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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容