部署预备
Hadoop安装
spark运行一般依赖Hadoop(也可以不需要)。关于Hadoop的安装,可以参考 使用虚拟机搭建Hadoop集群
在安装Hadoop的过程中,需要同时安装jdk8。
2. Scala安装
解压Scala二进制包到指定目录下,例如/opt目录下。需要注意的是,当前spark仅支持scala2,不支持scala3。
3. spark安装
解压Spark二进制包到指定目录下,例如/opt目录下。spark的版本需要和hadoop版本相对应。
4. 定义环境变量
可以在/etc/profile.d/目录下新增spark.sh(任意名称)文件,用于定义spark相关的环境变量。
可以参考如下环境变量。
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交互式命令行中运行
spark-shell
在Python交互式命令行中运行
pyspark
可以注意到,Local模式下启动spark,会有个master = local[*] 提示信息,这表示spark会根据当前计算机的cpu核心数,自动计算启动的最大线程数。 该参数可以通过–master启动选项进行调整。例如:
集群模式
Spark应用以一组独立的进程运行在集群中,这些进程由称为Driver的程序协调运行。Driver内部使用SparkContext保存该组进程的上下文信息。
在集群中,SparkContext可以连接到多种不同类型的集群管理器中(Spark自带的Standalone集群管理器、YARN、Kubernetes)。这些集群管理器可以分配资源给多个Spark应用。SparkContext连接到集群管理器后,Spark会在集群节点中获取Executor,这些Executor是为Spark应用运行计算任务和存储数据的进程。集群管理器会将Spark应用代码(JAR或Python文件,其中传递了SparkContext)发送到Executor。最后SparkContext会发送task到Executor中运行。
集群配置
conf/workers
hadoop02
hadoop03
该文件用于统一脚本启动Spark集群。
2. conf/spark-env.sh
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应用
例如:
可以看到,借助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即可。例如:
–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中运行的任务的详细信息。
Master UI
master节点的8080端口,纵览整个集群的application
Worker UI
各个worker节点的8081端口,查看当前运行的Executor信息
暂无评论内容