分布式集群搭建:https://blog.51cto.com/14048416/2327802
上面试spark普通的分布式集群搭建,存在master节点的单点故障问题。Hadoop2.x开始,已经使用zookeeper解决了单点故障。同样的策略,spark也利用了zookeeper解决了spark集群的单点故障问题。
创新互联建站专注于肃南裕固族自治网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供肃南裕固族自治营销型网站建设,肃南裕固族自治网站制作、肃南裕固族自治网页设计、肃南裕固族自治网站官网定制、小程序定制开发服务,打造肃南裕固族自治网络公司原创品牌,更为您提供肃南裕固族自治网站排名全网营销落地服务。
① 如果已经使用,并启动了spark分布式集群,请手动停止:
$SPARK_HOME/sbin/stop-all.sh
②配置并启动zookeeper集群:https://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集分布式集群的安装:https://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
⑦验证集群的高可用:
主节点(active)hadoop01:
从节点(standby)hadoop02:
我们运行的 spark 程序运行的情况来看,可以看到大量的 INFO 级别的日志信息。淹没了 我们需要运行输出结果。可以通过修改 Spark 配置文件来 Spark 日志级别。
具体步骤:
进入:cd $SPARK_HOME/conf
准备log4j.properties:cp log4j.properties.template log4j.properties
配置日志级别:
把 INFO 改成你想要的级别:主要有 ERROR, WARN, INFO, DEBUG几种
重启集群即可。
$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
启动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 个
注意:
- 在运行时:executor-memory 不能超过集群的节点的内存。
- total-executor-cores:不要超过 spark 集群能够提供的总 cpu cores,否则会使用全部。最好不要使用 全部。否则其他程序由于没有 cpu core 可用,就不能正常运行。
如果底层使用的yarn的任务资源管理:
修改yarn-site.xml:
加入:
yarn.nodemanager.vmem-check-enabled
false
Whether virtual memory limits will be enforced for containers
yarn.nodemanager.vmem-pmem-ratio
4
Ratio between virtual memory to physical memory when setting memory limits for containers
之后在重启yarn即可。