hive报错 Too many bytes before newline: 2147483648

news2024/12/27 0:35:35

报错

Caused by: java.lang.RuntimeException: java.io.IOException: java.io.IOException: Too many bytes before newline: 2147483648
        at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat$TezGroupedSplitsRecordReader.initNextRecordReader(TezGroupedSplitsInputFormat.java:206)
        at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat$TezGroupedSplitsRecordReader.<init>(TezGroupedSplitsInputFormat.java:145)
        at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat.getRecordReader(TezGroupedSplitsInputFormat.java:111)
        at org.apache.tez.mapreduce.lib.MRReaderMapred.setupOldRecordReader(MRReaderMapred.java:156)
        at org.apache.tez.mapreduce.lib.MRReaderMapred.setSplit(MRReaderMapred.java:82)
        at org.apache.tez.mapreduce.input.MRInput.initFromEventInternal(MRInput.java:703)
        at org.apache.tez.mapreduce.input.MRInput.initFromEvent(MRInput.java:662)
        at org.apache.tez.mapreduce.input.MRInputLegacy.checkAndAwaitRecordReaderInitialization(MRInputLegacy.java:150)
        at org.apache.tez.mapreduce.input.MRInputLegacy.init(MRInputLegacy.java:114)
        at org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.getMRInput(MapRecordProcessor.java:543)
        at org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.init(MapRecordProcessor.java:189)
        at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:268)
        ... 16 more
Caused by: java.io.IOException: java.io.IOException: Too many bytes before newline: 2147483648
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97)
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.getRecordReader(HiveInputFormat.java:433)
        at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat$TezGroupedSplitsRecordReader.initNextRecordReader(TezGroupedSplitsInputFormat.java:203)
        ... 27 more
Caused by: java.io.IOException: Too many bytes before newline: 2147483648
        at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:251)
        at org.apache.hadoop.util.LineReader.readLine(LineReader.java:176)
        at org.apache.hadoop.mapreduce.lib.input.UncompressedSplitLineReader.readLine(UncompressedSplitLineReader.java:94)
        at org.apache.hadoop.mapred.LineRecordReader.<init>(LineRecordReader.java:149)
        at org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67)
        at org.apache.hadoop.hive.ql.io.RecordReaderWrapper.create(RecordReaderWrapper.java:72)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.getRecordReader(HiveInputFormat.java:430)
        ... 28 more
], TaskAttempt 3 failed, info=[Error: Error while running task ( failure ) : attempt_1667789273844_0742_1_00_000028_3:java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: java.io.IOException: Too many bytes before newline: 2147483648
        at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:298)
        at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run(TezProcessor.java:252)
        at org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTask.java:374)
        at org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:75)
        at org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:62)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1898)
        at org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:62)
        at org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:38)
        at org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36)
        at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
        at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)
        at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: java.io.IOException: java.io.IOException: Too many bytes before newline: 2147483648
        at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat$TezGroupedSplitsRecordReader.initNextRecordReader(TezGroupedSplitsInputFormat.java:206)
        at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat$TezGroupedSplitsRecordReader.<init>(TezGroupedSplitsInputFormat.java:145)
        at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat.getRecordReader(TezGroupedSplitsInputFormat.java:111)
        at org.apache.tez.mapreduce.lib.MRReaderMapred.setupOldRecordReader(MRReaderMapred.java:156)
        at org.apache.tez.mapreduce.lib.MRReaderMapred.setSplit(MRReaderMapred.java:82)
        at org.apache.tez.mapreduce.input.MRInput.initFromEventInternal(MRInput.java:703)
        at org.apache.tez.mapreduce.input.MRInput.initFromEvent(MRInput.java:662)
        at org.apache.tez.mapreduce.input.MRInputLegacy.checkAndAwaitRecordReaderInitialization(MRInputLegacy.java:150)
        at org.apache.tez.mapreduce.input.MRInputLegacy.init(MRInputLegacy.java:114)
        at org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.getMRInput(MapRecordProcessor.java:543)
        at org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.init(MapRecordProcessor.java:189)
        at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:268)
        ... 16 more
Caused by: java.io.IOException: java.io.IOException: Too many bytes before newline: 2147483648
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97)
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.getRecordReader(HiveInputFormat.java:433)
        at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat$TezGroupedSplitsRecordReader.initNextRecordReader(TezGroupedSplitsInputFormat.java:203)
        ... 27 more
Caused by: java.io.IOException: Too many bytes before newline: 2147483648
        at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:251)
        at org.apache.hadoop.util.LineReader.readLine(LineReader.java:176)
        at org.apache.hadoop.mapreduce.lib.input.UncompressedSplitLineReader.readLine(UncompressedSplitLineReader.java:94)
        at org.apache.hadoop.mapred.LineRecordReader.<init>(LineRecordReader.java:149)
        at org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67)
        at org.apache.hadoop.hive.ql.io.RecordReaderWrapper.create(RecordReaderWrapper.java:72)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.getRecordReader(HiveInputFormat.java:430)
        ... 28 more

发生背景

同事采用hive的opencsv serde去load csv数据(这套我经常用没啥问题)。他也用过几次都ok,突然某天就说这个问题。

具体现象

select * from odsctdata.ods_ct_order_list_csv limit 10 --ok

select count(1),max(),min() from odsctdata.ods_ct_order_list_csv --报错

错误具体为:Too many bytes before newline: 2147483648

此时看到这个错,大家第一反应是从哪里解决? 看看各位的思路,欢迎评论区留言。

1.2147483648 ,这个数值会不会偏小?就和内存一样 hive的有些参数默认是比较保守的,可以适当调大点,就避免很多报错了。 通过set -v 我查不到这个值,说明应该不是属性问题。

2.Too many bytes before newline ,这个报错可能是hive源码里有的报错信息,我们看下这个报错的具体位置,可能是有些属性需要我们额外去配置,或者其他问题,看源码总是好的。

下载了hive源码,无

3.看具体的报错信息 

Caused by: java.io.IOException: Too many bytes before newline: 2147483648
        at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:251)
        at org.apache.hadoop.util.LineReader.readLine(LineReader.java:176)

这里提到了org.apache.hadoop.util.LineReader,查看源码。与之吻合。 

具体看下这个方法

看了下大概就是读取每一行的数据,并且获取大小,对大小有个判断。

    private int readDefaultLine(Text str, int maxLineLength, int maxBytesToConsume) throws IOException {
        str.clear();
        int txtLength = 0;
        int newlineLength = 0;
        boolean prevCharCR = false;
        long bytesConsumed = 0L;

        do {
            int startPosn = this.bufferPosn;
            if (this.bufferPosn >= this.bufferLength) {
                startPosn = this.bufferPosn = 0;
                if (prevCharCR) {
                    ++bytesConsumed;
                }

                this.bufferLength = this.fillBuffer(this.in, this.buffer, prevCharCR);
                if (this.bufferLength <= 0) {
                    break;
                }
            }

            while(this.bufferPosn < this.bufferLength) {
                if (this.buffer[this.bufferPosn] == 10) {
                    newlineLength = prevCharCR ? 2 : 1;
                    ++this.bufferPosn;
                    break;
                }

                if (prevCharCR) {
                    newlineLength = 1;
                    break;
                }

                prevCharCR = this.buffer[this.bufferPosn] == 13;
                ++this.bufferPosn;
            }

            int readLength = this.bufferPosn - startPosn;
            if (prevCharCR && newlineLength == 0) {
                --readLength;
            }

            bytesConsumed += (long)readLength;
            int appendLength = readLength - newlineLength;
            if (appendLength > maxLineLength - txtLength) {
                appendLength = maxLineLength - txtLength;
            }

            if (appendLength > 0) {
                str.append(this.buffer, startPosn, appendLength);
                txtLength += appendLength;
            }
        } while(newlineLength == 0 && bytesConsumed < (long)maxBytesToConsume);

        if (bytesConsumed > 2147483647L) {
            throw new IOException("Too many bytes before newline: " + bytesConsumed);
        } else {
            return (int)bytesConsumed;
        }
    }

 接着我们去看csv文件。

看到这两个命令,有经验的小伙伴已经发现不对劲了。

41w条数据,足足有3.2G。有点奇奇怪怪。

 继续再看下 ,发现更加奇怪了。每一行的数据也不多,csv行数也不多,怎么会有这么大?

总共41w数据,那我split 按照10w分5个文件看下,因为怀疑有一条数据特别大

发现最后一个文件特别大。有问题。此时已经怀疑是最后一条数据有问题了,但是没证据咋办。

总行数409256 我分成2个文件409255+1就行了。

 此时问题数据已经查到。。就是最后一条。 

 3233377302>2147483647L

再来说说这个数字。2147483647 咋一看好像啥也不是和程序员的1024好像没有任何关系

 但是如果是一个年迈的程序员,一眼就可以看出这个数字很熟悉,比如我 哈哈。

2147483647+1=2147483648=1024*1024*1024*2。说明hive的一行数据不能超过2G。

 

 至此问题解决。等我问题解决的时候同事来了一句。他导出csv文件的时候count(1)了下有900w数据。。。。 我还忙活啥劲呢。。

 

如果这篇帮到你,点个赞是对我最大的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flex布局

flex是flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的灵活性&#xff0c;任何一个容器都可以指定为flex布局。 当我们为父盒子设为flex布局以后&#xff0c;子元素的float、clear和vertical-align属性将失效。 伸缩布局弹性布局伸缩盒布…

【微信小程序】一文带你读懂云开发

前言 云开发(CloudBase)是一个已经存在了很多年的概念&#xff0c;但在过去未能真正成为主流。然而&#xff0c;由于云和软件即服务的宏观趋势的结合&#xff0c;以及技术的进步&#xff0c;如容器技术 Docker 和 Kubernetes&#xff0c;云开发现在有机会成为基于云的应用程序的…

【Java】 java | sonar | sonar生成扫描token | 扫描示例 | 常见问题处理

一、说明 1、sonar已经安装OK 2、springboot项目 3、maven项目 二、生成token 1、登录到sonar 2、生成token 说明1&#xff1a; token仅生成一次&#xff0c;需保留 说明2&#xff1a; token忘记后&#xff0c;需要回收重新生成 3、执行命令 mvn sonar:sonar -Dsonar.projectK…

重新认识box-sizing

重新认识box-sizing 之前只是知道box-sizing设置成border-box,那么布局的时候&#xff0c;元素的宽高就是我们设置的宽高&#xff0c;省心方便。 今天仔细看了下 box-sizing的定义,有了新的认识 The box-sizing CSS property sets how the total width and height of an elem…

后端学习 -gRPC

gRPC 何为 RPC RPC 和 HTTP 的关系 基于 HTTP 的远程调用方案&#xff08;包含了接口规范、序列化反序列化等&#xff09;和 RPC 是并列的单从 HTTP 协议来看&#xff0c;RPC 可以使用 HTTP 作为通信协议 基于 HTTP 的远程调用方案和 RPC 的相同点、不同点 相同点 都可以实现…

RabbitMQ 快速入门 7 种简单模式

RabbitMQ 快速入门 7 种简单模式起步七种模式项目依赖1、"Hello World!"(1) Connection 方式(2) RabbitTemplate 方式2、Work Queues生产者消费者3、Publish/Subscribe关系绑定生产者消费者4、Routing消费者生产者5. Topics消费者生产者起步 七种模式 这七种模型其…

ch1_系统启动_bootsect.s

这里介绍&#xff0c; 操作系统启动中的 bootsect.S 文件 1. bootsect.s的作用概览 bootsect.s代码是磁盘引导块程序&#xff0c;驻留在磁盘的第一个扇区中(引导扇区&#xff0c;0磁道(柱面),0磁头&#xff0c;第一个扇区&#xff0c; 如图中的黄色区域&#xff09; 图一&…

springboot+jsp学生心理健康测评网

基于JSP技术设计并实现了学生心理健康网。该系统基于B/S即所谓浏览器/服务器模式&#xff0c;应用SSM框架&#xff0c;选择MySQL作为后台数据库。系统主要包括个人中心、用户管理、知识分类管理、知识信息管理、心理测试管理、交流论坛、试卷管理、系统管理、考试管理等功能模块…

Redis实战——优惠券秒杀(超卖问题)

1 实现优惠券秒杀功能 下单时需要判断两点&#xff1a;1.秒杀是否开始或者结束2.库存是否充足 所以&#xff0c;我们的业务逻辑如下 1. 通过优惠券id获取优惠券信息 2.判断秒杀是否开始&#xff0c;如果未返回错误信息 3.判断秒杀是否结束&#xff0c;如果已经结束返回错误…

第十三章《集合》第2节:List集合

List这个单词意为“列表”,List类型的集合的特点是:元素呈线性排列,致密且有序。下面的图13-3展示了List类型集合的特点。 图13-3 List类型集合 图13-3中的每一个小圆形代表一个元素,可以看到,这些元素被放到List集合中后被排成一列,这就是“线性排列”。List集合中的元…

美国海运专线有哪些港口?美国海运专线有哪些路线?

随着全球物流的日益密切和跨境电商的活跃&#xff0c;跨境物流连接买卖双方的作用越来越重要。美国是中国亚马逊卖家的重要市场之一&#xff0c;那么美国海运专线有哪些港口?又有哪些路线?方联物流以亚马逊平台为例&#xff0c;跟大家聊聊美国海运专线那点事。美国海运专线有…

Android Studio Gradle相关

一、区分gradle version与gradle plugin version 参考博客 gradle是一个构建工具&#xff0c;理论上来说&#xff0c;它可以用来构建任何项目&#xff08;如java项目&#xff0c;ios项目&#xff09;。它可以与任何类型的IDE集成&#xff08;如ecllipse&#xff0c;android st…

2023年上半年软考中级数据库系统工程师如何高效备考?难吗?

考试题型介绍&#xff1a; &#xff08;1&#xff09;基础知识&#xff0c;考试时间为150分钟&#xff0c;笔试&#xff0c;满分75分。45分及格。 &#xff08;2&#xff09;应用技术&#xff0c;考试时间为150分钟&#xff0c;笔试&#xff0c;满分75分。45分及格。 &#…

思维导图之设计原则

设计原则是指导我们代码设计的一些经验总结&#xff0c;对于某些场景下&#xff0c;是否应该应用某种设计模式&#xff0c;具有指导意义。 设计原则总结如下图所示&#xff1a;

[附源码]SSM计算机毕业设计学生互评的在线作业管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

pycare检测时间序列异常

1. 获取时间序列数据&#xff08;官方文档是多特征&#xff0c;本文举例是单特征&#xff09; 未安装pycaret的先安装&#xff1a;pip install --pre pycaret &#xff08;也可以pip install pycaret&#xff09; 2.用pycaret检测异常一般用pycaret.anomaly pycaret.anomaly…

七、【React-Router5】嵌套路由

文章目录1、实现效果2、嵌套路由规则3、修改上一节代码3.1、项目结构变更如下3.2、CODE3.2.1、Home.jsx3.2.2、Message.jsx3.2.3、News.jsx3.3、Result1、实现效果 2、嵌套路由规则 注册子路由时要写上父路由的path值路由的匹配是按照注册路由的顺序进行的 3、修改上一节代码…

SparkMlib 之决策树及其案例

文章目录什么是决策树&#xff1f;决策树的优缺点决策树示例——鸢尾花分类什么是决策树&#xff1f; 决策树及其集成是分类和回归机器学习任务的流行方法。决策树被广泛使用&#xff0c;因为它们易于解释&#xff0c;处理分类特征&#xff0c;扩展到多类分类设置&#xff0c;…

信号类型(雷达)——连续波雷达(二)

系列文章目录 《信号类型&#xff08;雷达通信&#xff09;》 《信号类型&#xff08;雷达&#xff09;——雷达波形认识&#xff08;一&#xff09;》 文章目录 目录 一、连续波雷达信号 1.1 单频雷达信号 1.2 调频连续波雷达 1.3 相位编码连续波雷达 1.4 多频连续波雷…

【AI学习笔记】TensorFlow GPU版本的安装(超详细)

安装步骤&#xff1a;1. 确认显卡是否支持CUDA2. 安装CUDA3. 安装cuDNN3.1 安装 cudnn3.2 将cudnn64_8.dll存放的位置加入Path环境变量4. 安装TensorFlow GPU版本4.1 在Anaconda建立TensorFlow GPU虚拟环境4.2 安装Tensorflow-gpu4.3 安装Keras总结1. 确认显卡是否支持CUDA 在…