美文网首页js css html
Spark入门及环境搭建

Spark入门及环境搭建

作者: 文景大大 | 来源:发表于2023-03-09 20:03 被阅读0次

    一、Spark是什么

    Spark是Apache下的一个用于大规模数据处理的统一分析引擎,Unified engine for large-scale data analytics.

    Spark还是一个支持多语言的(Python、SQL、Scala、Java、R),可以在单节点或者集群上用作数据工程、数据科学和机器学习的内存计算引擎。

    Spark借鉴了MapReduce的思想发展而来,保留了其分布式并行计算的优点,并改进了其缺陷,让中间数据存储在内存中从而提高了运行速度,并提供了丰富的操作数据的API,提升了开发的效率。

    Spark工作示意图

    二、为什么要使用Spark

    谈起Spark,就不得不对比Hadoop,相比Hadoop而言,Spark具有更大的优势,但是它并不能完全替代Hadoop,如下是它们之间的一个简单对比:

    Hadoop Spark
    类型 是大数据基础平台,包括HDFS存储、MapReduce计算、Yarn资源调度 仅是一个计算框架
    场景 基于磁盘的海量数据批处理场景 基于内存的海量数据批处理流计算
    价格 对机器要求低,价格低 对机器内存要求高,价格贵
    编程 MR框架,API较为底层,算法适应性低,编程较为复杂 RDD组成DAG的模式,API较为高层,方便编程
    存储 中间计算结果存在HDFS的磁盘上,延迟高 中间计算结果存在内存中,延迟低
    运行 Task以进程方式维护,任务启动慢 Task以线程方式维护,任务启动快,可批量创建提高并行能力

    总结下来,Spark只是一个计算框架,顶多用来替换Hadoop中的MapReduce计算框架,而HDFS和Yarn仍然是大数据技术栈的主流。

    Spark的四大特点是:

    • 速度快,由于是基于DAG的内存计算框架,速度比Hadoop要快100倍;

    • 易于使用,支持Python、SQL、Scala、Java、R在内的主流数据分析语言,用户涵盖面大,API使用简洁高效;

    • 通用性强,支持对接多种数据源,比如LocalFS、HDFS、Hive、Text、CSV、Json等等;

      Spark支持多种数据源

    而且在Spark核心的基础上,还提供了SparkSQL、StructedStreaming、SparkStreaming、MLlib、GraphX等工具库,可以在一个应用里面无缝切换使用;

    Spark平台工具一览
    • 运行方式灵活,支持多种运行方式,包括local、standalone、Spark on Yarn、Mesos、Kubernetes、云平台等等;

    三、Spark是如何工作的

    我们在原先学习Yarn的时候,有提到过Yarn里面的角色:

    • ResourceManager,负责整个集群的资源管理和调度;
    • NodeManager,负责当前节点的资源管理并监控资源汇报给ResourceManager;
    • ApplicationMaster,负责应用任务的执行和管理,一个应用任务仅有一个AM,且运行在节点的容器中;
    • TaskContainer,负责具体任务的执行,并汇报给AM,一个应用任务会被拆分为多个Task,运行在任意节点的容器中;
    Yarn集群角色示意图

    那么Spark想要实现计算任务和资源调度,那么也会拥有类似Yarn的角色和职能:

    • Master,类似Yarn中的ResourceManager,管理整个集群中的资源和调度;在Spark on Yarn的模式下没有Master,由Yarn的ResourceManager替代;
    • Worker,类似Yarn中的NodeManager,管理当前节点的资源并向Master汇报;在Spark on Yarn的模式下没有Worker,由Yarn的NodeManager替代;
    • Driver,类似Yarn中的AM,一个应用任务对应一个Driver,负责管理任务的执行;在Spark on Yarn的模式下,AM和Driver将会并存在节点的容器中;
    • Executor,类似Yarn中的TaskContainer,也是以容器的形式负责具体任务的执行;
    Spark集群角色示意图

    四、Spark环境搭建

    在搭建Spark不同的部署模式之前,我们都需要做一些准备工作,在上面运行方式的内容中,我们介绍了6种,但是本文只介绍如下的2种最常见的,其它的比如Standalone模式需要借助虚拟机实现集群,在企业中很少用到,而Mesos、K8s、和云平台的方式和Spark本身并无关系,就待以后再介绍。

    Spark的运行依赖于Hadoop,因此我们需要准备好:

    • 服务器,从阿里云购买ECS服务器,Local模式就买一台,Spark on Yarn集群模式就购买三台;
    • 操作系统,Linux CentOS7.5 X64;
    • JDK,配置好JDK环境,确保java -version能执行;
    • Hadoop,按照往期教程搭建单机或者集群模式的Hadoop环境;

    4.1 Local模式

    Local模式即本地模式,是一种只能在开发和测试中使用的模式,因为其本质就是启动一个JVM进程,通过启动多个线程来提供并行计算能力执行多个Task任务,其不能算是分布式的集群,不能用在生产环境。Local模式分为:

    • Local[n],n表示线程数,通常n小于等于CPU核心数,可以充分利用CPU的计算能力,n不指定则默认为1;
    • Local[*],表示按照CPU最多的核心数设置线程数;

    在Local模式下,因为只有一个进程,所以Master、Worker和Driver角色就是其进程本身,而且不会有Executor角色,任务Task的执行会由Driver启动的多线程来完成并行计算;而且在同一时间,只能执行一个Spark应用程序。

    我们能将下载好的Spark压缩包放到/soft目录下并解压缩,下载可以从国内镜像源下载,会快很多。

    cd /soft
    tar -zxvf spark-3.3.2-bin-hadoop3.tgz
    

    然后我们设置Spark的环境变量:

    vim /etc/profile
    export SPARK_HOME=/root/soft/spark-3.3.2-bin-hadoop3
    export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
    source /etc/profile
    

    此时,我们就可以运行和使用Spark应用程序了:

    # 运行Spark自带的示例程序——计算圆周率
    spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master local[2] \
    /root/soft/spark-3.3.2-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.2.jar \
    20
    
    INFO SparkContext: Running Spark version 3.3.2
    ......
    INFO Utils: Successfully started service 'sparkDriver' on port 34697.
    ......
    INFO Utils: Successfully started service 'SparkUI' on port 4040.
    ......
    INFO Executor: Starting executor ID driver on host node1
    ......
    INFO TaskSetManager: Starting task 0.0 in stage 0.0 (TID 0) (node1, executor driver, partition 0, PROCESS_LOCAL, 4                       578 bytes) taskResourceAssignments Map()
    INFO TaskSetManager: Starting task 1.0 in stage 0.0 (TID 1) (node1, executor driver, partition 1, PROCESS_LOCAL, 4                       578 bytes) taskResourceAssignments Map()
    ......
    # 打印出计算结果
    Pi is roughly 3.1421555710777858
    ......
    INFO SparkUI: Stopped Spark web UI at http://node1:4040
    ......
    INFO SparkContext: Successfully stopped SparkContext
    ......
    

    如上是执行提交到Spark的应用程序的模式,执行完成Spark就退出了,其实Spark还是支持命令行模式,命令行模式有很多种,比如:

    • pyspark,python语言的命令行交互窗口;
    • spark-shell,scala语言的命令行交互窗口;
    • sparkR,R语言的命令行交互窗口;
    • spark-sql,SQL语言的命令行交互窗口;

    由于Spark本身就是使用scala实现的,我们就使用spark-shell来体验一下命令行交互窗口的使用:

    [root@node1 bin]# spark-shell
    Setting default log level to "WARN".
    To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
    23/03/10 15:10:52 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Spark context Web UI available at http://node1:4040
    Spark context available as 'sc' (master = local[*], app id = local-1678432255647).
    Spark session available as 'spark'.
    Welcome to
          ____              __
         / __/__  ___ _____/ /__
        _\ \/ _ \/ _ `/ __/  '_/
       /___/ .__/\_,_/_/ /_/\_\   version 3.3.2
          /_/
    
    Using Scala version 2.12.15 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_351)
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    # 等待输入scala命令
    scala> sc.parallelize(Array(1,2,3,4,5)).map(x => x * 10).collect()
    res0: Array[Int] = Array(10, 20, 30, 40, 50)
    

    在使用命令行模式的时候,Spark守护进程会一直存在,此时访问4040端口就能看到Spark的一些信息,比如执行器Executor、集群环境信息、任务Job情况、Job执行的Stage情况等;

    4.2 Spark onYarn模式

    Spark on Yarn集群模式才是企业生产环境中最常使用的模式,由于至少要准备三台服务器,本教程暂时搁置该搭建过程,网上也有很多类似的教程,此处就先省略了。Spark的验证可通过如下命令验证:

    jps
    844046 ResourceManager
    3863790 RunJar
    # Spark的Master角色
    859128 Master
    641310 Jps
    # Spark的Worker角色
    859973 Worker
    504718 JobHistoryServer
    3863616 RunJar
    843665 SecondaryNameNode
    846707 NameNode
    894978 QuorumPeerMain
    
    
    # 进入scala命令交互模式
    spark-shell --master yarn
    ......
    scala> sc.parallelize(Array(1,2,3,4,5)).map(x => x * 10).collect()
    res0: Array[Int] = Array(10, 20, 30, 40, 50)
    
    # 提交代码运行
    spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode client \
    /root/soft/spark-3.3.2-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.2.jar \
    20
    
    ......
    Pi is roughly 3.1421555710777858
    
    

    集群Cluster模式:Driver在Yarn的容器中运行,提交任务的客户端可能看不到太多日志信息,性能和网络情况较好,适合生产环境;

    客户端Client模式:Driver在提交任务的客户端上运行,方便打印日志,但是网络流量大,延迟会高,适合开发和测试环境;

    Spark on yarn的client、cluster模式提交job流程及区别_spark on yarn client_java编程艺术的博客-CSDN博客

    相关文章

      网友评论

        本文标题:Spark入门及环境搭建

        本文链接:https://www.haomeiwen.com/subject/cjczldtx.html