简介:本资源是一份面向大数据初学者与鲲鹏云平台实践者的Hadoop集群部署实验报告,聚焦华为云环境下基于ARM架构(鲲鹏)的大数据基础设施搭建全流程。报告完整覆盖ECS服务器与OBS对象存储的开通配置、AK/SK密钥获取、多节点(Node0001–Node0003)互信与SSH无密码登录配置、Hadoop 2.8.3源码级安装、core-site.xml等五大核心配置文件的OBS适配修改、Java环境(openjdk-1.8.0)路径纠错与全节点同步、NameNode初始化及HDFS服务启动排错等关键环节,突出云原生大数据平台落地中的典型问题与解决方案。资源为单个2.52MB的DOCX文档,内容结构清晰,含详细命令行操作截图位置提示、配置参数对照说明及分步验证要点,便于边学边练。目前已有893人学习下载,适合高校课程实验、信创实训及Hadoop云上部署入门者系统复现与深度理解。
1. “java_home not found”报错反复出现:鲲鹏云Hadoop集群启动失败的血泪现场
你刚在华为云上配完三节点Hadoop集群,hdfs namenode -format一敲,弹出Error: JAVA_HOME is not set and could not be found.;改完/etc/profile,source 一遍再试,还是这句;分发到 node-0002、node-0003 后,java -version显示正常,hdfs dfs -ls /却又报NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema;最后发现core-site.xml里填的 OBS endpoint 格式不对,连hadoop fs -ls obs://mybucket/都直接卡死——这不是配置漏了,是整个环境链在 silently 崩溃。这类问题在鲲鹏云大数据实验中高频复现:不是代码写错,而是 Java 版本、架构适配、OBS 认证、Hadoop 配置四层嵌套校验全部通过后,才暴露出一个“看似无关”的报错。它专挑你信心最足时翻车,且每次失败原因都不一样。如果你正被“Hadoop 启动不了”“OBS 连不上”“namenode 初始化失败”反复折磨,这篇排错笔记就是为你写的——不讲原理,只拆真实操作路径,每一步都带命令、参数说明和失败回溯点。
2. Java 环境崩塌:鲲鹏云 aarch64 架构下 OpenJDK 的隐藏陷阱
Hadoop 在鲲鹏云上跑不起来,80% 的根因藏在 Java 环境里。但这里不是简单的“没装 JDK”,而是鲲鹏云 ECS 默认镜像(如 openEuler 20.03)预装的 OpenJDK 版本、包名、路径、甚至javax.xml.bind模块的可用性,全和 x86_64 环境不同。你照着 x86 教程改JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk,结果hadoop version直接报错退出——因为鲲鹏云上实际路径是/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64,多了一串h5.oe1.aarch64后缀,这是 openEuler 针对 aarch64 架构的专属包标识。更致命的是,OpenJDK 8u242+ 在 aarch64 上默认不包含jaxb-api,而 Hadoop 2.8.3 的core-site.xml解析逻辑强依赖javax.xml.bind.annotation.XmlSchema类——这就解释了为什么java -version成功,hdfs namenode -format却抛NoClassDefFoundError。
2.1 精确识别鲲鹏云 JDK 实际路径与版本
别信which java或rpm -qa | grep java的模糊输出。鲲鹏云 ECS 的 JDK 路径必须用readlink -f $(which java)确认真实路径,再逐级向上找jre或jdk目录:
# 在 node-0001、node-0002、node-0003 上分别执行 $ readlink -f $(which java) /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64/jre/bin/java $ ls -l /usr/lib/jvm/ total 0 lrwxrwxrwx. 1 root root 48 Apr 12 10:22 java -> java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64 drwxr-xr-x. 1 root root 4096 Apr 12 10:22 java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64提示:
java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64是鲲鹏云 openEuler 镜像的标准 JDK 包名,h5.oe1.aarch64表示 openEuler 20.03 + aarch64 架构专用构建。任何省略该后缀的JAVA_HOME设置都会导致 Hadoop 找不到完整 JDK 树。
2.2 强制注入 JAXB 模块解决NoClassDefFoundError
Hadoop 2.8.3 编译时依赖 JDK 8 的jaxb-api,但鲲鹏云 OpenJDK 8u242+ 已将其移至独立模块。必须手动下载jaxb-api.jar并注入 Hadoop classpath:
# 下载 jaxb-api(注意:必须用 2.3.1 版本,2.4+ 不兼容 JDK 8) $ cd /home/modules/hadoop-2.8.3/share/hadoop/common/lib $ wget https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar # 修改 hadoop-env.sh,显式追加 jaxb-api 到 classpath $ vim /home/modules/hadoop-2.8.3/etc/hadoop/hadoop-env.sh # 在文件末尾添加: export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/home/modules/hadoop-2.8.3/share/hadoop/common/lib/jaxb-api-2.3.1.jar逻辑说明:hadoop-env.sh是 Hadoop 启动时加载的环境脚本,HADOOP_CLASSPATH决定 JVM 加载哪些 jar。此处不修改JAVA_HOME,而是绕过 JDK 自身缺失,用外部 jar 补齐类定义。参数2.3.1是关键——2.3.0 有反序列化漏洞,2.4.0+ 要求 JDK 11+,只有 2.3.1 是 JDK 8 安全兼容的黄金版本。
2.3 全节点统一 JAVA_HOME 并验证生效链
/etc/profile中设置JAVA_HOME必须精确到aarch64后缀目录,且需确保hadoop命令调用时能继承该变量。常见错误是只改了 root 用户 profile,但 Hadoop 启动脚本以hdfs用户运行,或source /etc/profile后未重启 shell:
# 在所有节点执行(node-0001/node-0002/node-0003) $ echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64' >> /etc/profile $ echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile $ source /etc/profile # 验证三重生效: $ echo $JAVA_HOME # 应输出 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64 $ java -version # 应显示 openjdk version "1.8.0_242" $ hadoop version # 必须成功输出 Hadoop 2.8.3,无 NoClassDefFoundError参数说明:>> /etc/profile是追加而非覆盖,避免破坏原有环境;source /etc/profile后必须新开终端或exec bash刷新当前 shell;hadoop version是最终校验点——它会触发完整的 classpath 加载和 XML 解析,比java -version更严格。
3. OBS 认证失效:AK/SK 填错、Endpoint 写错、权限配错的三重门
Hadoop 集群搭好了,hdfs dfs -ls /能通,但一碰obs://就报java.io.IOException: Failed to get credentials from config file或403 Forbidden。这不是网络不通,是 OBS 认证链在 Hadoop 内部彻底断裂。根源在于:Hadoop 2.8.3 对 OBS 的支持依赖hadoop-aws和jets3t两个 jar,而它们对 AK/SK 的读取方式、Endpoint 的拼接规则、以及 IAM 权限粒度,和华为云文档存在隐式差异。你按文档填了obs.cn-north-4.myhuaweicloud.com,但 Hadoop 实际需要的是obs.cn-north-4.myhuaweicloud.com不带协议头,且必须关闭 SSL 验证(否则PKIX path building failed);你把 AK/SK 写进core-site.xml,但 Hadoop 优先读取~/.aws/credentials,而这个文件根本不存在——认证就卡死了。
3.1 core-site.xml 中 OBS 配置的硬性参数规范
core-site.xml是 OBS 认证的唯一入口,但字段名、值格式、顺序都有强约束。以下为鲲鹏云实测有效的最小配置集(删掉所有注释,保留空行):
<configuration> <property> <name>fs.obs.impl</name> <value>org.apache.hadoop.fs.obs.OBSFileSystem</value> </property> <property> <name>fs.AbstractFileSystem.obs.impl</name> <value>org.apache.hadoop.fs.obs.OBS</value> </property> <property> <name>fs.obs.access.key</name> <value>S8RSFKYBTOSPA9YX92XB</value> </property> <property> <name>fs.obs.secret.key</name> <value>gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q</value> </property> <property> <name>fs.obs.endpoint</name> <value>obs.cn-north-4.myhuaweicloud.com</value> </property> <property> <name>fs.obs.ssl.enabled</name> <value>false</value> </property> <property> <name>fs.obs.connection.ssl.enabled</name> <value>false</value> </property> </configuration>逻辑说明:fs.obs.impl和fs.AbstractFileSystem.obs.impl是 Hadoop 2.8.3 识别 OBS 文件系统的双保险,缺一不可;fs.obs.endpoint必须是纯域名,不能加https://或http://,否则内部 URL 拼接失败;fs.obs.ssl.enabled和fs.obs.connection.ssl.enabled必须同时设为false,因为鲲鹏云 OBS 的 SSL 证书链与 Hadoop 内置的jets3tHTTP 客户端不兼容,开启即PKIX path building failed。参数S8RSFKYBTOSPA9YX92XB和gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q来自credentials.csv,必须原样复制,不能有多余空格或换行。
3.2 补全 hadoop-aws 与 jets3t 依赖包
Hadoop 2.8.3 官方 tar 包不含 OBS 支持,必须手动补全hadoop-aws和jets3t。鲲鹏云实测版本组合为:
| Jar 包 | 版本 | 下载命令 | 说明 |
|---|---|---|---|
hadoop-aws-2.8.3.jar | 2.8.3 | wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.8.3/hadoop-aws-2.8.3.jar | 必须与 Hadoop 主版本一致,否则NoSuchMethodError |
aws-java-sdk-1.7.4.jar | 1.7.4 | wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk/1.7.4/aws-java-sdk-1.7.4.jar | 1.11+ 不兼容 Hadoop 2.8.3,1.7.4 是黄金版本 |
jets3t-0.9.4.jar | 0.9.4 | wget https://repo1.maven.org/maven2/net/java/dev/jets3t/jets3t/0.9.4/jets3t-0.9.4.jar | 0.9.3 有 OBS endpoint 解析 bug,0.9.4 修复 |
# 下载并放入 Hadoop lib 目录(所有节点同步) $ cd /home/modules/hadoop-2.8.3/share/hadoop/tools/lib $ wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.8.3/hadoop-aws-2.8.3.jar $ wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk/1.7.4/aws-java-sdk-1.7.4.jar $ wget https://repo1.maven.org/maven2/net/java/dev/jets3t/jets3t/0.9.4/jets3t-0.9.4.jar # 验证是否加载成功(执行后应无报错) $ hadoop classpath | grep -E "(aws|jets3t)"参数说明:hadoop-aws-2.8.3.jar提供 OBSFileSystem 实现;aws-java-sdk-1.7.4.jar是底层 HTTP 客户端;jets3t-0.9.4.jar处理 OBS 的签名算法(华为云 OBS 兼容 S3 签名 v2)。三者版本必须严格匹配,任意一个错位都会导致ClassNotFoundException或SignatureDoesNotMatch。
3.3 OBS 桶权限与 IAM 策略的最小化配置
即使 AK/SK 正确、jar 包齐全,hadoop fs -ls obs://mybucket/仍可能返回403 Forbidden。这是因为华为云 OBS 的桶策略(Bucket Policy)和 IAM 用户权限(Policy)是双层控制。实验要求的最小权限是:
- 桶策略(Bucket Policy):允许
obs:GetObject,obs:ListBucket,obs:PutObject,资源限定为arn:aws:s3:::mybucket/* - IAM 策略(User Policy):附加
OBS FullAccess或自定义策略,包含obs:GetBucketLocation,obs:ListAllMyBuckets
注意:
OBS ReadOnlyAccess策略不包含obs:GetBucketLocation,会导致hadoop fs -ls obs://mybucket/报InvalidBucketName—— 因为 Hadoop 需先调用GetBucketLocation确认桶所在区域,再发起后续请求。
验证命令(在 node-0001 执行):
# 测试 OBS 连通性(不走 Hadoop,直连) $ curl -I -X GET "http://mybucket.obs.cn-north-4.myhuaweicloud.com" \ -H "Authorization: OBS S8RSFKYBTOSPA9YX92XB:xxxxxxxxxx" \ -H "Date: $(date -R)" # 若返回 200 OK,则桶策略和 AK/SK 正确;若 403,则检查桶策略是否允许 GetBucketLocation4. 集群分发与同步:Hadoop 包、配置、环境变量的原子化落地
你以为改完core-site.xml、hadoop-env.sh、/etc/profile就完了?错。Hadoop 集群的“一致性”是幻觉,除非你用原子化方式分发。实验中反复出现“node-0001 能跑,node-0002 报JAVA_HOME not found”的根本原因是:scp分发hadoop-2.8.3.tar.gz后,只在 node-0001 解压并配置,node-0002/node-0003 仍用旧版 JDK 路径;或者slaves文件里写了node-0002,但/etc/hosts里没配120.46.156.37 node-0002,导致start-dfs.sh启动时 SSH 连接超时,后台进程静默退出。这些不是配置错误,是分发过程没闭环。
4.1 基于 rsync 的增量同步方案(防覆盖、保权限)
scp -r会覆盖目标目录,风险极高。rsync可指定排除项、保留权限、增量同步,是生产级分发首选:
# 在 node-0001(主节点)执行,向 node-0002 同步 Hadoop 目录 $ rsync -avz --delete \ --exclude='logs/' \ --exclude='data/' \ --exclude='tmp/' \ /home/modules/hadoop-2.8.3/ \ root@120.46.156.37:/home/modules/hadoop-2.8.3/ # 同步配置文件(只同步 etc/hadoop/ 下的 xml 和 sh) $ rsync -avz --delete \ /home/modules/hadoop-2.8.3/etc/hadoop/ \ root@120.46.156.37:/home/modules/hadoop-2.8.3/etc/hadoop/逻辑说明:-a保留权限、时间戳、符号链接;-v显示详细过程;-z压缩传输;--delete删除目标端多余文件,保证一致性;--exclude排除日志、数据、临时目录,避免污染;/home/modules/hadoop-2.8.3/结尾的/是关键——表示同步目录内容,而非目录本身。参数120.46.156.37是 node-0002 的 IPv4 地址,必须和/etc/hosts中的主机名映射一致。
4.2 slaves 文件与 /etc/hosts 的双向校验表
slaves文件定义工作节点列表,但 Hadoop 启动时会用ssh node-0002连接,而node-0002必须能在/etc/hosts中解析为 IP。二者必须严格对应,否则start-dfs.sh卡在starting namenode, logging to ...后无响应:
| slaves 文件内容 | /etc/hosts 必须存在 | 是否合法 | 错误现象 |
|---|---|---|---|
node-0002 | 120.46.156.37 node-0002 | ✅ | 正常连接 |
120.46.156.37 | 120.46.156.37 node-0002 | ⚠️(不推荐) | SSH 连接慢,超时概率高 |
node-0002 | 120.46.156.37 node0002(少-) | ❌ | ssh: Could not resolve hostname node-0002 |
node-0002 | 无对应行 | ❌ | ssh: connect to host node-0002 port 22: Connection timed out |
验证命令(所有节点执行):
# 检查 slaves 文件是否可解析 $ for host in $(cat /home/modules/hadoop-2.8.3/etc/hadoop/slaves); do ping -c 1 -W 2 $host >/dev/null && echo "$host: OK" || echo "$host: FAIL"; done # 检查 /etc/hosts 是否覆盖所有 slaves $ diff <(sort /home/modules/hadoop-2.8.3/etc/hadoop/slaves) <(awk '{print $2}' /etc/hosts | sort | uniq)4.3 启动脚本的静默失败捕获机制
start-dfs.sh和start-yarn.sh默认不输出子进程错误,失败时只打印starting namenode...就停住。必须重定向日志并检查进程:
# 启动时强制记录日志 $ start-dfs.sh 2>&1 | tee /home/modules/hadoop-2.8.3/logs/start-dfs.log $ start-yarn.sh 2>&1 | tee /home/modules/hadoop-2.8.3/logs/start-yarn.log # 检查关键进程是否存在(所有节点) $ jps | grep -E "(NameNode|DataNode|ResourceManager|NodeManager)" # 正常应输出:12345 NameNode(node-0001)、67890 DataNode(node-0002)、24680 ResourceManager(node-0001) # 若 DataNode 未启动,查日志: $ tail -50 /home/modules/hadoop-2.8.3/logs/hadoop-root-datanode-node-0002.log # 常见错误:`Failed to connect to namenode` → 检查 node-0002 的 /etc/hosts 是否能解析 node-00015. 避坑指南:鲲鹏云 Hadoop 实验中 5 个高频翻车点与后悔药
这些不是理论错误,是我在三轮实验中亲手踩出的血坑,每个都导致至少 2 小时无效调试。列在这里,只为让你跳过我的弯路。
5.1 现象:hdfs namenode -format报java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
原因:hadoop-aws-2.8.3.jar依赖jaxb-api,但鲲鹏云 OpenJDK 8u242+ 默认不包含该模块,且hadoop-env.sh未注入。
解决:下载jaxb-api-2.3.1.jar放入share/hadoop/common/lib/,并在hadoop-env.sh中追加HADOOP_CLASSPATH。后悔药:执行hadoop classpath | grep jaxb,若无输出则必缺此 jar。
5.2 现象:hadoop fs -ls obs://mybucket/返回403 Forbidden,但curl直连 OBS 返回 200
原因:core-site.xml中fs.obs.ssl.enabled设为true,触发PKIX path building failed,Hadoop 用内置证书链校验失败。
解决:将fs.obs.ssl.enabled和fs.obs.connection.ssl.enabled全部设为false。后悔药:在core-site.xml中加<property><name>fs.obs.debug</name><value>true</value></property>,日志会明确打印 SSL handshake error。
5.3 现象:start-dfs.sh启动后,jps查不到DataNode,但node-0002日志为空
原因:slaves文件写了node-0002,但/etc/hosts中node-0002解析为127.0.0.1(本地回环),导致 DataNode 尝试连接本地 namenode 失败。
解决:vim /etc/hosts,确认120.46.156.37 node-0002存在且无重复。后悔药:在 node-0002 执行ssh node-0001,若提示Connection refused,说明/etc/hosts解析错误。
5.4 现象:hadoop fs -put localfile obs://mybucket/上传成功,但hadoop fs -ls obs://mybucket/列不出文件
原因:OBS 桶策略(Bucket Policy)未授权obs:ListBucket,或 IAM 策略未包含obs:GetBucketLocation。
解决:登录 OBS 控制台 → 桶管理 → 桶策略 → 添加"Action": ["obs:ListBucket", "obs:GetBucketLocation"]。后悔药:用curl -I -X GET "http://mybucket.obs.cn-north-4.myhuaweicloud.com"测试,若返回403则桶策略问题;若返回404则桶名或 region 错。
5.5 现象:hadoop version成功,但hdfs dfsadmin -report报Call From node-0001/124.70.110.126 to node-0001:9000 failed on connection exception
原因:core-site.xml中fs.defaultFS配置为hdfs://node-0001:9000,但node-0001在/etc/hosts中解析为127.0.0.1,导致 namenode 绑定到127.0.0.1:9000,外部无法访问。
解决:vim /etc/hosts,将node-0001映射为公网 IP124.70.110.126,并确保hdfs-site.xml中dfs.namenode.rpc-address为node-0001:9000。后悔药:netstat -tuln | grep :9000,若只显示127.0.0.1:9000则必为此错。
6. 快速定位:从报错日志到根因的 4 层剥洋葱法
当hadoop fs -ls obs://mybucket/又挂了,你不需要重看 20 页文档。我用这套四层剥洋葱法,在 15 分钟内定位 90% 的问题。它不依赖经验,只依赖日志里的确定性线索。
6.1 第一层:看报错类型,锁定故障域(5 秒)
所有 Hadoop 报错可归为四类,每类对应唯一排查路径:
| 报错关键词 | 故障域 | 下一步动作 |
|---|---|---|
JAVA_HOME not found/NoClassDefFoundError | Java 环境或依赖缺失 | 跳转第 2 层 |
403 Forbidden/404 Not Found/SignatureDoesNotMatch | OBS 认证或权限 | 跳转第 3 层 |
Connection refused/Timeout/UnknownHostException | 网络或 hosts 解析 | 跳转第 4 层 |
Invalid argument/Permission denied | 文件权限或目录结构 | 检查/home/modules/data/buf等目录是否存在且可写 |
提示:不要被长堆栈吓住。
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema的核心是NoClassDefFoundError,不是XmlSchema——前者是 Java 类加载问题,后者只是缺失类名。
6.2 第二层:Java 类加载链验证(3 分钟)
执行三步命令,输出必须全部成功:
# 1. 检查 JAVA_HOME 是否生效(所有节点) $ echo $JAVA_HOME && java -version # 2. 检查 Hadoop classpath 是否含关键 jar(所有节点) $ hadoop classpath | grep -E "(aws|jets3t|jaxb)" # 3. 检查 Hadoop 是否能加载 OBS FileSystem(node-0001) $ hadoop fs -ls obs://mybucket/ 2>&1 | head -20 # 若报 NoClassDefFoundError,说明第 2 步失败;若报 403,说明进入第 3 层参数说明:hadoop classpath输出是 Hadoop 实际加载的 jar 列表,grep必须命中aws、jets3t、jaxb三个关键词;head -20是为了快速捕获前 20 行错误,避免滚动日志。
6.3 第三层:OBS 认证链穿透测试(5 分钟)
绕过 Hadoop,用最简 HTTP 请求验证 OBS 认证是否真正有效:
# 生成 OBS 签名(使用你的 AK/SK 和桶名) $ export AK="S8RSFKYBTOSPA9YX92XB" $ export SK="gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q" $ export BUCKET="mybucket" $ export DATE=$(date -R) $ export STRING_TO_SIGN="GET\n\n\n${DATE}\n/${BUCKET}/" $ export SIGNATURE=$(echo -en "$STRING_TO_SIGN" | openssl sha1 -hmac "$SK" -binary | base64) # 发起直连请求(替换为你的 region endpoint) $ curl -I -X GET "http://${BUCKET}.obs.cn-north-4.myhuaweicloud.com/" \ -H "Authorization: OBS ${AK}:${SIGNATURE}" \ -H "Date: ${DATE}"若返回200 OK,证明 AK/SK、Endpoint、签名算法全正确,问题在 Hadoop 配置;若返回403,检查桶策略;若返回404,检查桶名或 region 是否匹配obs.cn-north-4.myhuaweicloud.com。
6.4 第四层:网络与解析链快照(2 分钟)
用一张表锁定网络层问题:
| 检查项 | 命令 | 正常输出 | 异常处理 |
|---|---|---|---|
| DNS 解析 | nslookup node-0001 | Name: node-0001 Address: 124.70.110.126 | 改/etc/hosts |
| TCP 连通 | telnet node-0001 9000 | Connected to node-0001 | 检查 namenode 是否启动、防火墙 |
| SSH 互信 | ssh node-0002 'hostname' | node-0002 | 重新执行ssh-copy-id |
| OBS 域名 | ping obs.cn-north-4.myhuaweicloud.com | 64 bytes from obs.cn-north-4.myhuaweicloud.com | 检查 ECS 安全组出方向 |
这张表必须手动生成,不能靠记忆。我曾因telnet node-0001 9000失败,花 40 分钟查 Hadoop 配置,最后发现是安全组没开 9000 端口——这种低级错误,用表一查就破。
从那以后我每次启动集群前,都强制走一遍这四层剥洋葱:先看报错类型定域,再跑三行命令验 Java,接着用 curl 穿透 OBS,最后用四行命令扫网络。它不优雅,但稳定。希望帮到你。
本文还有配套的精品资源,点击获取