IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark 启动集群 Master 正常启动 Worker 不启动 -> 正文阅读

[大数据]Spark 启动集群 Master 正常启动 Worker 不启动

在学习spark过程中遇到的问题,做下记录,这个问题网上出现的不再少数,出现问题的原因也是各不相同,并且没有一个人的问题和我完全一样(我高兴得都快哭了),顺着大家的思路,尝试了两个多小时才搞明白。

问题的根源大多都在于 hostname 的配置与映射

环境前置说明(三台虚拟机模拟):

  • 系统:CentOS Linux release 7.5.1804 (Core)
  • host
    • hadoop102 192.168.20.102 Master Worker
    • hadoop103 192.168.20.103 Worker
    • hadoop104 192.168.20.104 Worker
  • jdk1.8
  • spark-3.0.0-bin-hadoop3.2 - standalone 集群
    ?
    sbin/start-all.sh 后,输入 jps 查看进程,并没有问题,都有worker进程在里面(事实上过了一段时间后再看,slave节点的worker进程也都关闭了)
[root@hadoop102 spark-standalone]# jpsall
=============== hadoop102 ===============
2273 Worker
2363 Jps
2206 Master
=============== hadoop103 ===============
1768 Worker
1864 Jps
=============== hadoop104 ===============
1765 Worker
1870 Jps

# 过一段时间后再查看
[root@hadoop102 spark-standalone]# jpsall
=============== hadoop102 ===============
2930 Master
2995 Worker
3286 Jps
=============== hadoop103 ===============
3211 Jps
=============== hadoop104 ===============
3194 Jps

但是打开 8080 web界面却只能看到一个worker,如图,根据 Address 也可以看到这是master主机上的worker
在这里插入图片描述

到slave1,slave2主机上查看worker的启动日志,日志位于$SPARK_HOME/logs,日志非常长,但有用的就这一句

Failed to connect to master hadoop102:7077

首先,确认是不是Master的7077端口能否连接呢?下载nmap工具(yum install nmap),在Slave主机用如下命令测试:

[root@hadoop103 logs]# nmap -p 7077 hadoop102

Starting Nmap 6.40 ( http://nmap.org ) at 2021-08-08 09:58 CST
Nmap scan report for hadoop102 (192.168.20.102)
Host is up (0.0011s latency).
PORT     STATE  SERVICE
7077/tcp closed unknown
MAC Address: 00:0C:29:93:10:89 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
You have new mail in /var/spool/mail/root

[root@hadoop103 ~]# nmap -p 8080 hadoop102

Starting Nmap 6.40 ( http://nmap.org ) at 2021-08-08 10:20 CST
Nmap scan report for hadoop102 (192.168.20.102)
Host is up (0.0028s latency).
PORT     STATE SERVICE
8080/tcp open  http-proxy
MAC Address: 00:0C:29:93:10:89 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

7077不能连接,8080能连接,我确认hadoop102的防火墙已关闭,于是考虑是否7077端口未开放?在Master主机输入 netstat -ntlp

[root@hadoop102 spark-standalone]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      662/rpcbind         
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1271/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      905/sshd            
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      903/cupsd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1098/master         
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      1637/sshd: root@pts 
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      1685/sshd: root@pts 
tcp6       0      0 127.0.0.1:7077          :::*                    LISTEN      2930/java           
tcp6       0      0 192.168.20.102:32812    :::*                    LISTEN      2995/java           
tcp6       0      0 :::111                  :::*                    LISTEN      662/rpcbind         
tcp6       0      0 :::8080                 :::*                    LISTEN      2930/java           
tcp6       0      0 :::8081                 :::*                    LISTEN      2995/java           
tcp6       0      0 :::22                   :::*                    LISTEN      905/sshd            
tcp6       0      0 ::1:631                 :::*                    LISTEN      903/cupsd           
tcp6       0      0 ::1:6010                :::*                    LISTEN      1637/sshd: root@pts 
tcp6       0      0 ::1:6011                :::*                    LISTEN      1685/sshd: root@pts 

发现 7077 和 8080 端口的 ip 部分不同,现在只需要去找 127.0.0.1:7077 这个玩意是怎么出来的?

具体原因暂时没时间去深究,猜测在 127.0.0.1 上端口只对本机开发(参考 https://blog.csdn.net/xifeijian/article/details/12879395

查看 sbin/start-all.sh 脚本

[root@hadoop102 spark-standalone]# cat sbin/start-all.sh 
#!/usr/bin/env bash
# Starts a worker on each node specified in conf/slaves

if [ -z "${SPARK_HOME}" ]; then
  export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi

# Load the Spark configuration
. "${SPARK_HOME}/sbin/spark-config.sh"

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

# Start Workers
"${SPARK_HOME}/sbin"/start-slaves.sh

继续看 start-slaves.sh 脚本

[root@hadoop102 spark-standalone]# cat sbin/start-slaves.sh 
#!/usr/bin/env bash
# Starts a slave instance on each machine specified in the conf/slaves file.

if [ -z "${SPARK_HOME}" ]; then
  export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi

. "${SPARK_HOME}/sbin/spark-config.sh"
. "${SPARK_HOME}/bin/load-spark-env.sh"

# Find the port number for the master
if [ "$SPARK_MASTER_PORT" = "" ]; then
  SPARK_MASTER_PORT=7077
fi

if [ "$SPARK_MASTER_HOST" = "" ]; then
  case `uname` in
      (SunOS)
	  SPARK_MASTER_HOST="`/usr/sbin/check-hostname | awk '{print $NF}'`"
	  ;;
      (*)
	  SPARK_MASTER_HOST="`hostname -f`"
	  ;;
  esac
fi

# Launch the slaves
"${SPARK_HOME}/sbin/slaves.sh" cd "${SPARK_HOME}" \; "${SPARK_HOME}/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"

重点看最后一行中

"${SPARK_HOME}/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"

SPARK_MASTER_HOST,SPARK_MASTER_PORT,这两个值在 con/spark-env.sh 进行了配置(如果没有自己配置,就是前两个 if 中所赋的默认值,检查本机的 hostsname 配置是否有问题 https://www.lmlphp.com/user/552/article/item/371036

[root@hadoop102 spark-standalone]# cat conf/spark-env.sh 
#!/usr/bin/env bash

export JAVA_HOME=/opt/module/jdk1.8.0_212
SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077

hadoop102 在 etc/hosts 做了映射

[root@hadoop102 spark-standalone]# cat /etc/hosts127.0.0.1   localhost hadoop102:1         localhost192.168.20.100 hadoop100192.168.20.101 hadoop101192.168.20.103 hadoop103192.168.20.104 hadoop104192.168.20.105 hadoop105192.168.20.106 hadoop106192.168.20.107 hadoop107192.168.20.108 hadoop108

于是破案了。。。在之前测试 spark-local 模式时,因为一个 bug,把 hadoop102 指向了 127.0.0.1 ,忘记改回来了。

两个解决办法,要么 etc/hosts 把 hadoop102 指向局域网 ip 192.168.20.102,要么 spark-env.sh 把 SPARK_MASTER_HOST 指向局域网 ip 192.168.20.102,改过来后,一切正常
在这里插入图片描述
本次问题根本原因:由于个人原因不得不在对于 linux 和 shell 等基础知识并不熟悉的情况下去学习Spark框架引发的问题,急于求成,适得其反

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:18:18  更:2021-08-09 10:20:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:51:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码