spark的HA集群搭建

分布式集群搭建http://blog.51cto.com/14048416/2327802
 上面试spark普通的分布式集群搭建,存在master节点的单点故障问题。Hadoop2.x开始,已经使用zookeeper解决了单点故障。同样的策略,spark也利用了zookeeper解决了spark集群的单点故障问题。

1. 集群的规划(这里使用3台机器测试)

spark的HA集群搭建

2.具体搭建步骤:

① 如果已经使用,并启动了spark分布式集群,请手动停止:
$SPARK_HOME/sbin/stop-all.sh
②配置并启动zookeeper集群:http://blog.51cto.com/14048416/2336178
③修改 $SPARK_HOME/conf 目录中的 spark-env.sh 配置文件

如果是之前有分布式集群的话:删除:**export SPARK_MASTER_HOST=xxx**
加入:
export SPARK_DAEMON_JAVA_OPTS= "-Dspark.deploy.recoveryMode=ZOOKEEPER - Dspark.deploy.zookeeper.url=hadoop01,hadoop02,hadoop03 - Dspark.deploy.zookeeper.dir=/spark"

相关参数解释:
-Dspark.deploy.recoveryMode=ZOOKEEPER:说明整个集群状态是通过zookeeper来维护的,整个集群状态的恢复,也是通过zookeeper来维护的。就是说用 zookeeper 做了 Spark 的 HA 配置,Master(Active)挂掉的话, Master(standby)要想变成 Master(Active)的话,Master(Standby)就要像 zookeeper 读取 整个集群状态信息,然后进行恢复所有 Worker 和 Driver 的状态信息,和所有的 Application 状态信息。
-Dspark.deploy.zookeeper.url:将所有配置了 zookeeper,并且在这台机器上有可能做 master(Active)的机器都配置进来
-Dspark.deploy.zookeeper.dir:zookeeper中保存 spark 的元数据的znode,保存了 spark 的作业运行状态; zookeeper 会保存 spark 集群的所有的状态信息,包括所有的 Workers 信息,所有的 Applactions 信息,所有的 Driver 信息,如果集群。
④如果hadoop集群是高可用集群的话,一定要将core-site.xml 和 hdfs-site.xml放置$SPARK_HOME/conf 目录中,然后同步所有的spark节点。
⑤同步配置文件:
这里是在已经安装了spark分布式的基础上,只同步spark-env.sh即可:(spark集分布式集群的安装:http://blog.51cto.com/14048416/2327802
scp -r $SPARK_HOME/confspark-env.sh hadoop02:$SPARK_HOME/conf
scp -r $SPARK_HOME/confspark-env.sh hadoop03:$SPARK_HOME/conf
⑥启动集群:
$SPARK_HOME/sbin/start-all.sh
注意:
此时,通过观察启动日志,或者检查 hadoop02 上是否包含有 master 进程等都可以得知 hadoop02 上的 master 并不会自动启动,所以需要手动启动 那么在 hadoop02 执行命令进行启动:$SPARK_HOME/sbin/start-master.sh
spark的HA集群搭建
⑦验证集群的高可用:
主节点(active)hadoop01:
spark的HA集群搭建
从节点(standby)hadoop02:
spark的HA集群搭建

2.永久配置spark集群的日志级别:

 我们运行的 spark 程序运行的情况来看,可以看到大量的 INFO 级别的日志信息。淹没了 我们需要运行输出结果。可以通过修改 Spark 配置文件来 Spark 日志级别。
具体步骤
进入:cd $SPARK_HOME/conf
准备log4j.properties:cp log4j.properties.template log4j.properties
配置日志级别:
spark的HA集群搭建
把 INFO 改成你想要的级别:主要有 ERROR, WARN, INFO, DEBUG 几种
重启集群即可。

3.spark的shell的基本使用:

(1)利用 Spark 自带的例子程序执行一个求 PI(蒙特卡洛算法)的程序:

$SPARK_HOME/bin/spark-submit \ 
--class org.apache.spark.examples.SparkPi \ 
--master spark://hadoop02:7077 \ 
--executor-memory 512m \ 
--total-executor-cores 3 \
$SPARK_HOME/examples/jars/spark-examples_2.11-2.3.0.jar \ 
100

(2)启动spark shell

启动local模式:[hadoop@hadoop01 ~]$ spark-shell
启动集群模式:

$SPARK_HOME/bin/spark-shell \ 
--master spark://hadoop02:7077,hadoop04:7077 \  #指定 Master 的地址
--executor-memory 512M \     #指定每个 worker 可用内存为 512M
--total-executor-cores 2        #指定整个集群使用的 cup 核数为 2 个

spark的HA集群搭建
注意
 - 在运行时:executor-memory 不能超过集群的节点的内存。
 - total-executor-cores:不要超过 spark 集群能够提供的总 cpu cores,否则会使用全部。最好不要使用 全部。否则其他程序由于没有 cpu core 可用,就不能正常运行。

(3)解决内存资源不足

如果底层使用的yarn的任务资源管理:
修改yarn-site.xml
加入:

<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    <description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>4</value>
    <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
</property> 

之后在重启yarn即可。

猜你喜欢

转载自blog.51cto.com/14048416/2337711