spark HA遇到的坑

java面试题网站:www.javaoffers.com
集群的结构:
node1   Master   zk
node2   Master   zk
node3    Worker
node4   Worker
node5   Worker

本人在搭建HA步骤如下(这里的JDK,ZK 安装省略,只说sparkHA 安装)
安装配置Spark,修改Spark配置文件(两个配置文件spark-env.sh和slaves)
vim spark-env.sh 内容如下:

#指定JAVA_HOME位置
export JAVA_HOME=/usr/java/jdk1.7.0_45
#指定spark老大Master的IP 如果是HA则不需要配置
#export SPARK_MASTER_IP=spark1.itcast.cn
#指定spark老大Master的端口
export SPARK_MASTER_PORT=7077
#指定可用的CPU内核数量(默认:所有可用)
export SPARK_WORKER_CORES=2
#作业可使用的内存容量,默认格式为1000m或者2g(默认:所有RAM去掉给操作系统用的1GB)
export SPARK_WORKER_MEMORY=2g
#配置HA ,依赖ZK
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=1=node1:2181,node2:2181 -Dspark.deploy.zookeeper.dir=/spark"

vi在slaves文件中加入所有Work的地址

node3
node4
node5

修改完成后拷贝到其他节点,在我拷贝完毕后开始执行启动脚本 start-all.sh 发现所有Worker都链接不到Master,查看worker的日志发现他们都把自己当成了master,自己链接自己最后肯定会失败,然后我怀疑zk上的数据是错误的,并连上zk查看 get /spark/master_status 果然是错误的,显示的结果是localhost/172.0.0.1,这导致所有work在zk上读取 ‘localhost’ 然后开始进行master链接,最后导致了worker 错把自己当作master进行链接。

解决方案:
查看了 start-all.sh的脚本发现一行开启master shell命令:

# Start Master
"${SPARK_HOME}/sbin"/start-master.sh $TACHYON_STR

紧接着查看start-master.sh

if [ "$SPARK_MASTER_IP" = "" ]; then
  SPARK_MASTER_IP=`hostname`
fi

这行代码的意思是如果 spark参数 SPARK_MASTER_IP 没有写,则默认取 hostname命令执行后的结果,因此我在命令行执行了一下 hostname 发现输出结果为 localhost, 因此导致zk上的/spark/master_status为localhost, 问题已经找到。

最后解决:改变hostname 的值,很简单,在命令行输入: hostname node1 ,然后在 node2上也执行一下 hostname node2 , 确保node1,node2 执行 hostname命令时 不会输出localhost, 然后重启一下 start-all.sh , 一切正常了。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值