Hive Code2报错排查

news2024/11/16 9:20:50

前言

大多数可能的code2报错一般是内存不够,所以加下面这个配置可以有效解决这个问题
set hive.auto.convert.join = false; #取消小表加载至内存中
但这个不一定是因为内存不够,其实很多错误都是报这种官方错误的,所以一定要去yarn上看日志。

在这里插入图片描述

很多人看日志也找不到问题,因为并没有看到全部日志,翻到最底下,点击check here 才能看到完整日志

1、内存不足导致code2报错

上面已经举例,如果该参数无法解决可以使用如下的配置

set mapreduce.map.memory.mb=4096;
set mapreduce.map.java.opts=-Xmx3686m;
set mapreduce.reduce.memory.mb=6144;
set mapreduce.reduce.java.opts=-Xmx5120m;

set hive.support.concurrency=false;
SET hive.auto.convert.join=false;

set mapred.max.split.size=256000000;
set mapred.min.split.size=10000000;
set mapred.min.split.size.per.node=8000000;
set mapred.min.split.size.per.rack=8000000;

2、动态分区文件过多

错误日志:

 Fatal error occurred when node tried to create too many dynamic partitions. The maximum number of dynamic partitions is controlled by hive.exec.max.dynamic.partitions and hive.exec.max.dynamic.partitions.pernode. Maximum was set to 100 partitions per node, number of dynamic partitions on this node: 101

原因:
Hive对其创建的动态分区数量实施限制。默认值为每个节点100个动态分区,所有节点的总(默认)限制为1000个动态分区。但是,这可以调整。
出错位置:
原动态分区配置为:

set hive.exec.dynamic.partition=true;
set hive.exec.max.dynamic.partitions=1000;

用以上设置后不能保证正常,有时候还需要设置 mapred.reduce.tasks 及 dynamic.partitions.pernode 来配合动态分区使用

set hive.exec.dynamic.partition=true;
set hive.exec.max.dynamic.partitions=1000;
set hive.exec.max.dynamic.partitions.pernode=200;
set mapred.reduce.tasks=10;

这几个参数需要满足以下条件:

dynamic.partitions / dynamic.partitions.pernode <= mapred.reduce.tasks

可以指定mapred.reduce.tasks任务数,但这个一般会根据数据量动态调整,不适合直接写死,所以解决方法最好是调大dynamic.partitions.pernode参数的值,不宜过大,不然会在计算过程中产生很多小文件,影响执行效率
动态分区相关配置

set hive.exec.dynamic.partition=true;–是否允许动态分区
   默认值:false
   是否开启动态分区功能,默认false关闭。
   使用动态分区时候,该参数必须设置成true。

set hive.exec.dynamic.partition.mode=nonstrict; --分区模式设置
   默认值:strict
   动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区。
   nonstrict模式:表示允许所有的分区字段都可以使用动态分区。

set hive.exec.max.dynamic.partitions.pernode=1000;–单个节点上的mapper/reducer允许创建的最大分区
   默认值:100
   在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。

set hive.exec.max.dynamic.partitions=1500;–允许动态分区的最大数量
   默认值:1000
   在所有执行MR的节点上,最大一共可以创建多少个动态分区。
   同上参数解释。

hive.exec.max.created.files=100000;–一个mapreduce作业能创建的HDFS文件最大数
   默认值:100000
   整个MR Job中,最大可以创建多少个HDFS文件。
   一般默认值足够了,除非你的数据量非常大,需要创建的文件数大于100000,可根据实际情况加以调整。

hive.error.on.empty.partition=false;–在动态分区插入产生空结果时是否抛出异常
   默认值:false
   当有空分区生成时,是否抛出异常。一般不需要设置。

3、hdfs块丢失
可到hdfs的webUI中查看是否有块丢失问题
在这里插入图片描述

照成块丢失的原因有很多,我举例几个我们碰到的

①集群小文件太多

导致RPC通信异常,ipc的数据包超过设定最大的64MB导致datanode与namenode通信失败,
小文件数量过多导致DataNode内存不足,导致DataNode重启,DataNode要给NameNode上报block信息,由于block信息较多,ipc通信的数据包超过了64MB,NameNode返回异常了,导致DataNode这边出现EOFException的异常,由于这个异常,DataNode没能把block信息上报给NameNode,NameNode就认为block丢失了。
在这里插入图片描述

018-09-04 23:24:38,446 WARN org.apache.hadoop.hdfs.server.datanode.DataBlockScanner: No block pool scanner found for block pool id: BP-21853433-xxxxxxxxx-1484835379573
2018-09-05 00:45:13,777 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Unsuccessfully sent block report 0xa7b72c5217b7ac,  containing 1 storage report(s), of which we sent 0. The reports had 6076010 total blocks and used 0 RPC(s). This took 1636 msec to generate and 1082 msecs for RPC and NN processing. Got back no commands.
2018-09-05 00:45:13,777 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: IOException in offerService
java.io.EOFException: End of File Exception between local host is: "xxxx"; destination host is: "xxx":53310; : java.io.EOFException; For more details see:  http://wiki.apache.org/hadoop/EOFException
    at sun.reflect.GeneratedConstructorAccessor8.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:791)
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:764)
    at org.apache.hadoop.ipc.Client.call(Client.java:1473)
    at org.apache.hadoop.ipc.Client.call(Client.java:1400)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232)
    at com.sun.proxy.$Proxy12.blockReport(Unknown Source)
    at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolClientSideTranslatorPB.blockReport(DatanodeProtocolClientSideTranslatorPB.java:177)
    at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.blockReport(BPServiceActor.java:524)
    at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.offerService(BPServiceActor.java:750)
    at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:889)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.EOFException
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at org.apache.hadoop.ipc.Client$Connection.receiveRpcResponse(Client.java:1072)
    at org.apache.hadoop.ipc.Client$Connection.run(Client.java:967)

修改NameNode的hdfs-site.xml配置文件,添加以下配置修改ipc通信的数据包最大的大小:

<property>
    <name>ipc.maximum.data.length</name>
    <value>134217728</value>
</property>

降低小文件数量方法:

小文件一般是由于spark的insert任务生成的
spark.sql.shuffle.partitions=200 ,spark sql默认shuffle分区是200个,如果数据量比较小时,写hdfs时会产生200个小文件。
spark任务执行前需要加两个配置实现自适应调整可以大大减少小文件的产生

set spark.sql.adaptive.enabled=true
set spark.sql.adaptive.shuffle.targetPostShuffleInputSize=128000000

注意:python使用spark时也需要

import os

os.environ['SPARK_HOME'] = "/usr/local/service/spark"

import findspark

findspark.init()

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .config("spark.sql.adaptive.enabled", "true") \
    .config("spark.sql.adaptive.shuffle.targetPostShuffleInputSize", "128000000") \
    .enableHiveSupport().getOrCreate()

②由于其它原因,文件出现损坏,导致不可使用

根据hdfs的WEBUI提示删掉异常文件即可

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

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

相关文章

如何解决vcruntime140.dll找不到的问题?两种方法教你解决

当你在运行某些应用程序或游戏时&#xff0c;可能会遇到一个错误提示&#xff0c;即“找不到vcruntime140.dll”文件。这是因为你的电脑中缺少了这个动态链接库文件&#xff0c;这个问题可能会导致你无法正常使用某些应用程序。在本文中&#xff0c;我们将介绍两种方法来解决 …

Vue3.0快速入门(速查)

Vue也是基于状态改变渲染页面&#xff0c;Vue相对于React要好上手一点。有两种使用Vue的方式&#xff0c;可以直接导入CDN&#xff0c;也可以直接使用CLI创建项目&#xff0c;我们先使用CDN导入&#xff0c;学一些Vue的基本概念。 <!-- 开发环境版本&#xff0c;包含了有帮…

泰克AFG31000系列任意波函数发生器应用

模拟电路检定 这是一个模拟世界。所有物理量均使用模拟信号捕获和表示。因此&#xff0c;需要检定放大器、滤波器和转换器等模拟电路的性能。 InstaView? 技术避免在阻抗不匹配的 DUT 上增加的波形不确定性频率范围为 25 MHz 至 250 MHz由于信号保真度高&#xff0c;无需使…

MySql基础笔记

数据库相关概念 ​ 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管理系统操纵和管理数据库的大型软件DataBase Management System&#xff08;DBMS&#xff09;SQL操作关系型数据库的编程语言&#xff0c;定…

Java粮油MES系统源码(带可视化数据大屏)

▶ Java粮油MES系统实现一物一码&#xff0c;全程追溯 &#xff0c;正向追踪&#xff0c;逆向溯源&#xff0c;自主研发,有演示&#xff01; 一、粮油MES技术框架说明 开发语言&#xff1a;java 开发工具&#xff1a;idea或eclipse 前端框架&#xff1a;easyui 后端框架&…

横空出世!京东技术专家狂推的Redis笔记,实战和原理两开花

Redis 是互联网技术领域使用最为广泛的存储中间件&#xff0c;它是「Remote Dictionary Service」的首字母缩写&#xff0c;也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外很多大型互联网公司…

【JavaSE】 封装

文章目录 一. 封装的概念二. 访问限定符三. 封装扩展之包1. 包的概念2. 导入包中的类3. 自定义包4. 包的访问权限控制举例5. 常见的包 四. static成员1. 简介2. static修饰成员变量3. static修饰成员方法 五. 代码块1. 代码块概念以及分类2. 普通代码块3. 构造代码块4. 静态代码…

chatgpt赋能python:Python可以实现两个数值的互换

Python可以实现两个数值的互换 Python是一种高效、易学且功能强大的编程语言&#xff0c;可以用于各种不同的编程目的&#xff0c;包括数据科学、网络编程、机器学习、人工智能等领域。其中&#xff0c;Python的一个最基本、最关键的操作就是对数值的处理&#xff0c;包括加减…

【SpringMVC】| SpringMVC的视图

目录 SpringMVC的视图 1. ThymeleafView 2. 转发视图 3. 重定向视图 4. 视图控制器view-controller SpringMVC的视图 &#xff08;1&#xff09;SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户。 &#xff08;2&am…

Android单元测试(五):网络接口测试

温馨提示&#xff1a;如果你不太熟悉单元测试&#xff0c;可以先看下之前四篇基础框架使用。便于你更好的理解下面的内容。 在平日的开发中&#xff0c;我们用后台写好给我们接口去获取数据。虽然我们有一些请求接口的工具&#xff0c;可以快速的拿到返回数据。但是在一些异常情…

怎么用u盘制作pe系统启动盘

PE系统是一种小型的windows系统&#xff0c;通俗的说法也就是在电脑出现问题不能正常进入系统时的一种紧急备用系统。它容量小能量大&#xff0c;可以解决win系统中经常遇到的一些问题&#xff0c;对于经常使用电脑的用户来说&#xff0c;制作一个pe系统启动盘放在身边是很有必…

selenium python教程第1章

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的AP…

【基于MATLAB的dijkstra算法】

基于MATLAB的dijkstra算法 %姓名&#xff1a;马伟 %日期&#xff1a;2023年6月七号 %作业&#xff1a;通信网理论&#xff0c;最小路径树D算法 function [distances, paths, tree] dijkstra(graph, startNode)numNodes size(graph, 1);distances inf(1, numNodes);visited …

网络安全怎么学?学习路线资料分享

一.自己对网络安全的理解 安全其实有很多个方向&#xff0c;从大的方面来说&#xff0c;也就是测试和开发。测试&#xff0c;细分下来&#xff0c;又有渗透&#xff08;也就是所谓的web&#xff09;&#xff0c;逆向&#xff08;也就是所谓的二进制&#xff0c;主要是代码审计方…

YUM报错No module named yum处理

一、问题描述 某次GreenPlum集群部署过程中&#xff0c;现场人员反馈&#xff0c;yum命令无法使用了&#xff0c;执行报错&#xff1a;No module named yum&#xff0c;如下所示&#xff1a; 相关资料&#xff1a;YUM 二、问题分析处理 2.1 YUM的本质 yum命令本质上是属于py…

泛微信创办公平台,低代码构建丰富应用,满足多种需求

信创已经成为了国家的战略规划&#xff0c;自2022年起&#xff0c;国家已全面推动国资企业的信创改造工作&#xff0c;要求到2027年底&#xff0c;对综合办公、经营管理、生产运营等系统实现“应替尽替、能替则替”。其中&#xff0c;门户、OA、邮件、档案、党群、纪检监察等综…

7年时间,从功能测试到测试开发,和大家聊聊如何突破职业瓶颈?少走弯路

突破自己的技术瓶颈并不是一蹴而就&#xff0c;还是需要看清楚一些东西&#xff0c;这里也有一些经验和见解跟大家分享一下。同样是职场人士&#xff0c;我也有我的经历和故事。在工作期间&#xff0c;我有过2年加薪5次的小小“战绩”&#xff08;同期进入公司的员工&#xff0…

28岁,从字节退休了···

大厂一直是每个程序员都向往职业目标&#xff0c;大厂意味着薪资高、福利好、倍有面儿&#xff0c;而且发展空间也大。甚至有人调侃不想进大厂的程序员不是好程序员。 而在网上&#xff0c;也有各个网友分享自己在大厂的经历&#xff0c;在某平台还有一个近2600万浏览的话题&a…

度晓晓再战高考:百度“AI伙伴”助阵,人均学霸时代来了

6月7日&#xff0c;高考首日&#xff0c;AI 挑战高考语文的新闻刷屏。 在一场关于高考直播的中&#xff0c;百度搜索正在内测的“AI 伙伴”现场挑战高考语文考试&#xff0c;包括作文、微写作、古诗词赏析、文言文翻译、阅读填空等题型。一篇文言文作文甚至迷惑了资深语文老师庄…

永善公司招聘网络红人主播,高薪招募线上策略娱乐主播

永善公司招聘网络红人主播&#xff0c;高薪招募线上策略娱乐主播#主播#高薪职业#直播 招聘 公司直招网络主播多名&#xff01; 直播平台&#xff1a;抖音、酷狗 不收任何费用 没有经验也没有关系只要你有梦想&#xff0c;只要你肯努力并 且有一颗想发大财的野心&#xff…