http://www.mycodes.net/soft/9718.htm

/export/server/hive/bin/hive [root@slave1 ma]# su ma [ma@slave1 ~]$ # 切换回普通用户 ma [ma@slave1 ~]$ su - ma 密码: 上一次登录:四 10月 30 22:27:29 CST 2025pts/0 上 [ma@slave1 ~]$ source /etc/profile.d/hive.sh [ma@slave1 ~]$ hive -e "show databases;" SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/export/server/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/export/server/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] which: no hbase in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/export/server/jdk/bin:/export/server/hadoop/bin:/export/server/hadoop/sbin:/export/server/hive/bin:/export/server/jdk/bin:/export/server/hadoop/bin:/export/server/hadoop/sbin:/home/ma/.local/bin:/home/ma/bin:/export/server/jdk/bin:/export/server/hadoop/bin:/export/server/hadoop/sbin:/export/server/hive/bin) SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/export/server/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/export/server/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Hive Session ID = 97b670b1-ca2b-4870-8680-c40ad1d7392a Logging initialized using configuration in jar:file:/export/server/hive/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException: Call From slave1/192.168.81.131 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:651) at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:591) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:747) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:318) at org.apache.hadoop.util.RunJar.main(RunJar.java:232) Caused by: java.net.ConnectException: Call From slave1/192.168.81.131 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:831) at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:755) at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1549) at org.apache.hadoop.ipc.Client.call(Client.java:1491) at org.apache.hadoop.ipc.Client.call(Client.java:1388) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:233) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:118) at com.sun.proxy.$Proxy28.getFileInfo(Unknown Source) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:904) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:422) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:165) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:157) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:95) at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:359) at com.sun.proxy.$Proxy29.getFileInfo(Unknown Source) at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1661) at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1577) at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1574) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1589) at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1683) at org.apache.hadoop.hive.ql.exec.Utilities.ensurePathIsWritable(Utilities.java:4486) at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:760) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:701) at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:627) ... 9 more Caused by: java.net.ConnectException: 拒绝连接 at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206) at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531) at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:700) at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:804) at org.apache.hadoop.ipc.Client$Connection.access$3800(Client.java:421) at org.apache.hadoop.ipc.Client.getConnection(Client.java:1606) at org.apache.hadoop.ipc.Client.call(Client.java:1435) ... 34 more [ma@slave1 ~]$
最新发布
10-31
```markdown 你遇到的错误非常关键: ``` Caused by: java.net.ConnectException: Call From slave1/192.168.81.131 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒绝连接 ``` 说明:**Hive 客户端尝试连接 `localhost:9000` 的 HDFS NameNode,但失败了!** --- ## 🔍 根本原因分析 虽然你的 Hive 配置正确指向了远程 Metastore(`thrift://192.168.81.130:9083`),但在启动时,Hive 还需要访问 **HDFS 文件系统** 来创建会话目录(如 `/tmp/hive`、`/user/hive/warehouse`)。 而它试图连接的是: > `localhost:9000` 这显然是 **slave1 本地** 的地址,而不是 master 上真正的 NameNode! 这意味着: ❌ **Hadoop 的核心配置 `core-site.xml` 没有被正确加载或不存在于 slave1 节点上。** --- ## ✅ 正确的 HDFS 地址应该是: ```bash hdfs://192.168.81.130:9000 ``` 即 master 节点的 NameNode 地址。 --- ## 🛠️ 解决方案:确保 `slave1` 上的 Hadoop 配置完整,并包含正确的 `core-site.xml` ### ✅ 第一步:确认 `/export/server/hadoop/etc/hadoop/core-site.xml` 存在且内容正确 你需要将 master 上的 `core-site.xml` 复制到 `slave1` 的相同路径下。 #### 在 master 上检查文件内容: ```bash # 在 master 上执行 cat /export/server/hadoop/etc/hadoop/core-site.xml ``` 应包含如下内容: ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.81.130:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/export/server/hadoop/tmp</value> </property> </configuration> ``` > 如果没有这个文件,请立即创建! --- ### ✅ 第二步:把 `core-site.xml` 和 `hdfs-site.xml` 推送到 `slave1` #### 在 master 上执行(假设你现在能回到 master): ```bash # 创建临时目录保存配置 mkdir -p /tmp/hadoop-conf # 复制两个关键配置文件 cp /export/server/hadoop/etc/hadoop/core-site.xml /tmp/hadoop-conf/ cp /export/server/hadoop/etc/hadoop/hdfs-site.xml /tmp/hadoop-conf/ # 推送到 slave1 scp /tmp/hadoop-conf/*.xml ma@192.168.81.131:/export/server/hadoop/etc/hadoop/ ``` 📌 注意:必须保证 `slave1` 上也有这些配置文件,否则 `hadoop fs` 或 Hive 会默认连接 `localhost`。 --- ### ✅ 第三步:在 `slave1` 上验证配置是否生效 登录 `slave1` 后执行: ```bash # 查看是否收到 core-site.xml cat /export/server/hadoop/etc/hadoop/core-site.xml | grep "fs.defaultFS" ``` 输出应为: ```xml <value>hdfs://192.168.81.130:9000</value> ``` --- ### ✅ 第四步:测试 HDFS 连通性 ```bash # 测试能否列出根目录(此时不需要启动 DataNode,只要 NameNode 可达即可) hadoop fs -ls / ``` 🎯 成功标志:返回 `/` 目录下的内容(如 `/user`, `/tmp` 等) 🚫 若仍报错 `Connection refused`,请检查以下几点: --- ## 🔍 必须检查项(master 上操作) ### 1. Master 上的 NameNode 是否已启动? ```bash # 在 master 上执行 jps | grep NameNode ``` ✅ 应看到:`XXXXX NameNode` ❌ 如果没有,启动 HDFS: ```bash /export/server/hadoop/sbin/start-dfs.sh ``` --- ### 2. NameNode 是否监听 9000 端口? ```bash # 在 master 上执行 netstat -anlp | grep :9000 ``` ✅ 应看到 `LISTEN` 状态 如果没开,检查 `core-site.xml` 中的 `fs.defaultFS` 是否是 `9000`,以及防火墙。 --- ### 3. 防火墙是否关闭?(重要!) ```bash # 在 master 上执行 systemctl stop firewalld setenforce 0 ``` 或者放行端口: ```bash firewall-cmd --permanent --add-port=9000/tcp firewall-cmd --reload ``` --- ### 4. `/etc/hosts` 是否正确映射? 所有节点(包括 slave1)都应有: ```bash # 编辑 hosts sudo vim /etc/hosts ``` 添加: ``` 192.168.81.130 master 192.168.81.131 slave1 192.168.81.132 slave2 192.168.81.133 slave3 ``` 避免 DNS 解析问题导致 `master` 解析失败。 --- ## ✅ 最终验证流程 完成上述修复后,在 `slave1` 上以 `ma` 用户执行: ```bash # 加载环境变量 source /etc/profile.d/hive.sh # 测试 HDFS 是否可达 hadoop fs -ls / # 再次运行 hive hive -e "show databases;" ``` 🎯 预期结果:成功显示数据库列表,不再报 `localhost:9000` 错误。 --- ## ✅ 总结:你现在缺什么? | 缺失项 | 解决方法 | |-------|----------| | `core-site.xml` 未同步到 slave1 | 从 master 复制该文件到 `/export/server/hadoop/etc/hadoop/` | | NameNode 未启动或未监听 9000 | 在 master 执行 `start-dfs.sh` | | 防火墙阻止 9000 端口 | 关闭防火墙或开放端口 | | `/etc/hosts` 未配置主机名解析 | 添加 master 和 slave 的 IP 映射 | --- 💡 提示:Hive 不只是连 Metastore,还会访问 HDFS。所以 **每个客户端节点都要有完整的 Hadoop 配置文件(至少 `core-site.xml` 和 `hdfs-site.xml`)**。 一旦配置完成,`slave2` 和 `slave3` 也照此处理即可。 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值