Hive On Tez 进度条不显示问题修复

2023-05-16

问题描述

用Hive客户端使用beeline命令执行SQL的时候,有些情况下会显示进度条,有些情况不显示进度条。

显示进度条的情况

  1. 设置默认执行引擎为Tez
    <property>
    	<name>hive.execution.engine</name>
    	<value>tez</value>
    </property>
    
  2. 使用客户端执行SQL的时候,显示进度条,如下图所示:
    在这里插入图片描述

不显示进度条的情况

  1. 设置默认引擎为mr
    <property>
    	<name>hive.execution.engine</name>
    	<value>mr</value>
    </property>
    
  2. 通过客户端切换执行引擎为tez
    set hive.execution.engine=tez;
    
  3. 切换引擎后执行同一个SQL,不显示进度条

源码分析

BeelineInPlaceUpdateStream.java

在这里插入图片描述

  1. 通过追踪源码发现,客户端收到TProgressUpdateResp后,会调用BeelineInPlaceUpdateStreamupdate()方法进行更新任务的执行情况,当客户端显示进度条时update()方法会走下面的分支,即调用InPlaceUpdaterender()方法渲染进度条。
  2. 当默认执行引擎为mr,在客户端通过set hive.execution.engine=tez;命令切换为tez后,执行SQL时update()方法走的为上面分支,此时不显示进度条,即TProgressUpdateRespstatusNOT_AVAILABLE时不显示进度条。

ThriftCLIService.java

在这里插入图片描述
在这里插入图片描述

  1. 通过进一步追踪代码发现,TProgressUpdateRespstatus是在ThriftCLIService中通过mapper.forStatus(progressUpdate.status)进行设置的,从上图可以看出该mapperforStatus有三个实现类,在当前问题中我们只需关注TezProgressMonitorStatusMapper和默认实现类即可。
  • TezProgressMonitorStatusMapper.java
    在这里插入图片描述
  • ProgressMonitorStatusMapper.DEFAULT
    在这里插入图片描述
  1. 此时不难看出,当mapperProgressMonitorStatusMapper.DEFAULT,也就是为初始值时,responsestatus永远为NOT_AVAILABLE,即始终不显示进度条。
  2. 那么为什么我们已经通过命令设置了执行引擎为tez,"tez".equals(hiveConf.getVar(ConfVars.HIVE_EXECUTION_ENGINE))还是false呢?
  3. 进一步追踪发现此处的hiveConf是在HiveServer在启动时从配置文件中读取的,而配置文件中我们设置的默认引擎还是为mr,故此处还是false。
  4. 通过对比分析发现在客户端通过命令行修改的执行引擎只是影响了当前Session中的配置,不会影响hiveConf中的配置,因此要想让此处返回true,只需将判断条件改为从session中获取执行引擎即可。
    在这里插入图片描述
  5. 通过测试验证,该修改方法可以解决我所遇到的问题。

问题总结反思

  1. 回头看最终的修改方法,发现其实改法很简单,难点在于分析源码,梳理出客户端显示进度条的完整调用链,定位出是否显示进度条的判断条件。
  2. 对比修改前后的判断条件,判断执行引擎是否为tez,一个是从配置文件获取,一个是从session回话中获取。结合我遇到的问题,Hive作为开源框架这种问题应该时很常见,也是很容易考虑到的。Hive始终从配置文件获取,不知道这是出于某些因素的考虑还是开源的bug,如果有了解的欢迎交流~~😊💪
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive On Tez 进度条不显示问题修复 的相关文章

随机推荐

  • OpenWRT 安装 PassWall

    本文地址 xff1a blog lucien ink archives 537 访问 OpenWRT Download Server packges xff0c 找到自己的架构 xff0c 以 x86 64 为例 xff1a 在 etc o
  • ARM:系统移植2

    1 u boot启动程序 1 获取uboot源码渠道 1 xff09 u boot官方 xff1a https ftp denx de pub u boot 2 xff09 开发板厂家 3 xff09 芯片厂家 4 xff09 主管领导 x
  • ChatGPT 相关资料收集

    本文地址 xff1a blog lucien ink archives 538 本文用来收集各种和生成式模型相关的内容 xff0c 由于 ChatGPT 是其代表 xff0c 也是会被写入人类历史进程的一个名字 xff0c 所以便用 Cha
  • Debian配置apache2以及CA

    1 安装apache2 apt install y apache2 systemctl start apache2 启动服务 修改apache2配置文件 cd etc apache2 cp sites available default s
  • Debian之配置squid代理缓存

    1 安装服务 apt install squid 2 修改配置 vim etc squid squid conf set nu 显示行号 1390 转到第1390行 第1391行 http access allow localhost 修改
  • JAVA判断回文数的两种方法

    回文数是指正序 xff08 从左向右 xff09 和倒序 xff08 从右向左 xff09 读都是一样的整数 目录 方法一方法二 方法一 通过 61 61 String valueOf 方法把整数转换为字符串 xff0c 再用toCharA
  • java设置Access-Control-Allow-Origin允许多域名访问

    对于前后端分离的项目难免会遇到跨域的问题 xff0c 在设置跨域的问题中有许多需要注意的事情 xff0c 如本次将要将的设置Access Control Allow Origin使其允许多域名请求 1 设置允许多域名访问最简单的方法是使用通
  • Debian10配置静态ip

    查看网卡 xff1a ip addr 修改网卡网络地址配置 xff1a vim etc network interfaces 配置模板 xff1a auto span class token punctuation span 网卡名 spa
  • Docker(四)Image、Container

    一 Image镜像 Docker把应用程序及其依赖 xff0c 打包在image文件里面 只有通过这个文件 xff0c 才能生成Docker容器 image文件可以看作是容器的模板 Docker根据image文件生成容器的实例 同一个ima
  • 报错:ModuleNotFoundError: No module named ‘PIL‘

    运行代码的时候报错 xff0c 如图所示 xff1a 表示python中没有配置pillow库 纠正的步骤 xff1a window 43 R xff0c 并且在框中输入cmd 进入python所在的目录下 xff0c cd appdata
  • Window10 Excel复制粘贴卡死

    Windows10 Excel复制粘贴卡死 excel复制大量数据有时卡死 xff0c 关机重启也没用 网上找了好多方法没效果 xff0c 突然想到windows10有个云剪切板功能 xff0c 就想关了试试没想到解决了 xff0c 哈哈哈
  • (Latex)期刊论文里的数学字符怎么打出来的?

    xff08 Latex xff09 期刊论文里的数学字符怎么打出来的 导入包试一试 by 今天不飞了 最近边查文献边写文章 xff0c 看到别人文章公式里的变量那叫一个花里胡哨 xff0c 再看看自己的 不能忍 xff0c 我也要 于是搜集
  • 面试:ARM篇

    1 IIC I2C 1 由日本飞利浦公司研发的一种 串行半双工的总线 2 采用两根线 SCL 和 SDA 特点 1 硬件比较简单 比较节约资源的一种总线 2 主要用于两个芯片之间的通信 也可以是多主机多从机 但基本不用 3 传输速度一般在4
  • 工作日志——首次通过k8s Elasticsearch获取新建Pod的日志缓慢的原因

    使用k8s Elasticsearch查看pod日志的时候偶尔会遇到这样的情况 xff0c 在创建完容器并运行后去查看日志的时候总是加载不出来 xff0c 需要等待十几秒甚至一分钟才能加载 我 有幸 被分配来解决这个问题 xff0c 经过一
  • WSL2 安装 Ubuntu-20.04 子系统CUDA(Win10和Win11)

    1 安装WSL的CUDA驱动 驱动下载地址 xff1a https developer nvidia com cuda wsl 选好你自己的显卡类型 下载完成后直接默认安装就行 2 安装WSL2 xff08 使用Ubuntu 20 04版本
  • ROS MELODIC ARM64的一些源

    默认注释了源码镜像以提高 apt update 速度 xff0c 如有需要可自行取消注释 deb https mirrors tuna tsinghua edu cn ubuntu ports bionic main restricted
  • 手写spring核心原理Version3

    上两篇博文手写spring核心原理Version1和手写spring核心原理Version2分别介绍了如何完成一个自动注入 以及如何用设计模式进行重构 xff0c 接下来这篇将仿照SpringMVC对参数列表以及methodMapping进
  • Netty Reactor线程模型

    前两篇博文分别介绍了Java 线程模型 xff1a BIO NIO和Reactor线程模型 xff0c 本篇博文将介绍Reactor线程模型在Netty中的实际应用 Netty模型 Netty模型的简单介绍 Netty 主要基于主从 Rea
  • JVM:类的加载过程

    类的加载过程 类的加载过程整体可以分为五个阶段 xff1a 加载 验证 准备 解析 初始化 xff0c 其中验证 准备和解析又被概括为链接 加载 通过一个类的全限定名获取定义此类的二进制字节流 xff1b 将这个字节流所代表的的静态存储结构
  • Hive On Tez 进度条不显示问题修复

    问题描述 用Hive客户端使用beeline命令执行SQL的时候 xff0c 有些情况下会显示进度条 xff0c 有些情况不显示进度条 显示进度条的情况 设置默认执行引擎为Tez lt property gt lt name gt hive