当前位置: 首页 > news >正文

Cannot inspect org.apache.hadoop.hive.serde2.io.HiveDecimalWritable 问题分析处理

报错; org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.UnsupportedOperationException: Cannot inspect org.apache.hadoop.hive.serde2.io.HiveDecimalWritable

该问题常见于parquet格式hive表查询时,一般原因为hive表对应数据文件元数据对应格式与hive表定义格式不匹配导致。
可根据查看parquet文件信息验证parquet文件元数据格式与hive表定义元数据进行比对,将修改Hive表定义字段类型即可解决
调整到一致的方法:
1、修改hive表的字段类型 注意如果需要级联修改需要使用关键字cascade
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type [CASCADE|RESTRICT];
2、修改生成parquet的字段类型。

查看hive元数据:
CREATE TABLE ods_device_andon_new.md_route_process_cfg(
id string COMMENT ‘??’,
md_route_version_id string COMMENT ‘???ID’,
md_process_id string COMMENT ‘???ID’,
md_section_id string COMMENT ‘???ID’,
md_check_time_rule_id string COMMENT ‘???ID’,
is_wo_start string COMMENT ‘???0???1?’,
is_wo_finished string COMMENT ‘???0???1?’,
md_assess_rule_id string COMMENT ‘???ID’,
is_kpi_finished string COMMENT ‘???0???1?’,
is_warehouse_input string COMMENT ‘???0???1?’,
is_shipout string COMMENT ‘???,?0???1?’,
max_retest decimal(10,0) COMMENT ‘???’,
sys_org_id string,
project_code string COMMENT ‘???’,
created_dt timestamp COMMENT ‘???’,
creator string COMMENT ‘???’,
last_edited_dt timestamp COMMENT ‘???’,
last_editor string COMMENT ‘???’,
ap_mainversion string COMMENT ‘???’,
db_mainversion string COMMENT ‘???’,
timezone string,
is_invalid string COMMENT ‘???’,
invalid_dt timestamp COMMENT ‘???’,
invalid_reason string COMMENT ‘???’,
description string,
packtype_dic string COMMENT ‘???:SN/TRAY/CARTON/PALLET’,
environment_parameters string COMMENT ‘???-JSON?? ??? IP MAC ?? ?? ?? WO PN ??? ???’,
service_code string COMMENT ‘???’,
sourceinteractioncode string)
ROW FORMAT SERDE
‘org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe’
STORED AS INPUTFORMAT
‘org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat’
OUTPUTFORMAT
‘org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat’
LOCATION
‘hdfs://vnha/user/hive/warehouse/ods_device_andon_new.db/md_route_process_cfg’
TBLPROPERTIES (
‘transient_lastDdlTime’=‘1728580150’)

查看 parquet 文件 schema
下载 parquet-tools-1.9.0.jar
—— https://mvnrepository.com/artifact/org.apache.parquet/parquet-tools/1.11.2
—— https://mvnrepository.com/artifact/org.apache.parquet/parquet-tools/1.9.0
hadoop jar ./parquet-tools-1.9.0.jar schema hdfs_file_path

不正常表:
hdfs dfs -ls /user/hive/warehouse/ods_device_andon_new.db/md_route_process_cfg/
Found 2 items
-rw-r–r-- 3 hive supergroup 0 2024-10-11 01:03 /user/hive/warehouse/ods_device_andon_new.db/md_route_process_cfg/_SUCCESS
-rw-r–r-- 3 hive supergroup 7310 2024-10-11 01:03 /user/hive/warehouse/ods_device_andon_new.db/md_route_process_cfg/part-00000-23c35f91-fc2b-4dba-aada-4caf5b49231e-c000.snappy.parquet
查看Parquet文件格式:
hadoop jar /home/sunxy/parquet-tools-1.9.0.jar schema /user/hive/warehouse/ods_device_andon_new.db/md_route_process_cfg/part-00000-23c35f91-fc2b-4dba-aada-4caf5b49231e-c000.snappy.parquet

正常表:
hdfs dfs -ls /user/hive/warehouse/ods_device_andon_new.db/md_shift_detail/000000_0
-rwxr-xr-x 3 hive hive 7152 2024-10-11 00:08 /user/hive/warehouse/ods_device_andon_new.db/md_shift_detail/000000_0
hadoop jar /home/sunxy/parquet-tools-1.9.0.jar schema /user/hive/warehouse/ods_device_andon_new.db/md_shift_detail/000000_0

在使用insert into table时,每次会再添加一份文件000000_0
clustered by语句主要是控制生成的part-0000*的文件个数 ,分桶。

WARNING: Use “yarn jar” to launch YARN applications.
message spark_schema {
optional fixed_len_byte_array(9) ID (DECIMAL(20,0));
optional fixed_len_byte_array(9) MD_ROUTE_VERSION_ID (DECIMAL(20,0));
optional fixed_len_byte_array(9) MD_PROCESS_ID (DECIMAL(20,0));
optional fixed_len_byte_array(9) MD_SECTION_ID (DECIMAL(20,0));
optional fixed_len_byte_array(9) MD_CHECK_TIME_RULE_ID (DECIMAL(20,0));
optional fixed_len_byte_array(1) IS_WO_START (DECIMAL(1,0));
optional fixed_len_byte_array(1) IS_WO_FINISHED (DECIMAL(1,0));
optional fixed_len_byte_array(9) MD_ASSESS_RULE_ID (DECIMAL(20,0));
optional fixed_len_byte_array(1) IS_KPI_FINISHED (DECIMAL(1,0));
optional fixed_len_byte_array(1) IS_WAREHOUSE_INPUT (DECIMAL(1,0));
optional fixed_len_byte_array(1) IS_SHIPOUT (DECIMAL(1,0));
optional fixed_len_byte_array(16) MAX_RETEST (DECIMAL(38,0));
optional fixed_len_byte_array(9) SYS_ORG_ID (DECIMAL(20,0));
optional binary PROJECT_CODE (STRING);
optional int96 CREATED_DT;
optional binary CREATOR (STRING);
optional int96 LAST_EDITED_DT;
optional binary LAST_EDITOR (STRING);
optional binary AP_MAINVERSION (STRING);
optional binary DB_MAINVERSION (STRING);
optional binary TIMEZONE (STRING);
optional fixed_len_byte_array(1) IS_INVALID (DECIMAL(1,0));
optional int96 INVALID_DT;
optional binary INVALID_REASON (STRING);
optional binary DESCRIPTION (STRING);
optional binary PACKTYPE_DIC (STRING);
optional binary ENVIRONMENT_PARAMETERS (STRING);
optional binary SERVICE_CODE (STRING);
optional binary SOURCEINTERACTIONCODE (STRING);
}

用 Hive 生成数据的时候,是没有 _SUCCESS 文件的。
但是我们在跑完 MR 或者 Spark 程序时,会发现数据输出目录一般都会有一个 _SUCCESS 的空文件。这个 _SUCCESS 空文件用来表示该任务运行成功。
举个例子,比如我们有两个 Spark 任务:A 任务和 B 任务。B 任务依赖于 A 任务,也就是说 B 任务要根据 A 任务的结果再判断是否运行。这时我们就可以根据 A 任务的输出目录下是否有 _SUCCESS 文件来判断 A 任务是否运行成功。
但是在用 DataX 读取 HDFS 中的数据时,有 _SUCCESS 文件会使任务报错,因此可以在 Spark 代码中加以限制,不生成 _SUCCESS 文件即可。

在 Spark 的 Driver 端参数里加上如下参数即可。
sc.hadoopConfiguration.set(“mapreduce.fileoutputcommitter.marksuccessfuljobs”, “false”)
或者在 Spark SQL 中设置如下参数:
set mapreduce.fileoutputcommitter.marksuccessfuljobs = false;

http://www.lryc.cn/news/458196.html

相关文章:

  • 电子取证新视角:USB键盘流量提取密码方法研究与实现
  • Tongweb7049m4+THS6010-6012配置故障轉移+重試机制(by lqw)
  • 在线客服系统网站源码-网页聊天客服实现代码
  • JioNLP:一款实用的中文NLP预处理工具包
  • GR-ConvNet论文 学习笔记
  • windows环境批量删除指定目录下的全部指定文件
  • 水深探测仪的作用和使用方法
  • Leetcode 搜索插入位置
  • jsp怎么实现点赞功能
  • 取消microsoft edge作为默认浏览器 ,修改方法,默认修改不了的原因
  • C++面试速通宝典——17
  • 10、论文阅读:基于双阶对比损失解纠缠表示的无监督水下图像增强
  • Git配置token免密登录
  • 活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!
  • Flutter技术学习
  • Kubernetes网络通讯模式深度解析
  • SBTI科学碳目标是什么?有什么重要意义
  • 英特尔新旗舰 CPU 将运行更凉爽、更高效,适合 PC 游戏
  • MySQL 启动失败 (code=exited, status=1/FAILURE) 异常解决方案
  • 通信工程学习:什么是RIP路由信息协议
  • SQL调优指南与高级技巧:打造高效数据库查询
  • 实惠又好用的云手机推荐【高性价比云手机盘点】
  • Pear Admin Flask Master开启步骤
  • 知识图谱入门——8: KG开发常见数据格式:OWL、RDF、XML、GraphML、JSON、CSV。
  • 离线使用k8s部署项目
  • 【CF2021E】Digital Village(All Version)
  • [C++]使用纯opencv部署yolov11目标检测onnx模型
  • 【Golang】Go 语言中的 time 包详解:全面掌握时间处理与应用
  • MySQL联合索引、索引下推Demo
  • linux上复制命令cp的常见用法-ubuntu