Spark

一. 入门

初始

spark基于内存计算(速度快),且会把任务切分成很多块来运行。
借助YARN来调度资源。
2.3版本的,py的spark有很多没有实现。
YARN中给spark提供调度资源的功能,YARN中资源管理的主节点是RS,从节点是NodeManager。(2版本);
资源由YARN管理,任务由application master来管理。
spark读取数据源可以来自hdfs,也可以来自本地。hdfs是基于磁盘进行存储,block块是128M。hdfs的副本存储策略,每个副本128M。
Spark core, Spark Streaming,Spark SQL;

对比下mapreduce:
在这里插入图片描述
从内存缓冲区溢写到磁盘,溢写到几个分区,由谁决定?
由reduce的个数来决定。涉及到数据的节点之间的传输。
spark的shffule和mapreduce的不同,也会基于磁盘,但是maptask基于内存而不放在磁盘中。
MapReduce是从磁盘读,然后再写入磁盘。
Spark可以从源头读取数据,经过spark处理结果,可以放入内存中。不必每一次把结果写入到内存中。

spark 核心RDD

RDD弹性分布式数据集;

HDFS也是分布式文件系统,因为其中有最小的存储单元block分布在不同的节点之上。

RDD也有最小单元partition,有多少个组成,和读取的block数量相同。读取的block数有多少,那么就有多少个分区。
RDD的五大特性:
(1) RDD由一系列的partiton组成;

RDD2的partition与1中partition的个数相同。
flatMap作用到RDD1的partition然后生成RDD2的partition。
(2) 算子就是函数,是作用在RDD的partition上的;

当RDD2丢了后,用相同逻辑作用在RDD1上,来进行还原。
(3) RDD之间有依赖官修;

(4) 分区器是作用在k,v格式的RDD上;
分区的作用是溢写磁盘的数据去往哪个分区上。

问题:

  1. 什么是kv格式的RDD?
    RDD中的数据是一个个的tuple2 数据,那么这个RDD就是KV格式的RDD。

(5) 每个partition可以对外提供位置;
partition可以对外提供计算数据的位置,这样有利于数据处理的本地化。(计算移动,数据不移动);

问题:
2. Spark读取HDFS中数据的方法。
读取方法textFile是底层是调用MR读取HDFS文件的方法,首先会split每个split对应一个block,每个split会对应一个block,每个split对应生成RDD的每个partition。
3. 哪里体现了RDD的弹性?
(1) RDD之间有依赖关系;
(2) RDD 的partition可多可少;什么情况下需要少,启动task的时间要大于数据量的时间。
4. 哪里体现分布式?
RDD的partition是分布在多个节点之上的。

在这里插入图片描述
Spark运行模式,依靠什么来提供资源。Local,Standalone,Yarn。

Spark任务执行原理:
在这里插入图片描述
Driver的功能是往数据所在的节点上发送task。task执行需要资源,work就是负责资源调度的重节点。相当于Yarn的workmanager。Driver和Worker都是JVM进程。
节点的意思就是一台机器。
conf 可以设置SparkApplication的名称,设置spark运行模式,及Spark运行的资源。
资源设置:conf.set
spark的核,某个时刻,核只能处理一个task。

Lineage:
RDD连成的一条线就是DAG有向无环图,RDD之间的一系列依赖关系。

算子

三种算子:transformations,action,持久化。

transformations 懒加载,延迟执行;action算法触发执行。

当action时,当前spark的application就有了一个job。
spark application是由多个job组成的,几个job看有几个action算子去触发。每有一个action算子会触发一个job。

如果给了一个算子类型,能区分出transformation或action吗。看返回的是什么,RDD类型和值的类型。
在这里插入图片描述
flatMap是一对多;
filter是一对一的关系。
groupbyKey,对key进行分组。
kv格式的rdd。

package com.bjsxt.scala.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Day01 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setMaster("local")
    conf.setAppName("test")
    val sc = new SparkContext(conf)
    sc.setLogLevel("Error")
    val lines = sc.textFile("./data/words")

//    val result :Array[String] = lines.take(5)
//    result.foreach(println)
//    val str: String = lines.first()
//    println(str)

//    val result: Array[String] = lines.collect()
//    result.foreach(println)
//
//
//    val l: Long = lines.count()
//    println(l)


//    val result: RDD[String] = lines.sample(true,0.1,100L)
//    result.foreach(println)

//    val words = lines.flatMap(one=>{one.split(" ")})
//    val pairWords = words.map(one=>{(one,1)})
//    val reduceResult : RDD[(String,Int)]= pairWords.reduceByKey((v1:Int,v2:Int)=>{v1+v2})
//    val transRDD : RDD[(Int,String)] = reduceResult.map(tp=>{tp.swap})
//    val result: RDD[(Int, String)] = transRDD.sortByKey(false)
//    result.map(_.swap).foreach(println)


//    reduceResult.sortBy(tp=>{tp._2},false).foreach(println)



    //filter
//    val rdd1 = lines.flatMap(one=>{one.split(" ")})
//    rdd1.filter(one=>{
//      "hello".equals(one)
//    }).foreach(println)



    //flatMap 一对多
//    lines.flatMap(one=>{one.split(" ")}).foreach(println)

    //map 一对一
//    lines.map(one=>{
          one+ "#"
        }).foreach(println)


  }
}

转成kv用mapToPair;

Spark SQL

处理结构化数据的spark模块。;

sparkSQL的抽象数据类型:DataFrame和DataSet。

Hive是将HiveSQL转换成MapReduce然后提交到集群执行,SparkSQL是将SparkSQL转换伟Spark的RDD,放在集群上来执行。

DataFrame

DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。是RDD的扩展,每一列都带有名称和类型,使得spark sql可以拿到结构信息,且可以针对性的做些优化。

DataFrame相当于在RDD上又做了层抽象,比RDD多了二维表格结构及属性信息。

DataFrame懒执行,但性能上比RDD要高。对当前两张表进行连接查询,然后从连接的结果中来过滤数据。查询时,先执行过滤,再去做连接,这样连接的数据量就变少了。

DataSet

是DataFrame的扩展。强类型。可以把类与DataSet对应起来,做一个映射。

复习:

  1. SparkSQL和Hive对比:
  • hive–引擎:把HQL语句翻译成mapreduce程序;
  • SparkSQL–引擎:根据SQL生成Spark来进行计算;
  1. Spark对数据集的抽象:DataFrame和DataSet;

RDD是个抽象类,每种不同的实现的分区规则是不同的。

stage数量等于宽依赖数量+1。

持久化:cache和persuit;

day08:
入口是Spark Session,包含了Spark Context。

真正执行时,是由sparkcontext来做的计算,只不过内部根据当前的结构来做的优化。

请添加图片描述

  • 作者计算机硕士,从事大数据方向,公众号致力于技术专栏,主要内容包括:算法,大数据,个人思考总结等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

精神抖擞王大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值