【问题标题】:hive multi table join with same condition error具有相同条件错误的 Hive 多表连接
【发布时间】:2017-02-10 22:06:15
【问题描述】:

我正在运行几个脚本,但我不断收到同样的错误。它们都是具有相同条件的多表连接。

数据存储为镶木地板。

Hive 版本 1.2.1 / MR

SELECT count(*) 
FROM   xxx.tmp_usr_1 m
INNER JOIN xxx.tmp_usr n
ON m.date_id = n.date_id AND m.end_user_id = n.end_user_id
LEFT JOIN xxx.usr_2 p
ON m.date_id = p.date_id AND m.end_user_id = p.end_user_id;

这里是错误信息:

2017-01-22 16:47:55,208 Stage-1 map = 54%,reduce = 0%,Cumulative CPU 560.81 sec 2017-01-22 16:47:56,248 第 1 阶段地图 = 58%,减少 = 0%,累积 CPU 577.74 秒 2017-01-22 16:47:57,290 第 1 阶段地图 = 100%,减少 = 100%,累积 CPU 446.32 秒 MapReduce Total cumulative CPU time: 7 minutes 26 seconds 320 msec Ended Job = job_1484710871657_6350 with errors Error during job, obtaining debugging information... Examining task ID: task_1484710871657_6350_m_000061 (and more) from job job_1484710871657_6350 Examining task ID: task_1484710871657_6350_m_000069 (and more) from job job_1484710871657_6350 Examining task ID: task_1484710871657_6350_m_000053 (and more) from job job_1484710871657_6350 Examining task ID: task_1484710871657_6350_m_000011 (and more) from job job_1484710871657_6350 Examining task ID: task_1484710871657_6350_m_000063 (and more) from job job_1484710871657_6350 Examining task ID: task_1484710871657_6350_m_000049 (and more) from job job_1484710871657_6350 Examining任务 ID:task_1484710871657_6350_m_000052(以及更多)来自作业 job_1484710871657_6350 失败次数最多的任务(4): -----任务ID:task_1484710871657_6350_m_000071 网址:http://xxxxxxxxxx/taskdetails.jsp?jobid=job_1484710871657_6350&tipid=task_1484710871657_6350_m_000071 ----- 此任务的诊断消息:错误:java.io.IOException: java.lang.reflect.InvocationTargetException 在 org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97) 在 org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57) 在 org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:266) 在 org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.(HadoopShimsSecure.java:213) 在 org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getRecordReader(HadoopShimsSecure.java:333) 在 org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:719) 在 org.apache.hadoop.mapred.MapTask$TrackedRecordReader.(MapTask.java:169) 在 org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432) 在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) 在 org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671) 在 org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 引起:java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在 org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:252) ... 11 更多原因:java.lang.IllegalStateException:无效模式数据类型,发现:PRIMITIVE,预期:STRUCT 在 org.apache.hadoop.hive.ql.io.parquet.read.DataWritableReadSupport.getProjectedGroupFields(DataWritableReadSupport.java:118) 在 org.apache.hadoop.hive.ql.io.parquet.read.DataWritableReadSupport.getSchemaByName(DataWritableReadSupport.java:156) 在 org.apache.hadoop.hive.ql.io.parquet.read.DataWritableReadSupport.init(DataWritableReadSupport.java:222) 在 org.apache.hadoop.hive.ql.io.parquet.read.ParquetRecordReaderWrapper.getSplit(ParquetRecordReaderWrapper.java:256) 在 org.apache.hadoop.hive.ql.io.parquet.read.ParquetRecordReaderWrapper.(ParquetRecordReaderWrapper.java:99) 在 org.apache.hadoop.hive.ql.io.parquet.read.ParquetRecordReaderWrapper.(ParquetRecordReaderWrapper.java:85) 在 org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat.getRecordReader(MapredParquetInputFormat.java:72) 在 org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.(CombineHiveRecordReader.java:67) ... 16 更多 容器被 ApplicationMaster 杀死。容器应要求被杀死。退出代码为 143 容器以非零退出代码 143 退出

我的数据包含大约 2000 万条记录。当我尝试用一​​列 (end_user_id) 连接表时,我得到了同样的错误。

连接列是相同的数据类型。 A join B 作为子查询再join C 可以解决这个问题。

我们有很多带有相同条件的多表连接语句的 SQL 查询,但只有少数 SQL 脚本遇到这些错误。

【问题讨论】:

  • 您能粘贴跟踪网址中的完整堆栈吗?谢谢
  • 您是否还可以添加表的架构和执行计划
  • 共享表的ddl..我怀疑那里有分区或分桶。

标签: hadoop hive


【解决方案1】:

确保所有表的匹配列数据类型应该相同

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 2023-03-24
    • 2022-10-14
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多