AmosCloud

Library

Have a Question?

If you have any question you can ask below or enter what you are looking for!

SparkCore

Spark

  • spark是大数据生态中一个性能极好的分布式计算框架

一、特点:

  1. 速度快:通过测试,相同机器相同数据集,运算速度比Hadoop2.x 中MapReducer快超过100倍

  2. 简单易用:可以支持开发者使用Java, Scala, Python, R, and SQL多种方式进行编程
    运行效率:Java > Scala > Python > R
    开发效率:HiveSQL > Scala > Python > Java

  3. 通用性
    Spark提供了分布式计算的一揽子解决方法
    SparkCore:高性能的批处理运算(完全替代MR)
    SparkSQL:结构化数据分析(完全替代Hive)
    SparkStreaming: 流式计算(完全替代Storm)

file

  1. 兼容性
    • 任务调度方式和集群模式:Spark可以直接将任务管理在已有的Hadoop(YARN),Apache Mesos, Kubernetes等专门进行计算资源管理和调度的组件,也可以使用standalone模式,搭建完全独立的Spark集群。
    • 数据读取:兼容所有已知的数据源

二、Standalone

  • 是Spark提供的最经典的分布式集群运行方案

  • 集群角色

    1. Master 主节点
      管理集群状态
      与客户端进行交互,接收客户端提交的任务,并将任务分配给worker节点执行

    2. Worker
      处理master分配的任务,并将执行完的结果返回driver程序或者输出到各种存储组件中

  • 核心概念

    1. spark job
      通过scala、java、python编写的含有main方法的可执行程序,
      main中需要创建一个SparkContext,这个程序称之为一个job的driver程序,将程序打包成可执行的jar

    2. executor 执行器 (进程)
      一个executor只能属于一个job
      一个job会创建多个executor
      每个worker节点上,只会为一个job创建一个executor

    3. task 任务 (线程)
      task属于executor,每个executor中根据程序的并发度启动不同数量task并行执行

三、Spark的standalone模式集群搭建

  1. 下解压改名字

    • 版本:
      经典版本:1.6.3 市场占有率 20%
      较新版本:2.x 2.4.0 2.4.7 70%↑
      最新版本:3.0.1 5%↓
  2. 修改配置文件分发安装包

    • spark-env.sh
      spark环境相关配置

      # standalone模式的master
      SPARK_MASTER_HOST=master节点的主机名
      # 默认使用7077
      SPARK_MASTER_PORT=master节点的端口
      # 配置java_home
      export JAVA_HOME=/opt/jdk1.8
    • spark-site.conf
      spark集群设置相关配置

      spark.master   spark://bd0401:7077
    • slaves
      spark的standalone的worker所在的节点

      # 集群所有机器的主机名 一行一个
  3. 添加环境变量

    echo 'export SPARK_HOME=/opt/spark-2.2.1' >> /etc/profile
    echo 'export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH' >> /etc/profile
    source /etc/profile
  4. 启动并测试

start-spark-all.sh

四、Spark的任务编写方式

  1. spark-shell

    • 优点:
      方便,不需要编译器,直接在命令行中使用类似scala解释器的环境,编写spark程序,并且实时提交到集群运行

    • 缺点:
      不方便导入第三方依赖
      不便于调试
      不便于代码的保存

  2. 通过IDEA等继承开发环境编写spark job

    • 优点
      方便项目开发
      弥补了所有的shell的缺陷

    • 缺点
      编写好的job需要打成jar包提交到集群运行

五、RDD

  • RDD的概述
    RDD是一个弹性分布式数据集

  • 5个主要特点

    • A list of partitions
      一个分区的列表

    • A function for computing each split
      函数并行应用在每个分片(分区)上

    • A list of dependencies on other RDDs
      维护一个与其他的RDD的依赖链条 lineage

    • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
      可选的,可以自定义一个分区器对KV数据的RDD进行自定义分区

    • Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
      可选的,Spark会使用更优化的位置策略减少网络IO

  • 不可变性
    RDD是一个不可变集合,对RDD的操作只能产生新的集合

  • RDD懒加载的特点
    RDD的血统中,只有最终调用了action算子才从头开始进行运算
    如果全是transformation算子,RDD只编译不执行

    • RDD算子的分类
      1. transformation算子
        转换算子返回值是RDD
    1. action算子
      行动返回值不是RDD