Spark环境部署

部署预备

Hadoop安装

spark运行一般依赖Hadoop(也可以不需要)。关于Hadoop的安装,可以参考 使用虚拟机搭建Hadoop集群

在安装Hadoop的过程中,需要同时安装jdk8。

2. Scala安装

解压Scala二进制包到指定目录下,例如/opt目录下。需要注意的是,当前spark仅支持scala2,不支持scala3。

图片[1]-Spark环境部署-卡咪卡咪哈-一个博客

3. spark安装

解压Spark二进制包到指定目录下,例如/opt目录下。spark的版本需要和hadoop版本相对应。

图片[2]-Spark环境部署-卡咪卡咪哈-一个博客

4. 定义环境变量

可以在/etc/profile.d/目录下新增spark.sh(任意名称)文件,用于定义spark相关的环境变量。

可以参考如下环境变量。

export JAVA_HOME=/opt/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH

export HADOOP_HOME=/opt/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export SCALA_HOME=/opt/scala-2.12.17
export PATH=$SCALA_HOME/bin:$PATH

export SPARK_HOME=/opt/spark-3.3.1-bin-hadoop2
export PATH=$SPARK_HOME/bin:$PATH

5. python支持

安装python后,可以使用pip install pyspark 安装pyspark库。

Local模式

Local模式以一个独立进程来提供spark运行时环境,使用spark-shell, pyspark, spark-submit 等命令直接启动Local模式。

在Scala交互式命令行中运行

sc.parallelize(Array(1,2,3,4,5)).map(x => x + 10).collect()
图片[3]-Spark环境部署-卡咪卡咪哈-一个博客

spark-shell

在Python交互式命令行中运行

sc.parallelize([1,2,3,4,5]).map(lambda x: x + 10).collect()
图片[4]-Spark环境部署-卡咪卡咪哈-一个博客

pyspark

可以注意到,Local模式下启动spark,会有个master = local[*] 提示信息,这表示spark会根据当前计算机的cpu核心数,自动计算启动的最大线程数。 该参数可以通过–master启动选项进行调整。例如:

$ spark-shell –master local[2]

集群模式

Spark应用以一组独立的进程运行在集群中,这些进程由称为Driver的程序协调运行。Driver内部使用SparkContext保存该组进程的上下文信息。

在集群中,SparkContext可以连接到多种不同类型的集群管理器中(Spark自带的Standalone集群管理器、YARN、Kubernetes)。这些集群管理器可以分配资源给多个Spark应用。SparkContext连接到集群管理器后,Spark会在集群节点中获取Executor,这些Executor是为Spark应用运行计算任务和存储数据的进程。集群管理器会将Spark应用代码(JAR或Python文件,其中传递了SparkContext)发送到Executor。最后SparkContext会发送task到Executor中运行。

图片[5]-Spark环境部署-卡咪卡咪哈-一个博客

集群配置

conf/workers

hadoop01
hadoop02
hadoop03

该文件用于统一脚本启动Spark集群。

2. conf/spark-env.sh

JAVA_HOME=/opt/jdk1.8.0_202
HADOOP_CONF_DIR=/opt/hadoop-2.7.2/etc/hadoop
YARN_CONF_DIR=/opt/hadoop-2.7.2/etc/hadoop # YARN模式需要

SPARK_MASTER_HOST=hadoop01
SPARK_MASTER_WEBUI_PORT=7077
SPARK_MASTER_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
SPARK_WORKER_PORT=7078
SPARK_WORKER_WEBUI_PORT=8081

其中SPARK_MASTER_HOST需要 配置为对外的hostname或ip。

此外,spark还可以借助ZooKeeper完成高可用部署。

Standalone模式

根据conf/workers 文件,可以使用脚本启动整个集群。启动脚本位于$SPARK_HOME/sbin

sbin/start-master.sh- 在执行脚本的计算机上启动master实例。sbin/start-workers.sh- 在conf/workers文件中指定的每台计算机上启动workers实例。sbin/start-worker.sh- 在执行脚本的计算机上启动worker线程实例。sbin/start-all.sh- 启动如上所述的一个master节点和多个worker角色。sbin/stop-master.sh- 停止通过脚本sbin/start-master.sh启动的master实例。sbin/stop-worker.sh- 停止执行脚本的计算机上的所有worker线程实例。sbin/stop-workers.sh- 停止文件conf/workers中指定的计算机上的所有worker线程实例。sbin/stop-all.sh- 停止如上所述的master节点和worker节点。

可以在启动Spark应用时指定地址,以Standalone方式启动Spark应用

./bin/spark-shell –master spark://IP:PORT

例如:

./bin/spark-shell –master spark://hadoop01:7077

可以看到,借助ZooKeeper,Stand

Spark On Yarn

有两种部署模式可以将Spark部署在Yarn容器中。一是cluster模式,Spark Driver运行在master进程中,由Yarn管理,客户端可以在启动应用程序后下线。二是client模式,Spark Driver在客户端进程中运行,Spark仅从Yarn请求资源。

Spark On Yarn相对于Standalone,使用到了YARN_CONF_DIR变量,配置在conf/spark-env.sh中。

以yarn模式启动Spark应用,–master选项直接填yarn即可。例如:

$ ./bin/spark-submit –class org.apache.spark.examples.SparkPi \
–master yarn \
–deploy-mode cluster \
–driver-memory 4g \
–executor-memory 2g \
–executor-cores 1 \
examples/jars/spark-examples*.jar \
10

关于Cluster和client模式

在Cluster模式中,Driver运行在容器内部,通信效率较高。不过,Cluster模式下,Driver的输出也在容器内部,为程序的调试增加了阻碍。而Client模式下。Driver运行在客户端,可以方便地看到其日志输出,方便调试。

web

Application UI

通过运行 Driver 的 Node 的4040端口可以查看在spark中运行的任务的详细信息。

图片[6]-Spark环境部署-卡咪卡咪哈-一个博客

Master UI

master节点的8080端口,纵览整个集群的application

图片[7]-Spark环境部署-卡咪卡咪哈-一个博客

Worker UI

各个worker节点的8081端口,查看当前运行的Executor信息

图片[8]-Spark环境部署-卡咪卡咪哈-一个博客

    THE END
    喜欢就支持一下吧
    点赞5 分享
    评论 抢沙发
    头像
    欢迎您留下宝贵的见解!
    提交
    头像

    昵称

    取消
    昵称表情代码图片

      暂无评论内容