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
- Apache Mesos (已废弃)
- Hadoop YARN
- Kubernetes
Standalone 模式即为单机部署,在这个模式下,Spark 会启用内置的 Hadoop 集群,无需依赖外部,但是只建议测试环境使用。
Apache Mesos 模式为搭配 Mesos 动态部署,Spark 不会监听和处理请求,Spark 会以 Client 的身份对接 Mesos,所有 Task 都会由 Mesos 动态分配,但是目前已经弃用,具体原因不明。
Hadoop YARN 模式为已经有 Hadoop 集群,并且集群使用 YARN 调度器,那么可以直接将 Spark 对接进入 YARN 中,完成集群化部署。
Kubernetes 模式为容器化部署,不涉及所以忽略。
本文演示已经有 Hadoop 集群下,部署在 YARN 模式下。
环境
- 系统无限制,安装 Oracle JDK / OpenJDK(8u201+)即可;
- Hadoop 3.3.x 且启用了 YARN 引擎;
- Zookeeper 3.6.x 理论上不限制版本,只要版本不是太旧都能用;
配置
解压产品到安装目录
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 官方提供了一些测试 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
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-03-13 16:03 PM