Apache Spark 3.3.1 集群部署
后知后觉 暂无评论

Apache Spark 是一个多语言引擎,用于在单节点机器或集群上执行数据工程、数据科学和机器学习。

Spark

下载

从官网获取二进制包,需要注意的是后缀标识需要选择 without-hadoop ,因为已经有 Hadoop 集群,因此不用下载内置 Hadoop 的版本。

wget https://archive.apache.org/dist/spark/spark-3.3.1/spark-3.3.1-bin-without-hadoop.tgz

部署(YARN 模式)

Spark 支持多种方案的部署

Standalone 模式即为单机部署,在这个模式下,Spark 会启用内置的 Hadoop 集群,无需依赖外部,但是只建议测试环境使用。
Apache Mesos 模式为搭配 Mesos 动态部署,Spark 不会监听和处理请求,Spark 会以 Client 的身份对接 Mesos,所有 Task 都会由 Mesos 动态分配,但是目前已经弃用,具体原因不明。
Hadoop YARN 模式为已经有 Hadoop 集群,并且集群使用 YARN 调度器,那么可以直接将 Spark 对接进入 YARN 中,完成集群化部署。
Kubernetes 模式为容器化部署,不涉及所以忽略。

本文演示已经有 Hadoop 集群下,部署在 YARN 模式下。

环境

配置

解压产品到安装目录

sudo tar xf spark-3.3.1-bin-without-hadoop.tgz -C /opt/

为产品文件授权

sudo chown -R $USER:$USER /opt/spark-3.3.1-bin-without-hadoop/

配置系统级环境变量

sudo vim /etc/profile.d/hadoop.sh

增加以下几行

export SPARK_HOME=/opt/spark-3.3.1-bin-without-hadoop
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
export PATH=$SPARK_HOME/bin:$PATH
小贴士:如果使用的 without-hadoop 版本,那么 $SPARK_DIST_CLASSPATH 为必选配置项,否则 Spark 运行会报错,无法执行 CLASS 单元。

退出终端重新登录以生效环境变量,然后配置 Spark。

cd $SPARK_HOME
cp conf/spark-env.sh.template conf/spark-env.sh
cp spark-defaults.conf.template spark-defaults.conf
cp conf/workers.template conf/workers

conf/spark-env.sh 中加入以下几行

export SPARK_LOCAL_IP=hostname
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
小贴士:参数 SPARK_LOCAL_IP 这里需要配置成本机 hostname,这里示例是 hadoop1。

conf/workers 中加入集群所有节点信息

hadoop1
hadoop2
hadoop3

然后将配置完成的 Spark 分发至所有节点

sudo rsync -av /opt/spark-3.3.1-bin-without-hadoop/ root@hadoop1:/opt/spark-3.3.1-bin-without-hadoop
sudo rsync -av /opt/spark-3.3.1-bin-without-hadoop/ root@hadoop2:/opt/spark-3.3.1-bin-without-hadoop

环境变量也别忘记分发至所有节点

sudo rsync -av /etc/profile.d/hadoop.sh root@hadoop2:/etc/profile.d/
sudo rsync -av /etc/profile.d/hadoop.sh root@hadoop3:/etc/profile.d/

然后将不同节点的配置文件修正 $SPARK_HOME/conf/spark-env.sh 其中的 SPARK_LOCAL_IP 改成本机的 hostname,切记一定要修正,否则集群无法选举 Master。

YARN 改造

修改 YARN 引擎资源计算调度方式 /opt/hadoop-3.3.4/etc/hadoop/capacity-scheduler.xml 文件中以下字段

  <property>
    <name>yarn.scheduler.capacity.resource-calculator</name>
    <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>
  </property>

<value> 改成 DominantResourceCalculator

  <property> 
    <name>yarn.scheduler.capacity.resource-calculator</name> 
    <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> 
  </property>

启动

启动集群

cd $SPARK_HOME
sbin/start-all.sh

稍等片刻,然后检查端口 8081 是否正常监听

ss -lnt | grep 8081
LISTEN 0      1      [::ffff:10.10.10.11]:8081             *:*

然后使用浏览器访问主节点 8081 端口可以看到 Spark 集群状态

Spark Master


测试集群

Spark 官方提供了一些测试 Demo 可以用来集群可用性

cd $SPARK_HOME
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode cluster \
    --driver-memory 4g \
    --executor-memory 2g \
    --executor-cores 1 \
    --queue default \
    examples/jars/spark-examples_2.12-3.3.1.jar \
    10
参数说明
--master指定运行模式
--deploy-mode指定部署模式
--driver-memory指定驱动内存上限
--executor-memory运行示例内存上限
--executor-cores运行示例核心数
--queue运行示例中的方法

执行中没有报错即为成功,最终执行结果可以在 Hadoop 状态面板中看到 http://hadoop1:8080/cluster

状态检查

状态为 SUCCEEDED 的即为运行成功,失败的会显示 FAILED


附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。