Spark环境搭建及相关工作流程介绍

栏目: 服务器 · 发布时间: 5年前

内容简介:本篇博客主要记录的是Spark的3种运行模式及对应的模式环境搭建过程和流程介绍。3种模式都是经过实践记录详细的操作过程和注意事项。在进行环境的配置过程中,建议先理解每个模式下的工作流程,然后再进行环境搭建,这样容易加深理解。由于Spark on YARN是搭建在HDFS分布式环境下的,所以此处可以参考一下Application:用户编写的Spark应用程序,同等于MapReduce需要处理的一个或多个任务job。由Driver程序和Executor程序组成。Driver:运行Application的main

本篇博客主要记录的是Spark的3种运行模式及对应的模式环境搭建过程和流程介绍。3种模式都是经过实践记录详细的操作过程和注意事项。在进行环境的配置过程中,建议先理解每个模式下的工作流程,然后再进行环境搭建,这样容易加深理解。由于Spark on YARN是搭建在HDFS分布式环境下的,所以此处可以参考一下 Hadoop环境搭建及相关组件的工作流程介绍 进行环境搭建,对应的软件 下载地址 密码: k9ir

2Spark一些核心概念

Application:用户编写的Spark应用程序,同等于MapReduce需要处理的一个或多个任务job。由Driver程序和Executor程序组成。

Driver:运行Application的main函数并创建SparkContext,SparkContext的目的是为了准备Spark应用程序的运行环境。SparkContext负责资源的申请、任务分配和监控等。

Exector:为某Application而在Worker Node上运行的一个进程,负责运行Task。每个Application都有各自独立的一批Executor。 在Spark on Yarn模式下,Exector的进程名称为CoarseGrainedExecuor Backend,一个CoarseGrainedExecuor Backend进程有且只有一个Exector对象,负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task.

Cluster Manager:集群管理器,指的是集群上获取资源的外部服务,主要要3种类型。

a.Standalone:spark原生的资源管理,由Master负责资源的分配。

b.Apache Mesos

c.Hadoop Yarn:主要指的是Yarn中的ResourceManager和NodeManager的资源管理调度框架。

Worker:集群中可以运行Application代码的节点,类似于Yarn中的NodeManager节点。

Task:Application的运行基本单位,Executor上的工作单元,类似于MapReduce中的MapTask和ReduceTask。多个Task组成一个Stage,而Task的调度和管理由TaskSchedule负责。

Job:包含多个Task组成的并行计算由Spark Action原子操作触发产生,一个Application可以包含多个Job。每个Job包含多个Stage。

State:每个Job会拆分为多组Task,作为一个TaskSet,称为Stage。Stage的划分和调度有DAGScheduler负责。有Shuffle Map Stage和Result Stage两种。

RDD:Spark基本计算单元,是Spark最核心的东西。主要有Transformation和Action操作。它是能够被并行操作的数据集合。其存储级别可以是内存,磁盘,可通过spark.storage.StorageLevel设置。

DAGScheduler:根据job构建基于Staged的DAG,并提交Stage给TaskSchedule。其划分Stage的依据是RDD之间的依赖关系。

TaskScheduler:将TaskSet提交给Worder集群运行,每个Exector运行上面Task就在此分配。

3Spark各个模式运行配置及详细介绍

Spark环境搭建及相关工作流程介绍

图说明:上图为Spark的基本运行流程图,不管是Spark什么模式运行,基本运行流程图如上所示,可能发生变化的就是各个组件的存放的节点位置和称呼不一样,但基本功能和运行流程不变。涉及到的核心概念如上。

a.各个模式涉及到的变化

local:上图所有组件的运行都是在本地机上,且用线程的形式来完成分布式的任务。

Standalone:需要将Spark部署到相关节点,需要指定master机器和Worder机器。此时的资源分配由master节点完成。

Yarn-Cluster:Driver和Exector都运行在Yarn集群,此时Spark运行流程图中的称呼master和执行任务的Worder不在使用,而是NodeManager,资源分布调度的是ResourceManager,且YARN中的运用程序管理ApplicationMaster管理Spark中的Driver,其中Driver在该ApplicationMaster的节点中。

Yarn-client:只有Exector运行在Yarn集群上。此时Spark运行流程图中的称呼master和执行任务的Worder不在使用,而是NodeManager,资源分布调度的是ResourceManager。此时YARN中的运行程序管理ApplicationMaster管理Spark中的Driver。其中Driver在Client的机器上。

b.spark各个模式下的应用程序的提交

两种方式spark-shellspark-submit

说明:总的来说,最后提交方式都是通过spark-submit的方式来提交, spark-shell 运行的时候先进行了一些初始化的配置,然后再通过spark-submit的方式来进行提交应用程序。不过 spark-shell 是交互式的方式来进行应用的提交。接下来对各个模式下的部署和验证的实例使用 spark-submit 的方式进行。

参考:各个模式下的提交具体参数说明 查看地址

c.总的来说,Spark运行模式取决于传递个SparkContext的 deplyModemaster 参数的设置。

--master + 参数:local、yarn-client、yarn-cluster

--deploy-mode +参数:cluster、client

spark-submit提交示例:

在$SPARK_HOME目录下:
命令:./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]
命令参数说明:
application-jar:为应用程序的jar包
application-arguments:为应用程序中的调用参数

3.1Spark 本地模式介绍

说明:所有程序都运行在一个JVM中,启动提交应用程序后,会产生一个SparkSubmit进程,既是客户提交任务的Client进程、又是Spark的driver程序、还充当着Spark执行Task的Executor角色。

软件准备: jdk-8u171-linux-x64.tar.gz , scala-2.11.8.tgz , spark-2.2.0-bin-2.6.0-cdh5.7.0.tgz (这块是自己编译好的spark包)

情景说明:VM1(master)192.168.1.77上运行的和进行如下配置

步骤1:分别解压到/home/zkpk/app/文件下
步骤2:gedit /home/zkpk/.bash_profile
    #java
    export JAVA_HOME=/usr/java/jdk1.8.0_171
    export PATH=$JAVA_HOME/bin:$PATH
    
    #spark
    export SPARK_HOME=/home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0
    export PATH=$SPARK_HOME/bin:$PATH
    
    #scala
    export SCALA_PATH=/home/zkpk/app/scala-2.11.8
    export PATH=$SCALA_PATH/bin:$PATH

本地应用程序提交示例:终端的当前目录是$SPARK_HOME

命令:./bin/spark-submit --class org.apache.spark.examples.JavaWordCount --master local /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.2.0.jar file:///home/zkpk/app/data/words.txt
结果:spark: 972
    hadoop: 1834
    li: 972
    welcome: 1836
    jian: 1944
或者命令:./bin/spark-shell --master local
接下来使用scala语言进行交互式的运行。
验证查看:http://localhost:4040

3.2Spark standalone模式介绍

说明:集群模式为1 master + n worker。

前提:集群的网络主机名,hosts都已经设置好了。

情景:3台VM虚拟机

VM1主机名master,ip:192.168.1.77,充当standalon集群中的master,worker

VM2主机名slave1,ip:192.168.1.103,充当standalon集群中的worker.

VM3主机名slave2,ip:192.168.1.102,充当standalon集群中的worker.

各个VM的 java 版本是:jdk1.8.0_171

Scala版本是:scala-2.11.8

Spark版本是:spark-2.2.0-bin-2.6.0-cdh5.7.0

方法是:先配置好Master上的再复制到其他的主机上

1.配置$SPARK_HOME/conf/spark-env.sh(master)

命令:cp /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/spark-env.sh.template /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/spark-env.sh
命令:gedit /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/spark-env.sh
    JAVA_HOME=/usr/java/jdk1.8.0_171
    SCALA_HOME=/home/zkpk/app/scala-2.11.8
    SPARK_MASTER_HOST=master #设置spark的master主机,重要
    SPARK_WORKER_CORES=2    #设置每个worker的核数
    SPARK_WORKER_MEMORY=2g
    SPARK_WORKER_INSTANCES=1 #每个节点的worker 进程数量

2.设置$SPARK_HOME/conf/spark-env.sh/slaves(master)

主要是设置sparkd的从节点主机名

命令:cp /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/slaves.template /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/slaves
命令:gedit /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/slaves
    master
    slave1
    slave2

3.将Master的集群配置复制到其他节点

命令:scp -r /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0 zkpk@slave1:/home/zkpk/app/
命令:scp -r /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0 zkpk@slave2:/home/zkpk/app/
命令:scp -r /home/zkpk/app/scala-2.11.8 zkpk@slave1:/home/zkpk/app/
命令:scp -r /home/zkpk/app/scala-2.11.8 zkpk@slave2:/home/zkpk/app/
复制配置文件:
命令:scp /home/zkpk/.bash_profile zkpk@slave1:/home/zkpk/.bash_profile
命令:scp /home/zkpk/.bash_profile zkpk@slave2:/home/zkpk/.bash_profile
再到各个主机slave1和slave2的主机下的终端分别运行:
命令:source /home/zkpk/.bash_profile

4.启动spark集群

命令:/home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/sbin/start-all.sh
start-all.sh该脚本的工作:会在master机器上启动master进程,在$SPARK_HOME/conf/slaves文件配置的所有hostname的机器上启动worker进程。
浏览器查看:master:8080
或者命令查看:jps
或者启动方式:
命令:/home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/sbin/start-master.sh
命令:/home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/sbin/start-slaves.sh

5.应用程序提交示例

命令:spark-submit --class org.apache.spark.examples.JavaWordCount --master spark://master:7077 /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.2.0.jar file:///home/zkpk/app/data/words.txt
结果:
spark: 972
hadoop: 1834
li: 972
welcome: 1836
jian: 1944
注意:这里的file:///home/zkpk/app/data/words.txt文件存放在master节点上,需要复复制存放到各个节点的相同目录文件下,不过由于master VM 本身也是worker所以如果只放在master上也是能运行出结果的。所以这时候需要使用到hadoop HDFS文件系统,将更好。

6.standalone模式下的运行流程图

Spark环境搭建及相关工作流程介绍

3.3Spark YARN模式介绍

说明:此模式需要建立在Hadoop集群上,文件存储于HDFS上,资源调度YARN,并行计算框架Spark.

此时Spark集群并不在是master和n个worker的形式,资源调度上是1个ResourceManager和n个NodeManager,文件系统是NameNode和DataNode的形式。Spark YARN模式有两种形式Client和集群模式。

前提:集群的网络主机名,hosts都已经设置好了,Window有3个VM和Mac同处一个局域网下,VM采用桥接模式。

情景:3台VM虚拟机(Windows上)。

VM1主机名master,ip:192.168.1.77,HDFS中的NameNode和DataNode,YARN中的ResourceManager和NodeManager。

VM2主机名slave1,ip:192.168.1.103,HDFS中的DataNode,YARN中的NodeManager。

VM3主机名slave2,ip:192.168.1.102,HDFS中的DataNode,YARN中的NodeManager。

各个VMjava版本是:jdk1.8.0_171

Scala版本是:scala-2.11.8

Spark版本是:spark-2.2.0-bin-2.6.0-cdh5.7.0

1.设置spark-env.sh,各个节点下都需要设置好

命令:cp /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/spark-env.sh.template /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/spark-env.sh
命令:gedit /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/spark-env.sh
      HADOOP_HOME=/home/zkpk/app/hadoop
      HADOOP_CONF_DIR=/home/zkpk/app/hadoop/etc/hadoop

2.HDFS上述要求的分布式环境搭建

参考上篇博客 Hadoop环境搭建及相关组件的工作流程介绍

,其中需要注意的是java环境已经换成1.8了,相应的地方需要更改$HADOOP_HOME/etc/hadoop/hadoop-env.sh中的java环境地址。

需要注意修改的地方是$HADOOP_HOME/etc/hadoop/yarn-site.xml(每个节点都需要修改)

命令:gedit $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle,spark_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
        <value>org.apache.spark.network.yarn.YarnShuffleService</value>
    </property>
    <property>
        <name>spark.shuffle.service.port</name>
        <value>7338</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
</configuration>
注意:为避免NodeManger启动不了,各个节点需要拷贝${SPARK_HOME}/yarn/spark-2.2.0-yarn-shuffle.jar”到“${HADOOP_HOME}/share/hadoop/yarn/lib/”目录下

3.启动Spark on Yarn(master节点下)

1,首先启动Hadoop分布式。
命令:$HADOOP_HOME/sbin/start-all.sh
此时查看运行的进程命令:jps
有:NodeManager,NameNode,Jps,DataNode,ResourceManager
浏览器端查看:http://master:50070 ->HDFS文件
            http://master:8088 ->运行调度
2.关闭任务:$HADOOP_HOME/sbin/stop-all.sh

4.应用程序提交示例,Spark on Yarn运行模式有两种运行情况。

a.spark on yarn-client模式

driver运行在提交作业的机器上(可以看到程序打印日志)

命令:spark-submit --class org.apache.spark.examples.JavaWordCount --master yarn --deploy-mode client /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.2.0.jar hdfs://192.168.1.77:8020/words.txt

运行流程如下(摘自网上):

Spark环境搭建及相关工作流程介绍

b.spark on yarn-cluster模式

driver运行在集群上某个机器上(看不到日志,只可以看到running状态),Driver在AppMaster执行.

命令:spark-submit --class org.apache.spark.examples.JavaWordCount --master yarn --deploy-mode cluster /home/zkpk/app/spark-2.2.0-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.2.0.jar hdfs://192.168.1.77:8020/words.txt

运行流程如下(摘自网上):

Spark环境搭建及相关工作流程介绍

4问题

描述:HDFS分布式启动问题,有时候DataNode能启动,NameNode不能启动,有时候刚好相反。

解决:清空hadoop HDFS设置的tmp文件夹,清空logs文件夹。再格式化HDFS,最后启动,问题能解决。

脚本:

#我的Hadoop home目录为/home/zkpk/app/hadoop
cd /home/zkpk/app
rm -r ./hadoop_tmp/
echo 'delete tmp ~'
rm -r ./hadoop/logs/
echo 'delete logs ~'
mkdir -p ./hadoop_tmp/dfs/data
mkdir -p ./hadoop_tmp/dfs/name
hdfs namenode -format
/home/zkpk/app/hadoop/sbin/start-dfs.sh

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Clean Architecture

Clean Architecture

Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99

Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具