hive日常报错 | 处理步骤

文章讲述了在使用Hive进行基本查询时遇到连接错误,通过检查Hive日志发现是由于HDFS的Namenode处于安全模式。作者详细介绍了如何查看日志、确认安全模式状态并关闭它以解决问题的过程。

报错

首先,hive最基本的查询语句运行报错了:

Caused by: java.net.ConnectException: Your endpoint configuration is wrong; For more details see:  http://wiki.apache.org/hadoop/UnsetHostnameOrPort
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)


Caused by: java.net.ConnectException: 拒绝连接
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)

我们从hive客户端不能很明确知道错误,这时候就需要就行拍错的额一些步骤了

查看hive日志

cd /tmp/用户/

tail -n 500 hive.log
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot delete /tmp/hive/atguigu/4645f531-0c99-42fa-8520-192d76be4737/hive_2023-12-09_16-46-34_881_5043639689008337438-1. Name node is in safe mode.
Resources are low on NN. Please add or free up more resourcesthen turn off safe mode manually. NOTE:  If you turn off safe mode before adding resources, the NN will immediately return to safe mode. Use "hdfs dfsadmin -safemode leave" to turn safe mode off. NamenodeHostName:hadoop102

这时候我们知道hdfs处于安全模式

关闭安全模式

查看当前安全模式状态

hdfs dfsadmin -safemode get

果然处于开启状态

关闭安全模式

### 三级标题:Hive 建表报错 `missing EOF at 'USING' near ')'` 的原因分析及解决方法 在 Hive 中执行建表语句时,出现如下错误: ``` Error while compiling statement: FAILED: ParseException line 28:1 missing EOF at 'USING' near ')' ``` 该错误通常表明 SQL 语句在语法结构上存在问题,特别是在使用某些存储格式或文件格式定义时,Hive 编译器无法正确识别语句结尾,导致解析失败。 #### 常见原因 1. **建表语句中 `USING` 子句使用不当** Hive 在较新版本中引入了类似 Spark SQL 的 `USING` 语法用于指定数据源,但在某些版本(如 Hive 1.x)中并不支持该语法。如果在不支持的环境中使用 `USING` 关键字,Hive 编译器会将其识别为非法关键字,从而抛出 `missing EOF at 'USING'` 错误[^1]。 示例错误语句: ```sql CREATE TABLE test_table ( id INT, name STRING ) USING PARQUET; ``` 2. **建表语句中 `ROW FORMAT` 或 `STORED AS` 缺失或格式错误** 如果建表语句中缺少 `ROW FORMAT` 或 `STORED AS` 子句,或者这些子句的语法书写不正确,也可能导致 Hive 编译器在解析时提前结束,从而报出 `missing EOF` 错误。 3. **括号不匹配或关键字拼写错误** 建表语句中存在未闭合的括号、关键字拼写错误(如 `PARQUET` 写成 `PARQUES`)等情况,也会导致语法解析失败,进而触发此类错误。 #### 解决方法 1. **避免在不支持的 Hive 版本中使用 `USING` 语法** 如果使用的是 Hive 1.x 或 2.x 系列,应避免使用 `USING` 语法,改用 `STORED AS` 来指定文件格式。例如: ```sql CREATE TABLE test_table ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS PARQUET; ``` 2. **检查建表语句的语法完整性** 确保 `ROW FORMAT`、`STORED AS` 等子句正确书写,并且所有括号闭合。例如: ```sql CREATE TABLE logs ( user_id STRING, event STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE; ``` 3. **升级 Hive 版本以支持 `USING` 语法** 如果确实需要使用 `USING` 语法,建议升级到 Hive 3.x 或使用兼容的 Hive on Spark 环境,以确保语法兼容性。 4. **使用 HiveQL 语法校验工具进行检查** 可以使用 Hive 的语法校验工具或 IDE 插件(如 DBeaver、Zeppelin)提前检测建表语句的语法问题,避免运行时错误。 #### 示例修复 原始错误语句: ```sql CREATE TABLE user_data ( id INT, info STRING ) USING ORC; ``` 修复后语句(适用于 Hive 2.x): ```sql CREATE TABLE user_data ( id INT, info STRING ) STORED AS ORC; ``` ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值