Caused by: org.apache.thrift.TApplicationException: Required field ‘filesAdded‘ is unset

这篇博客主要讨论了在使用Hive时遇到的错误,即'Required field 'filesAdded' is unset!'。错误出现在尝试插入数据到Hive表时,提示InsertEventRequestData的filesAdded字段未设置。解决方案是将hive-site.xml配置文件中的'hive.metadata.dml.events'参数改为false,如果是Hive3,则需修改'hive.metastore.dml.events'参数。该问题涉及到Hive的元数据操作和Thrift通信异常。

hive报错Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.thrift.TApplicationException: Required field ‘filesAdded’ is unset! Struct:InsertEventRequestData(filesAdded:null)
这个需要更改hive-site.xml里的hive.metadata.dml.events为false,hive3请修改hive.metastore.dml.events参数

完整报错如下:

java.lang.reflect.InvocationTargetException: null

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 com.act.datasmart.job.JobExecutor.runOutputVertex(JobExecutor.java:813)

at com.act.datasmart.job.JobExecutor.runVertexJob(JobExecutor.java:210)

at com.act.datasmart.job.JobExecutor.runOrdinary(JobExecutor.java:335)

at com.act.datasmart.job.JobExecutor.excute(JobExecutor.java:519)

at com.act.datasmart.job.JobExecutor.excute(JobExecutor.java:511)

at com.act.datasmart.job.JobExecutor.main(JobExecutor.java:916)

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.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:732)

Caused by: org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.thrift.TApplicationException: Required field 'filesAdded' is unset! Struct:InsertEventRequestData(filesAdded:null)

at org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCatalog.scala:112)

at org.apache.spark.sql.hive.HiveExternalCatalog.loadPartition(HiveExternalCatalog.scala:893)

at org.apache.spark.sql.catalyst.catalog.ExternalCatalogWithListener.loadPartition(ExternalCatalogWithListener.scala:179)

at org.apache.spark.sql.hive.execution.InsertIntoHiveTable.processInsert(InsertIntoHiveTable.scala:334)

at org.apache.spark.sql.hive.execution.InsertIntoHiveTable.run(InsertIntoHiveTable.scala:104)

at org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult$lzycompute(commands.scala:108)

at org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult(commands.scala:106)

at org.apache.spark.sql.execution.command.DataWritingCommandExec.executeCollect(commands.scala:120)

at org.apache.spark.sql.Dataset.$anonfun$logicalPlan$1(Dataset.scala:228)

at org.apache.spark.sql.Dataset.$anonfun$withAction$1(Dataset.scala:3687)

at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$5(SQLExecution.scala:103)

at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:163)

at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:90)

at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775)

at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:64)

at org.apache.spark.sql.Dataset.withAction(Dataset.scala:3685)

at org.apache.spark.sql.Dataset.<init>(Dataset.scala:228)

at org.apache.spark.sql.Dataset$.$anonfun$ofRows$2(Dataset.scala:99)

at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775)

at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:96)

at org.apache.spark.sql.SparkSession.$anonfun$sql$1(SparkSession.scala:618)

at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775)

at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:613)

at com.act.datasmart.operators.TableWriterOperator.writedata2hive(TableWriterOperator.java:297)

at com.act.datasmart.operators.TableWriterOperator.action(TableWriterOperator.java:134)

... 15 common frames omitted

Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.thrift.TApplicationException: Required field 'filesAdded' is unset! Struct:InsertEventRequestData(filesAdded:null)

at org.apache.hadoop.hive.ql.metadata.Hive.fireInsertEvent(Hive.java:2376)

at org.apache.hadoop.hive.ql.metadata.Hive.loadPartition(Hive.java:1665)

at org.apache.hadoop.hive.ql.metadata.Hive.loadPartition(Hive.java:1579)

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.spark.sql.hive.client.Shim_v2_1.loadPartition(HiveShim.scala:1259)

at org.apache.spark.sql.hive.client.HiveClientImpl.$anonfun$loadPartition$1(HiveClientImpl.scala:877)

at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)

at org.apache.spark.sql.hive.client.HiveClientImpl.$anonfun$withHiveState$1(HiveClientImpl.scala:291)

at org.apache.spark.sql.hive.client.HiveClientImpl.liftedTree1$1(HiveClientImpl.scala:224)

at org.apache.spark.sql.hive.client.HiveClientImpl.retryLocked(HiveClientImpl.scala:223)

at org.apache.spark.sql.hive.client.HiveClientImpl.withHiveState(HiveClientImpl.scala:273)

at org.apache.spark.sql.hive.client.HiveClientImpl.loadPartition(HiveClientImpl.scala:867)

at org.apache.spark.sql.hive.HiveExternalCatalog.$anonfun$loadPartition$1(HiveExternalCatalog.scala:914)

at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)

at org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCatalog.scala:102)

... 39 common frames omitted

Caused by: org.apache.thrift.TApplicationException: Required field 'filesAdded' is unset! Struct:InsertEventRequestData(filesAdded:null)

at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:79)

at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.recv_fire_listener_event(ThriftHiveMetastore.java:4977)

at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.fire_listener_event(ThriftHiveMetastore.java:4964)

at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.fireListenerEvent(HiveMetaStoreClient.java:2305)

at sun.reflect.GeneratedMethodAccessor134.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:173)

at com.sun.proxy.$Proxy40.fireListenerEvent(Unknown Source)

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.hive.metastore.HiveMetaStoreClient$SynchronizedHandler.invoke(HiveMetaStoreClient.java:2336)

at com.sun.proxy.$Proxy40.fireListenerEvent(Unknown Source)

at org.apache.hadoop.hive.ql.metadata.Hive.fireInsertEvent(Hive.java:2374)

... 56 common frames omitted
<think>我们正在处理一个Hive Metastore相关的错误。错误信息是: "Caused by: org.apache.thrift.TApplicationException: Internal error processing get_current_notificationEventId" 这个错误发生在Thrift RPC调用过程中,具体是在处理`get_current_notificationEventId`方法时出现了内部错误。 ### 分析 1. **错误类型**:`TApplicationException`是Thrift框架中的异常,表示在客户端调用服务端方法时,服务端处理过程中发生了内部错误(即服务端代码抛出了未捕获的异常或错误状态)。 2. **具体方法**:`get_current_notificationEventId`是Hive Metastore API中的一个方法,用于获取当前通知事件ID(用于监听元数据变更事件)。 3. **可能原因**: - **服务端问题**:Hive Metastore服务端在处理该方法时遇到了内部错误,如数据库连接问题、数据不一致、空指针异常等。 - **数据库问题**:如果Metastore的后端数据库(如MySQL)无法访问或查询失败,可能导致此错误。 - **资源问题**:服务端资源不足(如内存溢出、线程阻塞)导致无法正常处理请求。 - **版本不兼容**:客户端和服务端的Thrift接口版本不匹配。 - **数据损坏**:通知事件日志表(如`NOTIFICATION_LOG`)中的数据损坏或状态异常。 ### 解决步骤 1. **检查Metastore服务状态**:确保Metastore服务正在运行且健康。 2. **查看服务端日志**:在Metastore服务端日志中查找更详细的错误信息(通常在`/var/log/hive/hive-metastore.log`)。搜索关键词“get_current_notificationEventId”或“TApplicationException”。 3. **验证数据库连接和状态**:如果Metastore使用关系型数据库,检查数据库是否可访问,以及相关表(如`NOTIFICATION_LOG`)是否存在且无损坏。 4. **重启服务**:尝试重启Metastore服务以解决临时状态问题。 5. **检查版本兼容性**:确保客户端和服务端的Hive版本一致,避免Thrift接口不匹配。 6. **监控资源使用**:检查服务端的内存和CPU使用情况,排除资源瓶颈。 ### 示例日志片段 在服务端日志中,可能会发现类似以下信息: ``` ERROR [Thread-35]: thrift.ProcessFunction (ProcessFunction.java:process(35)) - Internal error processing get_current_notificationEventId java.lang.NullPointerException: null at org.apache.hadoop.hive.metastore.NotificationEventPoll.getCurrentNotificationEventId(NotificationEventPoll.java:123) ... ``` 这可以帮助定位具体问题。 §§相关问题§§ 1. 如何从Hive Metastore服务端日志中定位`TApplicationException`的具体原因? 2.Hive Metastore中,`get_current_notificationEventId`方法失败会对哪些操作产生影响? 3. 如何修复Hive Metastore后端数据库(如MySQL)中的`NOTIFICATION_LOG`表损坏问题? 4. 有哪些常见的Thrift接口兼容性问题,以及如何确保Hive客户端和服务端版本兼容? 5. 当Metastore服务端资源不足时,有哪些配置参数可以优化以避免此类错误?</think>### 回答 您提供的错误信息 "Caused by: org.apache.thrift.TApplicationException: Internal error processing get_current_notificationEventId" 是 Apache Hive Metastore 中典型的 Thrift RPC 调用异常。以下是详细分析: - **错误本质**: - `org.apache.thrift.TApplicationException` 表示 Thrift 框架(Hive Metastore 的通信基础)在远程过程调用(RPC)时遇到服务端内部错误。 - `get_current_notificationEventId` 是 Hive Metastore API 的关键方法,用于获取元数据变更事件的最新 ID(如表结构修改)。此方法失败会导致事件监听、ACID 事务和数据同步功能中断。 - **根本原因**: 1. **服务端处理异常**:Metastore 服务端处理该方法时发生未捕获异常(如空指针、数据库连接失败或数据不一致)。 2. **元数据损坏**:后端数据库(如 MySQL)中的事件日志表(`NOTIFICATION_LOG`)存在损坏记录或状态异常。 3. **版本不兼容**:客户端与服务端的 Thrift 接口定义(IDL)版本不一致。 4. **资源瓶颈**:Metastore 服务内存不足或线程阻塞导致处理超时。 5. **配置错误**:`hive-site.xml` 中事件轮询参数(如 `hive.metastore.event.db.listener.timetolive`)设置不当。 - **解决方案**: 1. **检查 Metastore 日志**:在服务端日志(如 `/var/log/hive/hive-metastore.log`)中搜索 "get_current_notificationEventId",定位具体堆栈错误。 2. **验证数据库健康**: - 检查 Metastore 数据库连接(如 `mysql -u hive -p -h <host>`) - 执行 `SELECT MAX(EVENT_ID) FROM NOTIFICATION_LOG` 验证事件表状态 3. **重启与清理**: ```bash # 重启 Metastore 服务 sudo systemctl restart hive-metastore # 清理事件积压(谨慎操作) hive --service metatool -listFSRoot ``` 4. **调整配置**:在 `hive-site.xml` 增加超时和重试参数: ```xml <property> <name>hive.metastore.client.socket.timeout</name> <value>600</value> <!-- 单位:秒 --> </property> <property> <name>hive.metastore.client.connect.retry.delay</name> <value>5</value> <!-- 重试间隔 --> </property> ``` 5. **版本对齐**:确保所有节点的 Hive 版本一致(使用 `hive --version` 校验)。 若问题持续,建议在测试环境重现并检查 JVM 内存 dump(使用 `jmap`)。对于生产环境,优先回滚到稳定版本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值