You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Tez执行Count(*)返回空结果但MapReduce正常的问题排查

Hive Tez引擎COUNT(*)查询返回空结果,MapReduce引擎正常的问题

问题详情

  • 环境:Docker部署的Hadoop+Hive集群,Parquet格式外部表由PyArrow生成,表结构与Hive定义完全匹配
  • 异常表现:执行查询语句SELECT COUNT(*) FROM market_data WHERE ric = 'WINc1' AND year = 2024 AND month = 1 AND day = 2时,Tez引擎返回空结果集;切换为MapReduce引擎后返回正确计数
  • 关键线索:日志中RECORDS_OUT_OPERATOR_SEL_9: 11171207(该数值为正确行数),说明Tez已完成数据统计,但最终结果未正常返回
  • 版本信息:Hive 4.0.0、Hadoop 3.4.1、Tez 0.10.3

执行日志

jdbc:hive2://localhost:10000/default> SELECT COUNT(*) FROM market_data 
WHERE ric = 'WINc1' AND year = 2024 AND month = 1 AND day = 2;
    
INFO  : File System Counters:
INFO  :    FILE_BYTES_READ: 108
INFO  :    FILE_BYTES_WRITTEN: 228
INFO  :    FILE_READ_OPS: 0
INFO  :    FILE_LARGE_READ_OPS: 0
INFO  :    FILE_WRITE_OPS: 0
INFO  :    HDFS_BYTES_READ: 1440097729
INFO  :    HDFS_BYTES_WRITTEN: 0
INFO  :    HDFS_READ_OPS: 1096
INFO  :    HDFS_LARGE_READ_OPS: 0
INFO  :    HDFS_WRITE_OPS: 0
INFO  : org.apache.tez.common.counters.TaskCounter:
INFO  :    SPILLED_RECORDS: 0
INFO  :    NUM_SHUFFLED_INPUTS: 0
INFO  :    NUM_FAILED_SHUFFLE_INPUTS: 0
INFO  :    GC_TIME_MILLIS: 520
INFO  :    CPU_MILLISECONDS: 44910
INFO  :    WALL_CLOCK_MILLISECONDS: 120244
INFO  :    PHYSICAL_MEMORY_BYTES: 16314269696
INFO  :    VIRTUAL_MEMORY_BYTES: 70690332672
INFO  :    COMMITTED_HEAP_BYTES: 16314269696
INFO  :    INPUT_RECORDS_PROCESSED: 255910
INFO  :    INPUT_SPLIT_LENGTH_BYTES: 1440098825
INFO  :    OUTPUT_RECORDS: 12
INFO  :    APPROXIMATE_INPUT_RECORDS: 12
INFO  :    OUTPUT_LARGE_RECORDS: 0
INFO  :    OUTPUT_BYTES: 54
INFO  :    OUTPUT_BYTES_WITH_OVERHEAD: 150
INFO  :    OUTPUT_BYTES_PHYSICAL: 486
INFO  :    ADDITIONAL_SPILLS_BYTES_WRITTEN: 0
INFO  :    ADDITIONAL_SPILLS_BYTES_READ: 0
INFO  :    ADDITIONAL_SPILL_COUNT: 0
INFO  :    SHUFFLE_BYTES: 0
INFO  :    SHUFFLE_BYTES_DECOMPRESSED: 0
INFO  :    SHUFFLE_BYTES_TO_MEM: 0
INFO  :    SHUFFLE_BYTES_TO_DISK: 0
INFO  :    SHUFFLE_BYTES_DISK_DIRECT: 0
INFO  :    SHUFFLE_PHASE_TIME: 3220
INFO  :    FIRST_EVENT_RECEIVED: 36
INFO  :    LAST_EVENT_RECEIVED: 3220
INFO  :    DATA_BYTES_VIA_EVENT: 198
INFO  : HIVE:
INFO  :    CREATED_FILES: 1
INFO  :    DESERIALIZE_ERRORS: 0
INFO  :    RECORDS_IN_Map_1: 261916407
INFO  :    RECORDS_OUT_0: 1
INFO  :    RECORDS_OUT_INTERMEDIATE_Map_1: 18
INFO  :    RECORDS_OUT_INTERMEDIATE_Reducer_2: 0
INFO  :    RECORDS_OUT_OPERATOR_FIL_8: 11171207
INFO  :    RECORDS_OUT_OPERATOR_FS_13: 1
INFO  :    RECORDS_OUT_OPERATOR_GBY_10: 12
INFO  :    RECORDS_OUT_OPERATOR_GBY_12: 1
INFO  :    RECORDS_OUT_OPERATOR_MAP_0: 0
INFO  :    RECORDS_OUT_OPERATOR_RS_11: 18
INFO  :    RECORDS_OUT_OPERATOR_SEL_9: 11171207
INFO  :    RECORDS_OUT_OPERATOR_TS_0: 261916407
INFO  : org.apache.hadoop.hive.ql.exec.tez.HiveInputCounters:
INFO  :    GROUPED_INPUT_SPLITS_Map_1: 12
INFO  :    INPUT_DIRECTORIES_Map_1: 22
INFO  :    INPUT_FILES_Map_1: 274
INFO  :    RAW_INPUT_SPLITS_Map_1: 274
INFO  : Completed executing command(queryId=hive_20250730142019_de067ec2-e26a-4085-8bde-0b98eb7e80fd); Time taken: 27.824 seconds
+------+
| _c0  |
+------+
+------+
No rows selected (27.926 seconds)

排查与解决方法

1. 版本兼容性调整

Tez 0.10.3与Hive 4.0.0存在已知兼容性问题,建议升级Tez至0.11.0及以上版本(Hive 4.x官方推荐适配版本),重新部署后测试查询。

2. 修复Parquet文件解析问题

  • 检查PyArrow生成的Parquet文件字段类型,确保year/month/day等数值型字段与Hive表定义完全一致(如Hive定义为int,PyArrow不能用smallint)
  • 用Hive的INSERT INTO语句生成少量Parquet测试数据,对比PyArrow生成文件的查询结果,定位是否为文件格式差异导致

3. 调整Tez执行参数

临时关闭可能导致结果丢失的优化开关,测试查询:

set hive.tez.auto.reducer.parallelism=false;
set hive.tez.execution.mode=batch;
set tez.am.resource.memory.mb=4096;
set tez.task.resource.memory.mb=4096;
set hive.tez.container.size=4096;

若临时生效,可将参数写入Hive配置文件hive-site.xml持久化。

4. 排查Tez Shuffle过程异常

从日志中RECORDS_OUT_INTERMEDIATE_Reducer_2: 0可知,Reducer未接收到Map阶段的中间数据:

  • 检查Tez Shuffle管理器配置,确保tez.shuffle.manager=org.apache.tez.dag.api.TezShuffleManager
  • 查看Tez Container的详细日志(YARN日志目录下),定位Shuffle阶段是否存在数据传输异常

5. 优化Hive Parquet读取配置

set hive.parquet.use.summary.metadata=false;
set hive.vectorized.execution.enabled=true;
set hive.exec.dynamic.partition.mode=nonstrict;

关闭Parquet元数据摘要读取,启用向量执行模式,避免元数据解析错误导致结果丢失。


内容的提问来源于stack exchange,提问作者Pedro Novaes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:14:59