Spark 基础知识点、三种模式安装

环境说明

centos 7.5

spark-2.1.1

Spark 内置模块

在这里插入图片描述

Spark local 模式

安装

直接解压即可,无需配置(spark-2.1.1-bin-hadoop2.7.tgz 集成hadoop环境包 )

local 模式下测试

# 提交任务 使用spark案例 计算pi
bin/spark-submit --master local[20] \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.1.1.jar 100

# 也可以使用提供的脚本
bin/run-example SparkPi 100

启动 SparkShell

bin/spark-shell --master 'local[2]'

参数说明:--master 'local[2]' 可以不指定 默认local[*] , [] 中表示并行度

Spark context Web UI available at http://192.168.9.21:4040
Spark context available as 'sc' (master = local[*], app id = local-1596820563191).
Spark session available as 'spark'.
  • 启动SparkShell 可以使用浏览器访问 ip:4040 登陆Spark DriverUI监控页面查看信息
  • 在sparkshell 中自动创建 Spark Context 对象 sc

SparkShell执行WorkCount

bin/spark-shell
scala> sc.textFile("/root/input").flatMap(_.split("\\W+")).map((_,1)).reduceByKey(_ + _).collect

res7: Array[(String, Int)] = Array((min,1), (sum_low_carbon,3), (u_002,1), (user_low_carbon,7), (pre2diff,2), (100g,2), (partition,7), (19,2), (2017,5), (order,8), (between,2), (0,3), (with,1), (t2,2), (2,6), (cousd,5), (as,3), ("",62), (lag,2), (floor,2), (after1diff,3), ...
scala> 

Spark角色

Master 角色

Spark standalone 资源调度系统的Leader。掌管整个集群的资源信息,类似与Yarn中的ResourceManager

  1. 负责监听Worker工作是否正常
  2. Master对Worker、Application等管理(接收Worker的注册,Client 的Application提交,调度等待中的Application向Worker提交)

Worker 角色

Spark 特有资源调度系统的 Slave ,类似Yarn框架中的NodeManager,类似Yarn的NodeManager

  1. 通过RegisterWorker 注册到Master
  2. 定时发送心跳给Master
  3. 根据Master发送的Application配置进程环境,并启动ExecutorBackend(执行Task所需的临时进程)

Driver Program 线程

每个Spark应用都包含一个driver program 即驱动程序,负责将并行任务发布到集群中,驱动程序包含Spark应用程序中的主函数,定义了分布式数据集并应用在集群中

在之前使用的SparkShell 就是一类驱动程序,我们可以在SparkShell应用程序中键入任何Spark操作,然后由它负责发布

驱动程序通过SparkContext对象来访问Spark,SparkContext对象相当于一个到Spark集群的接连.

在sparkshell中会自动创建 Spark Context 对象 sc

创建 RDD 弹性分布式数据集 (Resilient Distributed Dataset)

Executor 进程

Worker中的一个进程(ExecutorBackend),负责具体执行计算和为应用存储数据

Spark会发送应用程序代码(jar包)到每隔执行器,最后SparkContext对象发送任务到执行器开始执行程序

Cluster Manager 集群管理器

  • Spark own standalone Cluster Manager
  • Mesos
  • YARN

SparkContext对象连接到上述Cluster Manager 获取分配资源, 也可以连接多种Cluster Manager跨应用分配资源

Standalone 模式

独立模式(寂寞模式).该模式下调度器使用 独立调度器(Spark own standalone Cluster Manager)

安装

  1. 解压

  2. 重命名并编辑conf/spark-env.sh master地址以及通讯端口(默认7077 可以不配置)

     SPARK_MASTER_HOST=spark-node01
     SPARK_MASTER_PORT=7077  
    
  3. 重命名并编辑conf/slaves 写入worker地址

    spark-node01
    spark-node02
    spakr-node03
    
  4. 分发conf文件夹到所有spark节点

启动

在配置master的节点上sbin/start-all.sh

[root@spark-node01 sbin]# jps
2503 Master
2599 Worker
2699 Jps

启动后可 使用 master hostname:8080 查看Spark WebUI

测试程序

bin/spark-submit --master spark://spark-node01:7077 \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.1.1.jar 1000

启动SparkShell

bin/spark-shell --master spark://spark-node01:7077

参数说明:Standalone模式需要指定 --master

Deploy Mode

  • Cluster Mode : 该模式会在集群中随机一节点开启Driver,该模式日志会存储在集群中
  • 默认 Client : 该模式会在Clinet 客户端启动Driver ,该模式日志会打印在Client控制台,不会保存

通过 --deploy-mode cluster 修改为 Cluster Mode.

bin/spark-submit --master local[20] \
--class org.apache.spark.examples.SparkPi \
--deploy-mode cluster \
./examples/jars/spark-examples_2.11-2.1.1.jar 1000

执行上述代码后 不会输出结果,因为Driver 在集群中某一节点,此时需要通过WebUI查看

WEB UI 端口

Driver : 4040 (只能在运行时查看,或配置历史服务器)

Master : 8080

Worker :8081 (若同一节点开启多个Worker 8082,8083…)

Hsitory UI :18080

配置历史服务器

  1. 重命名并编辑 conf/spark-defaults.conf

    # spark.master					 spark://spark-ndoe01:7077
    spark.eventLog.enabled           true
    spark.eventLog.dir              	 hdfs://hadoop-node01:8021/spark-log
    
  2. 在hadoop创建对应目录 /spark-log

  3. 在 conf/spark-env.sh 文件,添加如下配置

    export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://hadoop-node01/spark-log"
    
  4. 分发配置

  5. 启动 sbin/start-history-server.sh 进程名称 HistoryServer

  6. WebUI地址 : 启动的节点host名称:18080

Master HA

通过配置多个Master,实现高可用,先启动节点处于Active状态,其他都处于Standby状态

  1. 编辑 conf/spark-env.sh 添加如下配置

    # 注释以下内容:
    #SPARK_MASTER_HOST=hadoop201
    #SPARK_MASTER_PORT=7077
    # 添加以下内容:
    export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk-node01:2181,zk-node02:2181,zk-node03:2181 -Dspark.deploy.zookeeper.dir=/spark"
    
    
  2. 分发配置文件

  3. 启动zookeeper

  4. 启动/重启全部spark节点

  5. 启动从master sbin/start-master.sh

  6. 通过从master节点WebUI 可以看到状态为standby,当处于alive状态的master节点宕机,处于standby会自动切换到alive状态

YARN 模式

Spark Clinet 直接连接到Yarn,不需要构建Spark集群。Yarn集群中的节点不需要安装Spark环境,Spark Clinet会将Spark任务所需要的jar包打包提交到RM(hdfs中) 可以理解为该模式下 Spark仅为客户端

Deploy Mode

同Standalone 一样 Yarn 也有两种模式

  • client :Driver 程序运行在客户端,用于交互、调试,可立即看到app输出

  • cluster :Driver 程序运行在ResourceManager 启动的ApplicationMaster上,适用于生产环境

安装

  1. 测试环境配置 : 防止内存不足导致任务被意外杀死, 编辑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>
    
  2. 解压Spark安装包(spark-2.1.1-bin-hadoop2.7.tgz)

  3. 重命名并编辑 spark-env.sh 配置yarn地址,添加以下配置

    YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
    
  4. 配置历史服务器 (参考上述) 并启动

  5. Yarn Web UI (8088) 与 Spark历史服务器连接配置,编辑 conf/spark-default.conf 加入如下配置

    spark.yarn.historyServer.address=spark-node01:18080
    spark.history.ui.port=18080
    
  6. 如运行是报lzo压缩无法找到错误,可在 conf/spark-default.conf 加入以下配置指定lzo jar包位置

    spark.jars=/opt/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar
    

测试程序

bin/spark-submit \
--master yarn --deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.1.1.jar 1000

启动SparkShell

在yarn 模式只能读取hdfs中的文件

bin/spark-shell --master yarn
scala> sc.textFile("/opt/input").flatMap(_.split("\\W+")).map((_,1)).reduceByKey(_ + _).collect

三种模式对比

模式Spark安装节点数启动进程所属者
local1spark
Standalone多台Master Workerspark
Yarn1Yarn HDFSHadoop
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值