datax->hdfsreader->orc文件读取出错ArrayIndexOutOfBoundsException: 6

2023-11-12

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at org.apache.orc.OrcFile$WriterVersion.from(OrcFile.java:145)
    at org.apache.orc.impl.OrcTail.getWriterVersion(OrcTail.java:74)
    at org.apache.orc.impl.ReaderImpl.<init>(ReaderImpl.java:385)
    at org.apache.orc.OrcFile.createReader(OrcFile.java:222)
    at org.apache.orc.tools.FileDump.getReader(FileDump.java:255)
    at org.apache.orc.tools.JsonFileDump.printJsonMetaData(JsonFileDump.java:80)
    at org.apache.orc.tools.FileDump.main(FileDump.java:152)
    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.util.RunJar.run(RunJar.java:313)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:227)

这里说下背景。我们之前用datax 在cdh6.3.2上都hdfs读写都是好好的,生产也上了都ok,

最近需要转移到cdp上,cdp测试环境也测了hdfs的读写 都ok,

但是最近有个问题,cdp生产环境hdfsreader读取orc的时候报这个错 下标越界,一脸茫然,关键是datax这里的错误日志还没打印出来,重新打包后报错详细日志如上。

先说问题很简单。

这里有个获取版本的地方 ,但是枚举只有 01234 和个max。

经过我反复测试,其余的文件id=4 属于hive13083正常。但是这个文件id=6 这里不就是获取value[6] 然后不就是扯大蛋了么,下标在这里就越界了。

这里我就要吐槽了,注意看这里很明显是一个记录hive或者orc版本的枚举,明显有个future就是为了应付后面的版本的升级 id 0123肯定是老版本了,4差不多是新版本,还有未来的版本,你这里这个from方法写的和屎一样,写个大于不好么。。。

flink写入orc文件到hive表,hive表读取报数组越界_Ink__Bamboo的博客-CSDN博客_hive导入orc文件

 ——————————————————————————————————————————

这个orc文件是从 cdh distcp到cdp的,在cdh上是好好的,到cdp怎么就不行了呢。这里我有空又研究了一下orc的读写,发现 hive-orc.jar这个包就聪明多了,没有用枚举的from方法,自己写了一个方法 不符合1234的就算future

 

这个时候怎么解决这个问题呢?

hdfsreader读写错误原因是啥?hive-exec有问题,为啥有问题?那个version.from写的垃圾,改下就好了呗。

我们直接github下载hive源码,发现hive-2.1.1直接修复了这个问题。。。那就直接打包试下

GitHub - apache/hive: Apache Hive

pom文件修改

<exec executable="cmd" failοnerrοr="true">
  <arg value="/c"/>
  <arg value="${basedir}/src/scripts/saveVersion.sh"/>
  <arg value="${project.version}"/>
  <arg value="${hive.version.shortname}"/>
  <arg value="${basedir}/src"/>
</exec>

修改原因很简单 你如果是在linux环境可以不修改,原文直接是sh

但是windows环境没有sh 只有cmd。

mvn clean package -Pdist -DskipTests -Dmaven.javadoc.skip=true

打好包了之后

替换目录下的hive-exec.jar 。

成功案例 

 失败案例。

最后结尾说下。其实我这种应该算是治标不治本,但是勉强能用了。

真正的原因应该是hive写的时候采用的高版本 比如 我们cdp是hive3.1.1的 写orc文件的时候会有一个版本号, 比如我debug的时候发现cdh-hive2.1.1版本的orc文件都是 hive13083也就是枚举的4。显而易见当我们采用cdp-3.1.3写orc的时候 版本肯定更高 直接给6

有时间在研究写的时候如何控制版本号。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

datax->hdfsreader->orc文件读取出错ArrayIndexOutOfBoundsException: 6 的相关文章

随机推荐

  • java入门到进阶书单

    入门 1 2年 初级 Head First Java 主要讲设计模式 这个是设计思想方面的 我之所以觉得它应该最早学 就是觉得这个对今后你看jdk tomcat源码 看第三方项目源码 以及一些大数据中间源码有所帮助 另外也有一本书叫 大话设
  • Matlab-矩阵

    目录 一 矩阵的操作 1 创建矩阵 1 建立简单矩阵 2 建立特殊矩阵 3 希尔伯特 Hilbert 矩阵 4 托普利兹 Toeplitz 矩阵 5 0 1间均匀分布的随机矩阵 6 标准正态分布随机矩阵 7 魔方矩阵 8 帕斯卡矩阵 9 范
  • IT中文技术站十大网站收藏

    1 CSDN www csdn net CSDN Chinese Software Developer Network 创立于1999年 是中国的IT社区和服务平台 为中国的软件开发者和IT从业者提供知识传播 职业发展 软件开发等全生命周期
  • 六种线程状态详解

    1 线程状态概述 线程从创建到运行到结束是一个线程的生命周期 当线程被创建到结束过程中 不是一直处于运行状态的 下面来介绍一下线程从运行到结束所有的状态 线程状态 导致状态发生条件 NEW 新建 线程刚被创建 没有启动 也就是还没调用sta
  • LeetCode 841.钥匙和房间 - C++ - 小结

    钥匙和房间 有 N 个房间 开始时你位于 0 号房间 每个房间有不同的号码 0 1 2 N 1 并且房间里可能有一些钥匙能使你进入下一个房间 在形式上 对于每个房间 i 都有一个钥匙列表 rooms i 每个钥匙 rooms i j 由 0
  • python制作模型排放清单_四川省人为源大气污染物排放清单及特征

    大气污染源排放清单是污染源在一定时间跨度和空间区域内排放到大气中的各种污染物的数量列表 在支持空气质量管理决策的技术体系中 构建准确 完整和更新及时的大气污染物排放清单是识别污染来源的基础环节 也是制订污染控制策略的根本依据 同时也对大气污
  • 【论文笔记】Interventional Few-Shot Learning

    概述 目前流行的meta learning fine tuning等小样本学习方法都利用外部知识进行预训练 以使模型在小样本上有好的效果 而预训练知识很可能会成为影响样本特征与标签之间的关系的混杂因素 使模型得到错误的结果 本文从因果的角度
  • error while loading shared libraries: libssl.so.6

    执行 scripts mysql install db user mysql 安装mysql的时候报错 bin my print defaults error while loading shared libraries libssl so
  • synchronized、volatile底层原理详解

    文章目录 一 synchronized 1 监视器Monitor monitor结构及原理 监视器Monitor有两种同步方式 互斥与协作 2 Mutex lock mutex的工作方式 3 java对象头 java对象布局 4 无锁 偏向
  • PCL 安装

    1 安装pcl 1 1下载文件 地址链接 Release PCL 1 11 1 PointCloudLibrary pcl GitHub 下载的文件 PCL 1 11 1 AllInOne msvc2019 win64 exe pcl 1
  • 使用groupingcomparator求同一订单中最大金额的订单

    有如下订单数据 现在需要求出每一个订单中成交金额最大的一笔交易 订单id 商品id 成交金额 Order 0000001 Pdt 01 222 8 Order 0000001 Pdt 05 25 8 Order 0000002 Pdt 03
  • Linux内存精确统计工具

    1 ps mem介绍 ps mem是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单python脚本 它会分别计算一个程序私有内存总量和共享内存总量 并以更准确的方式给出了总的内存使用量 2 安装方式 包管理器 pip
  • qq 浏览器不支持java_各种浏览器开启JavaScript脚本方法

    随着网站设计技术的发展 为了用户友好体验 大部分网站使用了JavaScript脚本设计 如果您的浏览器禁用或关闭的JavaScript支持 那么可能造成网站体验差或网站部分功能无法使用 下面提供10种浏览器如何开启JavaScript的方法
  • 电商平台项目------首页

    目录 Mock swiper seiper的基本使用 swiper在vue中的问题 组件通讯的方式 props 父给子通讯 自定义事件 子给父通讯 父组件通过ref获取子组件数据 全局事件总线 bus 全能 作用域插槽 vuex paren
  • Perl中变量值交换

    示例 a 1 b 2 print a a b b a print a
  • empty ajax,php - Javascript Array empty not empty (Ajax) - Stack Overflow

    I m trying to retrieve the address that API google send me into an array The problem is that I just received an array em
  • Android12 HttpCanary系统证书安装 Magisk模块movecert

    手机 pixel 6 系统 Android 12 HttpCanary高级版 想要无限制使用高级功能的可以参照我的这篇文章实战 逆向最新黄鸟抓包软件 HttpCanary证书的安装 之前我一直使用的Android 8 证书可以直接通过Htt
  • Golang-如何判断一个 interface{} 的值是否为 nil ?

    引用 起初我会下意识的回答 直接 v nil 进行判断不就好了吗 然后翻阅了很多资料终于大致搞定里面的道道 例子 请看下面这段代码 可以先猜测一下输出的结果 package main import fmt func main var a s
  • python复数类型-Python 复数属性和方法操作实例

    复数是由一个实数和一个虚数组合构成 表示为 x yj 一个复数时一对有序浮点数 x y 其中 x 是实数部分 y 是虚数部分 Python 语言中有关复数的概念 1 虚数不能单独存在 它们总是和一个值为 0 0 的实数部分一起构成一个复数
  • datax->hdfsreader->orc文件读取出错ArrayIndexOutOfBoundsException: 6

    Exception in thread main java lang ArrayIndexOutOfBoundsException 6 at org apache orc OrcFile WriterVersion from OrcFile