hive启动debug问题
最近在debug hive的一个bug,之前都是使用打印日志来跟踪源码,这种方式效率比较低(每次更改了源码都要重新编译并替换线上的jar包),java的应用可以支持remote debug的,hive也不例外,主要是通过hive --debug来实现.
在运行hive --debug时遇到如下问题:
ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.
Error occurred during initialization of VM
agent library failed to init: jdwp
根据错误信息,可以看到是由于重复的jdwp参数导致。hive其实是一个shell脚本,追踪其运行情况:
cd ${HIVE_HOME}/bin;sh -x ./hive --debug
查看hive --debug的调用情况:
if [ "$DEBUG" ]; thenif [ "$HELP" ]; thendebug_helpexit 0elseget_debug_params "$DEBUG"export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS $HIVE_MAIN_CLIENT_DEBUG_OPTS"fi fi
这里是:
HIVE_MAIN_CLIENT_DEBUG_OPTS=' -XX:+UseParallelGC -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=y'
HIVE_MAIN_CLIENT_DEBUG_OPTS 变量是在${HIVE_HOME}/bin/ext/debug.sh 中,这个脚本控制了debug的参数,比如说端口
get_debug_params(){set_debug_defaultsparse_debug $1# For Debug -XX:+UseParallelGC is needed, as it is a (unfortunately not perfect)# workaround for JVM 6862295 bug, that affects some JVMs still in useif does_jvm_support_ti; thenexport HIVE_MAIN_CLIENT_DEBUG_OPTS=" -XX:+UseParallelGC -agentlib:jdwp=transport=dt_socket,server=y,$port,$main_suspend"export HIVE_CHILD_CLIENT_DEBUG_OPTS=" -XX:+UseParallelGC -agentlib:jdwp=transport=dt_socket,server=y,$child_suspend"elseexport HIVE_MAIN_CLIENT_DEBUG_OPTS=" -XX:+UseParallelGC -Xdebug -Xrunjdwp:transport=dt_socket,server=y,$port,$main_suspend"export HIVE_CHILD_CLIENT_DEBUG_OPTS=" -XX:+UseParallelGC-Xdebug -Xrunjdwp:transport=dt_socket,server=y,$child_suspend"fi
最终hive运行的命令为:
exec ${HADOOP_HOME}/bin/hadoop jar hive-cli-0.13.1.jarorg.apache.hadoop.hive.cli.CliDriver --hiveconf hive.aux.jars.path=xxxxx
而在${HADOOP_HOME}/bin/hadoop中,设置HADOOP_OPTS时,又引用了HADOOP_CLIENT_OPTS这个变量,就导致jdwp 的参数重复了
只需要注释下面一行即可以:
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
这其实是一个bug:
相关的bug id
https://issues.apache.org/jira/browse/HADOOP-9455
https://issues.apache.org/jira/browse/HIVE-3936
bug描述:
HADOOP_CLIENT_OPTS appended twice causes JVM failures
在官方提供的bug id中可以看到hive0.13是fix这个bug的,具体的patch如下:
diff --git bin/hive bin/hive index 40e2c75..434ea6c 100755 --- bin/hive +++ bin/hive @@ -251,7 +251,6 @@ if [ "$DEBUG" ]; thenelseget_debug_params "$DEBUG"export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS $HIVE_MAIN_CLIENT_DEBUG_OPTS" - export HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"fifi
经过测试,这个path并没有生效。
转载于:https://blog.51cto.com/caiguangguang/1564148
hive启动debug问题相关推荐
- 【整理】ABAP快捷启动Debug三种方式
ABAP快捷启动Debug三种方式 1./H :Start Debugger 正常的Debug模式,会从头开始执行: 2./HS :Start System Debugging 区别于"/H ...
- hadoop hive 2.1.1 将Hive启动为服务
我们之前使用的Shell方式与Hive交互只是Hive交互方式中的一种,还有一种就是将Hive启动为服务,然后运行在一个节点上,那么剩下的节点就可以使用客户端来连接它,从而也可以使用Hive的数据分析 ...
- 详解:hive启动hiveserver2连JDBC报错:Could not open client transport with JDBC Uri 解决方案
hive启动hiveserver2连JDBC报错:Could not open client transport with JDBC Uri 解决方案 [hadoop@hadoop001 bin]$ ...
- hive启动报错:Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
hive启动时遇到以下错误: Exception in thread "main"java.lang.RuntimeException: java.lang.IllegalArgu ...
- Hive启动报错:java.lang.ClassNotFoundException: org.apache.tez.dag.api.TezConfiguration
<!--Hive启动报错:Caused by: java.lang.ClassNotFoundException: org.apache.tez.dag.api.TezConfiguration ...
- Hive启动报错 java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang
Hive启动报错 [lili@hadoop102 hive]$ bin/hive which: no hbase in (/usr/lib64/qt-3.3/bin:/usr/local/bin:/b ...
- Hive 启动报错java.net.URISyntaxException: Relative path in absolute URI 解决方法
linux安装hive 遇到问题:Hive 启动报错java.net.URISyntaxException: Relative path in absolute URI 解决方法 方法记录 提示:这里 ...
- Hive启动和简单指令总结
Hive 启动总结 1. 背景 作为传统的服务器端程序,hive具备多种启动方式 java api(jdbc).shell客户端.web页面 jdbc https://mvnrepository.co ...
- centos7 hive启动报错 没有到主机的路由,防火墙已关闭
问题 hive启动报错,防火墙已关闭 at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at org.datanucl ...
- VSCode启动Debug模式调试Python文件
VSCode启动Debug模式调试Python文件 一.调试一般的Python文件 1.点击Extensions安装扩展插件 2.在输入框中输入Python,点击安装 3.点击界面中的"Ru ...
最新文章
- SAP S/4HANA BP功能
- Node 深入Stream(2)
- 每日一皮:强大的sudo ...
- SSIS的文件系统任务实例(zz)
- maven各个属性参数详解
- python字典排序及字典集合去重高阶教程
- linux脚本expect分区,linux – 从不同位置执行Expect脚本
- J2EEd 13个规范
- Markdown效率参考手册
- 初级程序员面试不靠谱指南(四)
- Windows程序设计(5):移动窗口、调整窗口大小
- r语言 python 股票_如何用R语言下载到国内股票数据?
- TOGAF ADM指导
- oracle alert下的文件,Oracle 11g alert文件的变化 --
- cimiss java,cimis
- js使用双层for循环实现倒三角形、正三角形
- 基于Keilv5新建STM32F030工程
- 数据可视化 | Tableau从入门到高手 入门联接关系数据预处理
- uni-app 即时聊天:朋友圈
- 邮件 黑名单 白名单 灰名单
热门文章
- qt mdi 子窗口关闭再打开_QT 信号的使用方法
- 【机器学习系列】变分推断第二讲:基于Mean Field的变分推断解法
- 估计理论(5):BLUE的定义(6.3)
- 关于Activity的四种启动模式详解
- 【PRML 学习笔记】第一章 - 介绍 (Introduction)
- 241.为运算表达式设计优先级(力扣leetcode) 博主可答疑该问题
- 68.x的平方根(力扣leetcode) 博主可答疑该问题
- kuka机器人齿轮箱油_库卡KUKA机器人保养润滑油00-144-898
- mysql表格字放大_删除MySQL表中内容,表大小反而变大了
- Linux源码包和脚本安装包的安装方法