Spark基础知识

Spark基础知识

一、Spark概叙

  1. spark是一个基于内存计算并且快速、通用、可扩展的集群计算引擎
  2. spark目前是Apache最活跃的开源项目

二、Spark特点

  1. 快速性:基于内存计算,比MapReduce快一百倍
  2. 通用性:提供了大量的类库, 包括 SQL 和 DataFrames, 机器学习(MLlib), 图计算(GraphicX), 实时流处理(Spark Streaming),可以把这些类库无缝的柔和在一个 App 中;它还结合了SQL, Streaming和复杂分析
  3. 易用性:支持 Scala, Java, Python, R 和 SQL 脚本, 并提供了超过 80 种高性能的算法, 非常容易创建并行 App
  4. 可融合:可以非常方便的与其他开源产品进行融合,比如yarn,还有Hbase和HDFS

三、Spark内置模块介绍(组件)

  1. 集群管理器(Cluster Manager):主要有三种,standalone(spark自带)、yarn(国内开发中使用)、mesos(国外使用较多)
  2. Spark Core:用于离线计算,最基本的模块
  3. Spark Sql:用于离线计算,和Sql结合使用
  4. Spark Streaming:用于实时计算
  5. Spark MLlib:用于机器学习
  6. Spark GraghX:用于图计算

四、Spark的核心概念

  1. Master(针对于standalone模式):管理worker,管理application。在yarn模式里面是RescourceManager

  2. Worker(针对于standalone模式):发送心跳给master,管理自身节点的资源,真正执行程序的节点。在yarn模式里面是NodeManager

  3. Executor(针对于standalone模式):worker节点上真正执行程序的进程。在yarn模式里面是ApplicationMaster启动executor

  4. Driver program:驱动程序,负责程序的分发,资源管理器的注册。spark-shell就是一个典型的driver program

  5. Job(一个作业或者说一个程序):划分为多个stage

  6. Stage(阶段):小的task的集合

  7. task(任务):计算单元

  8. clientcluster 两种模式,主要区别在于:Driver 程序的运行节点不同

    1. client:Driver程序运行在客户端,驱动不在集群内,适用于交互、调试,希望立即看到app的输出
    2. cluster:Driver程序运行在由 RM(ResourceManager)启动的 AM(ApplicationMaster)上,驱动在集群内, 适用于生产环境

五、Spark运行模式

  1. local(本地模式)

    1. 安装解压安装包后就可使用

    2. 运行官方求PI的案例

      bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master local[2] \
      ./examples/jars/spark-examples_2.11-2.1.1.jar 100
      //注意:如果你的shell是使用的zsh, 则需要把local[2]加上引号:'local[2]'
      
    3. local[*]:这个里面的星符号表示该程序设置几个cpu来执行,或者说几个线程

  2. standalone(spark自带的集群模式)

    1. 构建一个由 Master + Slave 构成的 Spark 集群,Spark 运行在集群中

    2. standalone运行模式介绍

      1. 客户端注册给master
      2. master申请资源,然后告诉worker启动ExecutorBackend
      3. worker会随时报告Executor的状态
      4. worker会向客户端反向注册
      5. 客户端会给worker分配task
      6. worker会报告给task的状态给客户端,直到结束
    3. 进入配置文件目录conf, 配置spark-evn.sh

      SPARK_MASTER_HOST=hadoop101
      SPARK_MASTER_PORT=7077 # 默认端口就是7077, 可以省略不配
      
    4. 修改 slaves 文件, 添加 worker 节点

      hadoop101
      hadoop102
      hadoop103
      
    5. 分发spark-standalone

    6. 启动 Spark 集群

      sbin/start-all.sh
      
    7. 如果启动的时候报JAVA_HOME is not set, 则在sbin/spark-config.sh中添加入JAVA_HOME变量即可,不要忘记分发修改的文件

    8. 在网页中查看 Spark 集群情况(http://hadoop101:8080)

    9. 使用 Standalone 模式运行计算 PI 的程序

      bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master spark://hadoop101:7077 \
      --executor-memory 1G \
      --total-executor-cores 6 \
      --executor-cores 2 \
      ./examples/jars/spark-examples_2.11-2.1.1.jar 100
      
    10. 在 Standalone 模式下启动 Spark-shell

      bin/spark-shell --master spark://hadoop101:7077
      
    11. 配置 Spark 任务历史服务器(为 Standalone 模式配置

      1. 配置spark-default.conf文件, 开启 Log

        spark.eventLog.enabled           true
        spark.eventLog.dir               hdfs://hadoop101:9000/spark-job-log
        
      2. 修改spark-env.sh文件,添加如下配置

        export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://hadoop101:9000/spark-job-log"
        
      3. 分发配置文件

      4. 启动历史服务(先启动 HDFS,然后再启动spark的历史服务器)

        sbin/start-history-server.sh
        
      5. 启动任务, 查看历史服务器(http://hadoop101:18080)

    12. HA 配置(仅为standalone模式下为 Master 配置)

      1. spark-env.sh 添加如下配置

        # 注释掉如下内容:
        #SPARK_MASTER_HOST=hadoop101
        #SPARK_MASTER_PORT=7077
        # 添加上如下内容:
        export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop101:2181,hadoop102:2181,hadoop103:2181 -Dspark.deploy.zookeeper.dir=/spark"
        
      2. 分发配置文件

      3. 启动 Zookeeper

      4. 在 hadoop101 启动全部节点

        sbin/start-all.sh
        
      5. 在 hadoop102 启动一个 master

        sbin/start-master.sh
        
      6. 杀死 hadoop101 的 master 进程,hadoop102 的 master 会自动切换成 Active

      7. 可在网页上查看(8080端口)

  3. yarn(借助hadoop的yarn做集群资源管理器,国内使用)(重点)

    1. Spark 客户端可以直接连接 Yarn,不需要额外构建Spark集群

    2. yarn的运行模式介绍

      1. 客户端会向ResourceManager(RM)提交App程序任务
      2. RM会选择一个NM启动AM,AM会初始化Driver(即初始化sc)
      3. AM启动Executor,并分配Task
      4. AM会随时报告App运行的状态,直到运行结束
      5. AM最后会向RM注销自己
    3. 修改 hadoop 配置文件 yarn-site.xml, 添加如下内容

      <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
      <property>
          <name>yarn.nodemanager.pmem-check-enabled</name>
          <value>false</value>
      </property>
      <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
      <property>
          <name>yarn.nodemanager.vmem-check-enabled</name>
          <value>false</value>
      </property>
      
    4. 分发配置文件

    5. 解压安装包, 并命名为spark-yarn

    6. 修改spark-env.sh文件

      #yarn的配置文件位置
      YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop
      #配置历史服务器
      export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://hadoop101:9000/spark-job-log"
      
    7. 配置spark-default.conf文件

      #开启Log
      spark.eventLog.enabled           true
      #配置log存储位置
      spark.eventLog.dir               hdfs://hadoop101:9000/spark-job-log
      #配置历史日志服务器
      spark.yarn.historyServer.address=hadoop101:18080
      spark.history.ui.port=18080
      
    8. 执行样例

      bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master yarn \
      --deploy-mode client \
      ./examples/jars/spark-examples_2.11-2.1.1.jar 100
      
    9. 如果在 yarn 日志端无法查看到具体的日志, 则在yarn-site.xml中添加如下配置

      <property>
          <name>yarn.log.server.url</name>
          <value>http://hadoop101:19888/jobhistory/logs</value>
      </property>
      
  4. 几种运行模式的对比

    模式Spark安装机器数需启动的进程所属者
    Local1Spark
    Standalone多台Master及WorkerSpark
    Yarn(实际开发中使用)1Yarn及HDFSHadoop

六、Spark中的常见端口

  1. spark协议端口:7077
  2. spark程序运行过程信息的端口:4040
  3. spark启动后观察集群情况的端口(standalone模式):8080
  4. spark历史服务器端口:18080
  5. spark的yarn模式的可视化端口(yarn模式):8088

七、Spark-submit发布应用程序的语法

  1. 样例:

    ./bin/spark-submit \
    --class <main-class> \
    --master <master-url> \
    --deploy-mode <deploy-mode> \
    --conf <key>=<value> \
    ... # other options
    <application-jar> \
    [application-arguments]
    
  2. –class 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)

  3. –master 指定 master 的地址,默认为local. 表示在本机运行

  4. –deploy-mode是否发布你的驱动到 worker节点(cluster 模式) 或者作为一个本地客户端 (client 模式) (default: client)

  5. –conf是任意的 Spark 配置属性, 格式key=value. 如果值包含空格,可以加引号**“key=value”**

  6. application-jar 是打包好的应用 jar,包含依赖. 这个 URL 在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的path都包含同样的jar

  7. application-arguments 是指传给**main()**方法的参数

  8. –executor-memory 1G 指定每个executor可用内存为1G

  9. –total-executor-cores 6 指定所有executor使用的cpu核数为6个

  10. –executor-cores 表示每个executor使用的 cpu 的核数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值