AmosCloud

Library

Have a Question?

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

Spark_day02

Spark

1. HA的Spark

  • 问题:
    普通的Spark Standalone集群存在单点故障问题,master只有一个,挂掉会导致集群不能使用
    所以在生产环境中我们会使用HA的架构(会启动多个Master)
    多个master之间需要进行选举,使同时时刻其中只有一个master是alive状态,其他处于standby状态,这个选举的过程spark不能自己完成
    需要使用其他的第三方组件zookeeper

1.1 搭建zk集群

1.2 修改spark的配置文件

  • spark-evn.sh

    JAVA_HOME=/opt/jdk1.8
    export SPARK_DAEMON_JAVA_OPTS="
    -Dspark.deploy.recoveryMode=ZOOKEEPER
    -Dspark.deploy.zookeeper.url=bd0201,bd0202,bd0203
    -Dspark.deploy.zookeeper.dir=/spark"
  • spark-site.conf

    # 注释掉之前配置的master,因为在HA中,具体哪个master工作是不确定的
    # spark.master                     spark://bd0201:7077
    spark.eventLog.enabled           true
    spark.eventLog.dir               hdfs://bd0201:9000/sparklogs

1.3 启动HA的spark

  • master可以在任意机器启动,数量也没有限制

  • worker在每台机器启动

2. zookeeper

2.1 是什么

zk是hadoop生态的分布式集群协调服务

  • 常见应用场景
    1. 管理配置文件
    2. 负责集群角色切换和选举
    3. 分布式锁

2.2 集群搭建

  1. 下载解压改名

  2. 修改配置文件

  • conf/zoo.cfg

    # 设置zk数据的保存目录 (先创建目录)
    dataDir=/opt/zookeeper-3.4.14/data
    # 修改zk集群信息
    # server.A=B:C:D
    # A是每个节点的id号
    # B id号对应的机器的主机名
    # C 集群数据同步的端口(默认写2888)
    # D 集群选举端口(默认写3888)
    server.1=bd0201:2888:3888
    server.2=bd0202:2888:3888
    server.3=bd0203:2888:3888
  • 创建myid文件
    在dataDir目录中创建一个名为myid,在文件中写入本机对应的id

    echo 1 > myid
  1. 添加环境变量

    echo 'export ZK_HOME=/opt/zookeeper-3.4.14' >> /etc/profile
    echo 'export PATH=.:$ZK_HOME/bin:$PATH' >> /etc/profile
    source /etc/profile
  2. 启动集群

    # 启动zk服务
    zkServer.sh start
    # 关闭zk服务
    zkServer.sh stop
  3. 测试

    # 查看状态
    zkServer.sh status

2.3 操作和核心原理

  1. zk的选举机制

老版本中:超过半数选ID最大为leader
新版本中:超过半数选启动时间最早为leader

  1. zkCli的使用

    # 连接zk服务端
    zkCli.sh -server localhost:2181
    # 查看根节点下的子节点 ls path
    ls /
    # 创建节点 create path data
    create /test1 abc
    # 读取节点的数据 get path
    get /test1
  2. znode的类型

    • 持久性: 临时节点、永久节点
      永久节点:创建之后,只要不手动删除,数据永远存在
      临时节点:创建之后,客户端断开连接,会自动删除

    • 排序性: 有序节点、无序节点
      有序节点:创建节点时,zk会自动给节点加上序号
      无序节点:创建节点时,zk不会修改节点名
      序号:单调递增(即使创建的节点不带序号,记录的序号也会增加)、由父节点管理

  3. 观察者模型

file

类:Zookeeper
类:Watcher

SparkCore

1. 数据抽象RDD

  • 特点

    • A list of partitions 包含了一堆分区的一个列表
      RDD中有多个分区

    • A function for computing each split
      将来算子会在RDD的每一个分区上单独执行

    • A list of dependencies on other RDDs 是一个与其他RDD相互依赖的列表 血统
      当计算出错时,可以根据RDD的依赖关系,读取到原始数据重新计算

    • 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)
      可选的,RDD可以为数据的运算寻找最优的位置