Spark集群的搭建

Spark集群介绍

Spark的运行模式分为:

  • local(本地模式)
  • Spark on Standalone
  • Spark on yarn
  • Spark on mesos。

其中Standalone集群是Spark的框架自己实现的资源任务管理集群,所以今天我们介绍一下Standalone集群的搭建。

Spark Standalone

  1. 首先,去spark官网下载spark安装包在这里插入图片描述
    笔者这次使用的是spark1.6.3、Hadoop2.6版本的jar包

  2. 下载完成后,把jar包发送到服务器上进行解压,然后把解压后的文件夹名称改为spark1.6.3.

  3. 进入conf目录

  • 修改slave.template->slave(这里是配置Woker所在节点位置)
    加入如下配置
node02
node03
node04
  • 修改spark-env.sh.template->spark-env.sh
    加入如下配置
SPARK_MASTER_IP=node01
SPARK_MASTER_PORT=7077
SPARK_WORKER_MEMORY=2G
SPARK_WORKER_INSTANCES=1
SPARK_WORKER_DIR=/自定义目录
  1. 将配置好的安装包发送到其它节点
  2. 这里需要注意一下,spark的启动命令是 start-all.sh,需要将其改为 start-spark.sh,或者以版本号来命名:start-1.6.3.sh,关闭命令亦然防止和Hadoop集群的启动命令发生冲突
mv start-all.sh start-spark.sh 
mv stop-all.sh  stop-spark.sh  
  1. 将配置好的文件夹发送到其他节点
[root@node01 zgl]# scp -r spark-1.6.3 node02:`pwd`
[root@node01 zgl]# scp -r spark-1.6.3 node03:`pwd`
[root@node01 zgl]# scp -r spark-1.6.3 node04:`pwd`
[root@node01 zgl]# scp -r spark-1.6.3 client:`pwd`
  1. 配置Spark环境变量
  2. 在Master节点启动集群(node01)
start-spark.sh
  1. jps检查进程是否启动,在node01有一个Master进程,其它从节点分别有一个Worker进程 也可以进Web UI界面查看http://node01:8080
    在这里插入图片描述
  2. 提交Application到集群中运行,这里以SparkPi为例
spark-submit --master spark://node01:7077 --class org.apache.spark.examples.SparkPi /opt/software/spark1.6.3/lib/spark-examples-1.6.3-hadoop2.6.0.jar 100(100是传递的参数)
  1. 提交之后可以进第9步Web UI查看任务进度,这里不再赘述

Spark Standalone HA

在Standalone集群中也有像HDFS、Yarn一样的高可用机制,在主节点Master挂掉之后,会有一台备用的节点来接管工作,维持集群的正常运行。
同样,Standalone集群也是基于Zookeeper集群来实现的高可用,和hdfs不同的是,Standalone HA中的元数据存储在Zookeeper集群中,通过spark-env.sh中的spark.deploy.zookeeper.dir来配置元数据的存储位置。

集群搭建:

  1. 在spark-env.sh文件中添加如下配置,注意不要手动换行
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181 -Dspark.deploy.zookeeper.dir=/spark"
  1. 将修改后的spark-env.sh发到其他节点的相同目录下
  2. 启动Zookeeper集群
  3. 在 node01节点启动集群
start-spark.sh
  1. 在node02启动备用Master
start-master.sh
  1. 至此,高可用的Standalone集群就搭建完成了,可以在Web UI中查看备用的Master的状态:node02:8080
注意:

这里有个很重要的点,在Spark集群中提交完任务之后,如果把active状态的Master节点进程kill掉,正在执行的任务并不会受到影响,这是因为任务在执行之前已经向Master申请过资源了,任务执行过程中的通讯主要在driver和各个Executor之间,所以主备切换并不会影响任务的执行。

Spark on Yarn

Spark任务在yarn集群中运行的话,只需要提交Spark任务的节点配置好,就可以把任务提交到yarn中运行。

配置

  1. 在客户端的spark-env.sh文件中添加如下配置信息,spark就会去这个位置寻找 hadoop 的配置文件,获取 yarn 集群的信息
HADOOP_CONF_DIR=/opt/zgl/hadoop-2.6.5/etc/hadoop
  1. 开启yarn集群和hdfs,client会把提交的应用程序 jar 包托管在 hdfs 上
  2. 提交任务有两种方式,一种是client,一种是cluster,前者driver进程会在本地启动,后者的driver由主节点随机启动的。
spark-submit --master yarn --class org.apache.spark.examples.SparkPi  /opt/software/spark-1.6.3/lib/spark-examples-1.6.3-hadoop2.6.0.jar  10000
注意

提交任务可能会报下面这个异常,主要是因为虚拟内存超限, contrainer 被 kill,从而导致任务被迫停止

Yarn application has already ended! It might have been killed or unable to launch application master

可以通过在 hadoop 安装包的 yarn-site.xml 文件中配置如下信息来解决

<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
    <description>是否检查每个任务正使用的物理内存量,如果超过默认值则将其杀死,默认是true </description>
</property>
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    <description>Whether virtual memory limits will be enforced for containers</description>
</property>
<think>好的,用户想了解如何搭建Spark集群,特别是结合Hadoop YARN进行分布式计算。我需要根据提供的引用内容来整理步骤,并确保回答结构清晰。首先,用户提供的引用中有两个关于Spark安装和提交任务的命令,还有一个关于Docker网络错误的提示,可能需要注意网络配置的问题。 首先,我应该分步骤讲解Spark集群搭建的过程。引用1提到了解压Spark安装包并移动到指定目录,这可能涉及环境变量的配置。接下来,引用2展示了使用spark-submit提交任务到YARN集群的命令,说明Spark需要与YARN集成。引用3提到的Docker网络问题可能是一个常见错误,提醒用户检查网络配置是否正确。 接下来,我需要确认Spark集群搭建的关键步骤:安装Spark、配置Hadoop YARN集成、环境变量设置、启动集群、提交任务。同时,要注意权限和路径的正确性,避免出现文件找不到的错误。比如在引用2中,任务的输入和输出路径都是HDFS上的,所以需要确保Hadoop集群正常运行,并且路径正确。 可能还需要提到配置文件如spark-env.sh和slaves的修改,但用户提供的引用中没有具体提到,是否需要补充?或者根据常见的Spark on YARN配置步骤来指导?由于用户的问题集中在YARN上,可能不需要详细配置Spark独立集群,而是重点放在YARN模式下的配置。 另外,引用3中的Docker网络问题可能不直接相关,但如果有用户尝试在容器环境中搭建,可能会遇到网络问题,需要确保网络配置正确,比如在Docker中创建hadoop网络,或者检查网络是否存在。 最后,生成相关问题需要考虑用户可能的后续疑问,比如如何验证集群是否成功、资源分配优化、日志查看等。</think>### Spark集群搭建教程(基于Hadoop YARN) #### 一、前置条件 1. 已部署Hadoop集群(含YARN组件),并处于正常运行状态 2. 所有节点已配置JDK(建议JDK 8+) 3. 节点间SSH免密登录配置完成 #### 二、安装Spark 1. **解压安装包**(如使用spark-2.2.0版本) ```bash tar xzvf spark-2.2.0-bin-hadoop2.7.tgz mv spark-2.2.0-bin-hadoop2.7 /export/servers/spark # 路径可自定义[^1] ``` 2. **配置环境变量** ```bash # 在/etc/profile追加 export SPARK_HOME=/export/servers/spark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin ``` #### 三、YARN模式配置 1. **修改spark-defaults.conf** ```bash cp $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf ``` 添加配置: ```properties spark.master yarn spark.driver.memory 2g spark.yarn.jars hdfs:///spark/jars/* # 需提前上传Spark依赖库到HDFS ``` 2. **上传依赖库到HDFS** ```bash hadoop fs -mkdir -p /spark/jars hadoop fs -put $SPARK_HOME/jars/* /spark/jars/ ``` #### 四、提交任务验证 使用示例提交命令(以WordCount为例): ```bash spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ --name spark-pi-test \ $SPARK_HOME/examples/jars/spark-examples_2.11-2.2.0.jar \ 1000 ``` 提交参数说明: - `--master yarn`: 指定YARN资源管理器 - `--deploy-mode cluster`: 任务以集群模式运行[^2] - 最后的数字参数为计算π的迭代次数 #### 五、常见问题处理 1. **网络配置错误** 若出现`No such network: hadoop`错误,需检查Docker网络配置: ```bash docker network create hadoop # 创建自定义网络[^3] ``` 2. **资源不足错误** 通过YARN Web UI(默认8088端口)查看资源使用情况,调整: - `yarn.nodemanager.resource.memory-mb`(YARN配置) - `spark.executor.memory`(Spark配置)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值