Spark 环境搭建 RDD 算子 持久化 并行度 宽窄依赖 DAG的任务切割 运行及执行原理 共享变量 sparkSQL

  • 离线分析

    对于一段时间的数据,进行收集,整理,分析,得出一定的结论
    这个结论会帮助人们做出一定的决策。不要求时限性。
    批处理方式

  • 在线(实时)分析

    必须要求时限性,在最短时间之内对输入的数据进行响应
    流处理方式

spark

对于大规模数据处理的快如闪电的统一的分析引擎
作者:
美国加州大学伯克利分校AMP(算法,机器,人)实验室

目的:
通过对算法,机器和人的大规模整合,展现大数据的应用

特点:

  • 速度
    比MR快100X,即使使用磁盘快10X以上(理论值)
    快的原因:
    a.基于内存
    b.DAG有向无环图
    c.查询上的优化
    d.物理的执行引擎

  • 易用性
    a.支持scala,java,python,R,SQL
    b.可以使用scala,python,R,SQL的shell交互式使用
    c.提供了超过80种的高级操作(算子)

  • 通用性
    在一个应用程序中可以无缝整合所有的组件
    在一个技术栈统治所有
    sparkCore:不做特殊指定,就是spark的核心引擎
    sparkSQL:处理结构化数据的组件
    sparkStreaming:处理实时数据的组件
    通过批处理模拟实时处理
    是伪实时计算框架,使用微批处理方式
    MLlib:机器学习算法库
    GraphX:图计算

  • 运行在任何地点
    a.可以在很多环境上运行
    local standalone onYarn …
    b.可以读取各种数据源
    HDFS,Hive,Hbase,file,jdbc,…

为什么MR计算的慢?spark为什么快?
MR在shuffle阶段要进行很多次的磁盘IO操作,大大降低了运行的效率
每做一次HDFS的写操作都需要默认存储3个副本,也消耗了大量的资源
spark在必要的时候也需要做shuffle,避免不了磁盘IO的操作
但是在不必要使用shuffle的时候,可以使用内存替代磁盘,提高效率

环境搭建:

  • 本地环境(local)
    a.解压缩
    b.配置环境变量
    c.执行
    spark-submit --master local[*] --class xxx xx.jar

  • 独立模式(standalone)
    服务,调度器等一切都有spark自己提供自己使用
    在本地模式的基础上
    a.修改配置文件
    spark-env.sh SPARK_MASTER_HOST=node200
    slaves node200
    b.启动服务
    ${SPARK_HOME}/sbin/start-all.sh
    或者 start-master.sh;start-slaves.sh
    c.正确执行
    spark-submit --master spark://node200:7077 --class xxx xx.jar

  • 集群模式(on Yarn)
    在独立的模式的基础上,修改配置文件
    spark-env.sh
    HADOOP_CONF_DIR=xxx
    两种部署方式
    1)client
    在哪个节点提交任务,就直接在那个节点启动Driver
    直接把结果输出到控制台
    2)cluster
    不管在哪个节点提交任务,都向master汇报,
    由master分配节点启动Driver
    把结果输出到hadoop的日志文件中

RDD(弹性的分布式的数据集)
是sparkCore的计算核心,是计算的瞬时结果.
弹性的:对于一些小的变化,不影响整体变化
分布式的:rdd本身不是分布式,里面的数据是分布式存储的
数据集:数据的集合,就是从各种数据源读来的数据。

  • 特点:
    1.rdd内的partition是并行计算,有统一的计算规则,过程互不干扰
    2.RDD是依赖于上一个RDD
    3.每个RDD的输入数据来源于上一个RDD的数据输出
    4.每个RDD的数据是不可变的
    5.每个application都可以通过源码绘制一张有向无环图
    6.RDD是抽象的概念,partition是具体的概念
  • 五大特性
    1.分区的集合
    2.一个函数作用于所有的切片
    3.rdd依赖于其他rdds
    4.rdd可以重新分区
    5.hdfs上的block块数据,直接读取到当前节点内存中计算,遵循数据本地性

容错:
整体来说是根据依赖关系进行的,依赖关系我们叫血统。
如果某个partition出现错误,会根据运算运行图向它的父级依赖查找数据
如果能找到数据,直接取数据进行下面的运算,无需考虑上面的内容
如果找不到数据,一直向上级查找直到找到数据(最坏的情况是找到HDFS)
如果某个节点计算时间长,可以重新找个位置,从HDFS上读取数据重新计算
哪个快就取哪个的数据,另一个被舍弃掉。

算子:
官网中 hige-level operation
本质:函数
区分算子和函数:
使用rdd调用的就是算子
使用的是普通的集合调用就是函数
分类:

  • 转换算子(transformation算子)
    可以对数据做各种各样的处理,但是不提交任务。
    相当于是规划整体的执行过程。
    创建算子:
    从无到有的过程,把数据转换成rdd类型
    a.textFile(读文本)
    b.wholeTextFiles(读文本)
    c.makeRdd(已知集合)
    d.parallelize(已知集合)
    缓存算子:
    可以对需要保存的rdd做持久化
    a.cache
    b.persist
    c.checkPoint

  • 行动算子(action算子)
    在由转换算子规划好任务之后,由行动算子提交任务,开始执行
    把rdd转成具体的数据

持久化:
a.就是把rdd临时永久保存到计算机的某个地方。
b.持久化是自动容错的,如果某个位置的数据丢失,会自动获取数据重新计算,把计算到当前rdd的结果自动补充到丢失的位置。

使用方式:

  • 创建持久化:
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值