• Spark学习记录1--简介与部署


    1、Spark概述

    1.1 Spark简介

    •  Spark是一种快速、通用、可扩展的大数据分析引擎(不进行数据存储,兼容很多数据源)
    • Spark 采用了先进的DAG执行引擎,支持循环数据流和内存计算,使得 Spark 速度更快,在内存中的速度是Hadoop MR的百倍,在磁盘上的速度是Hadoop MR的十倍(官网数据) 。
    • Spark 易用,可以用Scala、Java、Python、R等开发分布式应用,Spark 提供了大量高级API,方便开发。
    • Spark 集成了多种数据源,并且可以通过local、Yarn、Mesos、Standalone(Spark 提供的部署方式)等各种模式运行。

    1.2 Spark 组件

    Spark Core

    实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统 交互等模块。Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的 API 定义。

    Spark SQL

    是 Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。Spark SQL 支持多种数据源,比 如 Hive 表、Parquet 以及 JSON 等。

    Spark Streaming

    是 Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应。

    Spark MLlib

    提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。

    Spark GraphX

    GraphX在Spark基础上提供了一站式的数据解决方案,可以高效地完成图计算的完整流水作业。GraphX是用于图计算和并行图计算的新的(alpha)Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。

    Structured Streaming(2.X版本)

    结构化流是构建在sparksql引擎上的可伸缩且容错的流处理引擎。在内部,默认情况下,结构化流式处理查询使用微批处理引擎进行处理,该引擎将数据流作为一系列小批处理作业进行处理,从而实现低至100毫秒的端到端延迟,并且只保证一次容错。

    2.Spark集群部署

    2.1 环境准备

    环境预准备,至少三台机器互通互联,免密登录,时间同步,安装好JDK1.8。

    这里我们的三台服务器名为user1、user2、user3。

    2.2 Standalone模式

    Spark自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式。Spark的Standalone模式体现了经典的master-slave模式。

    集群规划:

    基本条件:同步时间、免密登录、关闭防火墙、安装JDK1.8

    user1

    user2

    user3

    spark

    Master  Worker

    Worker

    Worker

    2.2.1 配置

    1)解压缩文件

    通过MobaXterm_CHS将spark压缩安装文件上传至之前建立的/root/softwares 下,通过命令

    tar -zxvf /root/softwares/spark-3.1.2-bin-hadoop3.2.tgz -C /usr/local

    解压缩在指定位置并进行文件名修改

    mv /usr/local/spark-3.1.2-bin-hadoop3.2/ /usr/local/spark-3.1.2

    2)修改配置文件

    ①进入解压缩后路径的conf目录,修改workers.template文件名为workers

    mv /usr/local/spark-3.1.2/conf/workers.template /usr/local/spark-3.1.2/conf/workers

    ②修改workers文件,添加worker节点

    vi /usr/local/spark-3.1.2/conf/workers

    覆盖为:

    1. user1
    2. user2
    3. user3

    这个文件是用来告诉master我的worker在那些节点上启动。

    ③修改spark-env.sh.template文件名为spark-env.sh

    mv /usr/local/spark-3.1.2/conf/spark-env.sh.template /usr/local/spark-3.1.2/conf/spark-env.sh

    ④ 修改spark-env.sh文件,添加JAVA_HOME环境变量和集群对应的master节点

    vi /usr/local/spark-3.1.2/conf/spark-env.sh

     文件末尾追加如下内容

    1. #引入jdk所在路径(具体根据自己jdk路径修改)
    2. export JAVA_HOME=/usr/local/jdk1.8.0_152/
    3. #确定把master启动到哪台服务器上面,=user1就说明在user1上启动master
    4. SPARK_MASTER_HOST=user1
    5. #Master的内部通信端口设置为7077
    6. SPARK_MASTER_PORT=7077

    注意:7077端口,相当于hadoop3内部通信的9820端口,不能用于外部访问,此处的端口需要确认自己的Hadoop配置 

    3)配置环境变量

    ①配置spark的环境变量

    vi /etc/profile

    修改如下

    1. #追加
    2. export SPARK_HOME=/usr/local/spark-3.1.2/
    3. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME/sbin:

    ② 刷新环境变量和测试环境变量

    [root@user1 ~]# source /etc/profile
    [root@user1 ~]# which spark-shell
    /usr/local/spark-3.1.2/bin/spark-shell

    4)分发配置好的内容到其他节点 

    #分发spark的安装目录
    [root@user1 ~]# scp -r /usr/local/spark-3.1.2 user2:/usr/local/
    [root@user1 ~]# scp -r /usr/local/spark-3.1.2 user3:/usr/local/

    #在qianfeng01上分发配置好的环境到user2和user3
    [root@user1 ~]# scp /etc/profile user2:/etc/
    [root@user1 ~]# scp /etc/profile user3:/etc/

    #分别在user2和user3上刷新spark的环境变量
    [root@user2 ~]# source /etc/profile
    [root@user3 ~]# source /etc/profile

    2.2.2 启动spark集群

     从user1进入到安装目录找sbin目录进入 

    cd /usr/local/spark-3.1.2/sbin/

    启动spark集群

    ./start-all.sh

    检查启动情况

    spark提供webUI界面端口是一样8080或8081 内部通信7077

    http://user1:8080http://user1:8081

     spark计算pai值:

    1. spark-submit \
    2. --class org.apache.spark.examples.SparkPi \
    3. --master spark://qianfeng01:7077 \
    4. --executor-memory 512m \
    5. --total-executor-cores 2 \
    6. /usr/local/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar 100

     

  • 相关阅读:
    几百行代码实现一个 JSON 解析器
    saas化调研
    Python——读取MySQL数据并导出到Excel
    35、数据表介绍
    《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)
    14.前端笔记-CSS-浮动
    PR Lumetri颜色
    【强化学习】时间循环最优决策:原理与Python实战
    mfc对话框添加OnMouseMove
    直播邀请函 | 第12届亚洲知识产权营商论坛:共建创新价值 开拓崭新领域
  • 原文地址:https://blog.csdn.net/weixin_45772744/article/details/125547573