Spark基础(3.1.3)

1、什么是Spark:

        1、Spark是一个开源的分布式计算系统,是致力于快速的分析数据

        2、总结来说就是专门为大规模数据处理而设计的快速通用的计算引擎

        3、Spark可以完成各种运算,例如SQL查询,文本分析,机器学习等。

        4、Spark是由Scala语言开发的,与Scala紧密结合。

2、Spark的组成部分:

        1、Spark  Core (核心底层部分):

                (1)、是基于RDD

                (2)、支持多种语言(Java、R、python、Scala、SQL等语言)

        2、Spark SQL

                (1)、基于dataframe

                (2)、结构化数据查询

        3、Spark Streming  流处理

        4、Spark MLLib  机器学习

        5、Spark Graphx  图计算

3、对于Spark和MapReduce的对比(为什么Spark的速度要比MapReduce的速度要快?)

        1、MapReduce慢的原因:

                (1)、额外的复制,会不断的取读取hdfs中文件,导致速度会变慢

                (2)、序列化,频繁的写磁盘,中间会产生序列化

                (3)、磁盘的IO开销,基于磁盘计算,不断的写,写完再存,存完再取,也会导致速度很慢。

                (4)、细粒度资源调度(每执行一次任务就需要申请资源称为细粒度资源调度)

        2、Spark快的原因:

                (1)、Spark时基于内存的

                (2)、DAG有向无环图

                (3)、粗粒度调度资源(一次性将所需要的资源全部申请称为粗粒度资源调度,缺点:只有等所有的任务全部完成,才会释放资源,就会造成资源的浪费)

spark的搭建:

4、Spark的部署方式(支持多种部署方式)(Spark  Core 阶段):     
1、Local模式:

        1、主要用于本地开发测试

        2、由本地提供资源

        3、可以设置线程数:local , local[4] , local[*

 1、Local本地模式的环境搭建:

                1、创建maven项目

                2、在idea中安装scala插件

// 导入依赖:因为saprk是在scala的基础之上,所以对于scala的依赖也需要导入,需要在idea下载scala的插件

     <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.10</version>
        </dependency>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-compiler</artifactId>
            <version>2.12.10</version>
        </dependency>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-reflect</artifactId>
            <version>2.12.10</version>
        </dependency>



//在pom.xml中添加Scala编译插件


          <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>



//在pom.xml文件中添加Spark-Core依赖
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.1.3</version>
        </dependency>
2、Standalone模式(主从架构):

        1、独立运行模式

        2、自带完整的资源管理服务

        3、可单独部署到一个集群中

        4、无需依赖任何其他资源管理系统

        5、主从架构:Master/Worker

        6、支持两种任务提交方式 Cluster:适用于生产环境 Client:适用于交互、调试

Standalone模式环境搭建:

                1、上传解压,并修改名称:

tar -zxvf spark-3.1.3-bin-without-hadoop.tgz -C /usr/local/soft



mv spark-3.1.3-bin-without-hadoop spark-3.1.3

                2、修改配置文件:

# 重命名文件
cp spark-env.sh.template spark-env.sh
cp workers.template workers

                3、增加配置:vim  spark-env.sh

export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=2g
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
export SPARK_DIST_CLASSPATH=$(/usr/local/soft/hadoop-3.1.1/bin/hadoop classpath)

                4、增加节点配置:vim workers

以node1和node2作为节点

vim  workers
node1
node2

                5、复制到其他节点:

cd /usr/local/soft/
scp -r spark-3.1.3 node1:`pwd`
scp -r spark-3.1.3 node2:`pwd`

                6、配置环境变量:vim   /etc/profile,配置完成后需要进行source /etc/profile

                7、在主节点执行启动命令:

注意:需要切换到sbin目录下,start-all.sh 与Hadoop的sbin目录中的启动命令有冲突

cd /usr/local/soft/spark-3.1.3/sbin/start-all.sh	

                8、访问Spark Web UI 

http://master:8080/

                9、测试

切换目录:cd /usr/local/soft/spark-3.1.3/examples/jars


两种模式:
        1、standalone client模式:日志在本地输出,一般用于上线前测试


spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512m --total-executor-cores 1 --deploy-mode client spark-examples_2.12-3.1.3.jar 100



--executor-memory:指定每一个executor可用内存
--total-executor-cores:指定所有executor使用的cpu核数 
--executor-cores:指定每一个executor使用的cpu核数



        2、standalone cluster模式:上线使用,不会在本地打印日志缺点


spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512M --total-executor-cores 1 --deploy-mode cluster spark-examples_2.12-3.1.3.jar 100


两种模式的最主要的区别就是Driver端的启动位置不同,client是在运行master节点运行,然而对于cluster是在worker端随机选择一个运行。




                10、在Standdlone中还有一张方式:Spark shell,提供的是一种交互式命令行,可以直接写代码:

spark-shell --master spark://master:7077
3、 ON YARN模式

        1、将Spark程序提交到Yarn上运行

        2、由Yarn负责管理维护资源

        3、不需要额外构建Spark集群

        4、支持两种任务提交方式: Cluster:适用于生产环境 Client:适用于上线前的测试

ON YARN模式的环境搭建:

                第一步:停止Spark Standalone集群模式

# 切换目录
cd /usr/local/soft/spark-3.1.3/
# 停止集群
./sbin/stop-all.sh

                第二步:增加hadoop的配置文件地址

vim spark-env.sh
# 增加HADOOP_CONF_DIR
export HADOOP_CONF_DIR=/usr/local/soft/hadoop-3.1.1/etc/hadoop

                第三步:关闭yarn

stop-yarn.sh

                第四步:修改yarn配置

cd /usr/local/soft/hadoop-3.1.1/etc/hadoop/
vim yarn-site.xml

# 加入如下配置
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>

    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>

                第五步:同步到其他节点

scp -r yarn-site.xml node1:`pwd`
scp -r yarn-site.xml node2:`pwd`

                第六步:启动yarn

start-yarn.sh

                第七步:测试

切换目录:cd /usr/local/soft/spark-3.1.3/examples/jars


两种运行模式:

    1、Spark on Yarn Client模式:



spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi  --executor-memory 512M --num-executors 2 spark-examples_2.12-3.1.3.jar 100



    2、Spark on Yarn Cluster模式:


spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi  --executor-memory 512M --num-executors 2 spark-examples_2.12-3.1.3.jar 100




获取yarn程序执行日志  执行成功之后才能获取到

yarn logs -applicationId application_1696862869049_0001


                最后一步:开启Spark On Yarn的WEB UI

修改配置文件:

# 切换目录
cd /usr/local/soft/spark-3.1.3/conf

# 去除后缀
cp spark-defaults.conf.template spark-defaults.conf

# 修改spark-defaults.conf
vim spark-defaults.conf

# 加入以下配置,历史服务器日志
spark.eventLog.enabled  true
spark.eventLog.dir      hdfs://master:9000/user/spark/applicationHistory
spark.yarn.historyServer.address        master:18080
spark.eventLog.compress true
spark.history.fs.logDirectory   hdfs://master:9000/user/spark/applicationHistory
spark.history.retainedApplications      15



创建HDFS目录用于存储Spark History日志

hdfs dfs -mkdir -p /user/spark/applicationHistory




启动Spark History Server
cd /usr/local/soft/spark-3.1.3/sbin/start-history-server.sh

5、Spark任务架构:

        1、Driver
Driver 是一个 JVM 进程,
    负责执行 Spark 任务的 main 方法
    执行用户提交的代码,创建 SparkContext 或者 SparkSession
    将用户代码转化为 Spark 任务(Jobs)创建血缘(Lineage),逻辑计划(Logical Plan)和物理计划(Physical Plan)
    在 Cluster Manager 的辅助下,把 task 任务分发调度出去
    跟踪任务的执行情况,收集日志
        2、Spark Context/Session
它是由 Spark driver 创建,每个 Spark 应用对应一个程序和集群交互的入口可以连接到 Cluster Manager
        3、Cluster Manager
负责部署整个 Spark 集群,包括上面提到的 driver 和 executors,具有以下几种常见的部署模式:
    Standalone
    YARN
    Mesos
    Kubernetes

主要维护的信息包括:worker的节点状况,worker节点的位置,worker节点的内存
        4、Executor
一个创建在 worker 节点的进程
一个 Executor 有多个 slots(线程) 
一个 slot 就是一个线程,对应了一个 task
可以并发执行多个 tasks
负责执行 Spark 任务,把结果返回给 Driver
可以将数据缓存到 worker 节点的内存

Driver就是来负责任务的分配,然而对于Executor是负责来执行任务,并将结果返回给Driver,RDD是直接换存在Executer中。

 一个行为算子会触发一个job,一个job包含多个stage,一个stage是多个可以并行执行的task,task的数量跟分区数量有关,最后生成的文件也与task有关

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值