Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hado

本文介绍了一个Hive数据处理过程中map成功但reduce阶段失败的问题,分析了错误原因并提出了两种解决方案:一是调整字段顺序;二是增加reduce数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在数据合并的时候发现map 成功但是reduce总是失败,

问题简单描述:把每天采集的数据,合并都汇总表中,按天为分区。

如下看到map在执行时均成功:但是在最终的 reduce阶段失败,查找原因:

Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.FSLimitException$PathComponentTooLongException): The maximum path component name limit of query_date=

hive> from log_169_searchd_pro_20141122 insert into table searchd_pro1 PARTITION (query_date)

    > select to_date(query_date),real_time,wall_time,match_mode,filters_count,sort_mode,total_matches,offset,index_name,query;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Estimated from input data size: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Starting Job = job_1417056252041_0024, Tracking URL = http://master:8088/proxy/application_1417056252041_0024/
Kill Command = /opt/cloudera/parcels/CDH-5.2.0-1.cdh5.2.0.p0.36/lib/hadoop/bin/hadoop job  -kill job_1417056252041_0024
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2014-12-02 08:22:48,257 Stage-1 map = 0%,  reduce = 0%
2014-12-02 08:23:10,167 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 17.47 sec
2014-12-02 08:23:24,801 Stage-1 map = 100%,  reduce = 67%, Cumulative CPU 22.34 sec
2014-12-02 08:23:27,935 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 17.47 sec
2014-12-02 08:23:39,476 Stage-1 map = 100%,  reduce = 67%, Cumulative CPU 22.16 sec
2014-12-02 08:23:43,664 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 17.47 sec
2014-12-02 08:23:55,185 Stage-1 map = 100%,  reduce = 67%, Cumulative CPU 22.22 sec
2014-12-02 08:23:58,325 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 17.47 sec
2014-12-02 08:24:09,757 Stage-1 map = 100%,  reduce = 67%, Cumulative CPU 22.25 sec
2014-12-02 08:24:12,887 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 17.47 sec
MapReduce Total cumulative CPU time: 17 seconds 470 msec
Ended Job = job_1417056252041_0024 with errors
Error during job, obtaining debugging information...
Examining task ID: task_1417056252041_0024_m_000000 (and more) from job job_1417056252041_0024


Task with the most failures(4): 
-----
Task ID:
  task_1417056252041_0024_r_000000


URL:
  http://master:8088/taskdetails.jsp?jobid=job_1417056252041_0024&tipid=task_1417056252041_0024_r_000000
-----
Diagnostic Messages for this Task:
Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.FSLimitException$PathComponentTooLongException): The maximum path component name limit of query_date=%2212 位 太阳能 计算器 , 8 位 礼品 计算器 , 语音 计算器 12 位 , 8 位 太阳能 计算器 , 12 位 白色 计算器 , 8 位 数字 计算器 , 8 位 硅胶 计算器 , 8 位 翻盖 计算器 , 8 位 塑胶 计算器 , 12 位 台式 计算器 , 8 位 台式 计算器 , 8 位数 显 计算器%22%2F24 in directory /tmp/hive-hdfs/hive_2014-12-02_08-22-34_112_762235043055488695-1/_task_tmp.-ext-10000 is exceeded: limit=255 length=329
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.verifyMaxComponentLength(FSDirectory.java:1915)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.addChild(FSDirectory.java:1989)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedMkdir(FSDirectory.java:1759)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsRecursively(FSNamesystem.java:4149)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:2625)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2509)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2397)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:550)
        at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.create(AuthorizationProviderProxyClientProtocol.java:108)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create(ClientNamenodeProtocolServerSideTranslatorPB.java:388)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:587)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1026)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2013)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007)


        at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.reduce(ExecReducer.java:283)
        at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:444)
        at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:392)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)

        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)


问题排查定位:从上面看,明显是数据合并阶段超过了最大值,我们这次采集2条记录。

insert into table searchd_pro1 PARTITION (query_date) 
select to_date(query_date),real_time,wall_time,match_mode,filters_count,sort_mode,total_matches,offset,index_name,query from log_170_searchd_pro_20141130 limit 2;

MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 4.75 sec   HDFS Read: 65802 HDFS Write: 261 SUCCESS
Stage-Stage-2: Map: 1  Reduce: 1   Cumulative CPU: 3.45 sec   HDFS Read: 621 HDFS Write: 324 SUCCESS
Total MapReduce CPU Time Spent: 8 seconds 200 msec
OK
Time taken: 71.38 seconds

成功了。查看数据发现:

hive> select *
    >  from searchd_pro1;
OK
NULL    0.05    0.051   NULL    0       NULL    1       (0,4000)        product_distri  "遂宁" "仔猪" "行情"
NULL    0.055   0.055   NULL    0       NULL    0       (0,4000)        product_new_distri      wb 200 f "充电器" "包邮"
Time taken: 0.178 seconds, Fetched: 2 row(s)

有空值null,而且明显数据错误,在合并的过程中日期值,获取的时最后一个字段,有大量的值,明显的数据倾斜。所以会失败。

解决办法:把分区字段放在最后,各个列对应正确的位置。

hive> insert into table searchd_pro PARTITION (query_date)
    > select real_time,wall_time,match_mode,filters_count,sort_mode,total_matches,offset,index_name,query,to_date(query_date) from log_170_searchd_pro_20141130;


另外一种方法:增加足够多的reduce也能成功,不过在这里数据是错误的。所以不是本身reduce不足的问题。

完毕。





### 问题分析 Hive 报错 `FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient` 表明 Hive 在尝试连接到其元存储(Metastore)时失败。此问题通常由以下几个原因引起: 1. **元存储配置不正确**:Hive 默认使用嵌入式 Derby 数据库作为元存储,但在多用户环境中需要切换到 MySQL 或其他外部数据库[^1]。 2. **权限不足**:如果 Hive 使用的是 MySQL 作为元存储,则可能是因为 MySQL 用户权限设置不当导致无法访问数据库[^5]。 3. **依赖类缺失或版本冲突**:某些必要的 JAR 文件未加载或存在版本兼容性问题[^4]。 --- ### 解决方案 #### 方法一:初始化并验证 MySQL 元存储 当使用 MySQL 作为 Hive 的元存储时,需确保已正确完成以下操作: 1. 安装 MySQL 并创建用于 Hive 存储元数据的数据库和用户账户。 ```sql CREATE DATABASE metastore; GRANT ALL PRIVILEGES ON metastore.* TO 'hive_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 2. 修改 Hive 配置文件 `hive-site.xml`,指定 MySQL 连接参数: ```xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive_user</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> </property> ``` 3. 初始化 Metastore 数据库表结构: ```bash schematool -dbType mysql -initSchema ``` 上述步骤完成后重新启动 Hive CLI 或 Beeline 工具测试连接情况[^3]。 #### 方法二:启用本地模式运行 对于小型作业或者调试环境,可以临时通过设置属性让 Hive 切换至本地执行模式来规避分布式环境下可能出现的问题: ```sql SET hive.exec.mode.local.auto=true; ``` 注意该方法仅适用于简单查询场景,在生产环境中应优先排查根本原因而非长期依赖此项调整。 #### 方法三:检查日志与依赖项 - 查看完整的异常堆栈信息定位具体错误位置; - 确认 HadoopHive 版本匹配无误,并且所有必需组件均已部署到位; - 如果怀疑是第三方插件引起的干扰则考虑隔离测试环境排除影响因素。 --- ### 总结说明 以上三种途径分别针对不同层面提供了修复建议——从基础架构搭建指导到高级特性调优均有涉及。实际应用过程中可根据具体情况灵活选用最合适的策略加以应对。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wulantian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值