关键词:hive, debug

本地调试(local debug)

Hive 可分为 exec (hive-exec,主要对应源码里的ql目录) 和 metastore 两部分,其中exec对外有两种接口方式 CLIDriver 和 HiveServer2的ThriftCLIService。前者对应的就是直接执行hive命令的command line,后者对应就是thrift直连或jdbc的连接方式,因此这里其实有个知识点:hive命令的执行是不经过hiveserver2的服务的,虽然底层代码是共用的。而metastore对外主要是以Thrift方式为主,并实现了一个客户端 HiveMetaStoreClient。

环境准备

  • 首先,需要在本地部署好Hadoop+HDFS并启动HDFS服务,并且HDFS的目录/tmp 和 /user/hive 目录确保 hive用户有可写权限(如果hive的doAs配置关了,想调试storageBased权限的自己额外去注意HDFS权限的配置即可)。
  • MySQL并不是必须的,如果你不关注metastore的存储,则无需指定相关的metastore配置,Hive会自动选择和初始化嵌入式数据库derby作为metastore的存储。
  • 一个好的IDE,Idea或Eclipse,本文用的是Idea。
  • maven3,JDK1.7+

代码准备

  • 去Hive官网或对应发行版的官网(HDP、CDH)等去找到官方提供的对应版本的Hive源码下载
  • 去Hive官网或对应发行版的官网(HDP、CDH)等去找到官方提供的对应版本的Hive 运行版下载 。需要运行版的原因是用hive传统方式启动需要hive/lib/下的依赖jar。
  • 先对源码打包一次,防止导入IDE时太慢。命令如下:
    mvn clean package -P hadoop-2 -DskipTests 

    记得要指定hadoop版本的profile,初次打包没什么问题可以跳过测试,不然要挺久的。然后大陆连apache central repo有时可能会超时,超时请在不同时间段多试几次或使用梯子。

  • 源码maven项目导入IDE

调试exec

  • 在Hive运行版目录下执行 hive --service metastore 启动 metastore
  • 将本地Hadoop的core-site.xml放到 hive 源码目录的 src/main/resources 下,重新打包(如有必要)
  • debug模式运行hive-cli中的CLIDriver类,此时控制台可见hive command line,可以输入命令然后再ql的相应代码中打断点进行单步或拦截。

调试metastore

  • 以debug模式启动HiveMetastore
  • 另外写testcase使用HiveMetastoreClient类进行交互访问

Hive 本地调试方法的更多相关文章

  1. hadoop本地调试方法

    Mapreduce 是Hadoop上一个进行分布式数据运算和统计的框架,但是每次运行程序的时候都需要将程序打包并上传的集群环境中运行,这就会让程序的调试变得十分不方便.所以在这里写下这篇博客和大家交流 ...

  2. lucene-solr本地调试方法

    1.下载并编译lucene-solr的源代码,并导入 eclipse sts等 2.修改SolrDispatchFilter的solr.solr.home属性,我们这里将其直接修改为一个本地绝对路径, ...

  3. fiddler本地调试

    参考:https://blog.csdn.net/letasian/article/details/75021656 有关fiddler基础用法的介绍详见我的上一篇博客:http://www.cnbl ...

  4. spark 2.x在windows环境使用idea本地调试启动了kerberos认证的hive

    1 概述 开发调试spark程序时,因为要访问开启kerberos认证的hive/hbase/hdfs等组件,每次调试都需要打jar包,上传到服务器执行特别影响工作效率,所以调研了下如何在window ...

  5. Oracle在本地调试成功读取数据,但是把代码放到服务器读不出数据的解决方法。

    用MVC EF框架开发项目,数据库用的是Oracle,本地调试的时候一切正常,但是把代码编译之后放到服务器就会读不出数据. 原因:本地调试环境与服务器环境不一致. 办法:在服务器上装ODT.NET组件 ...

  6. 【matlab】MATLAB程序调试方法和过程

    3.8  MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...

  7. 在本地调试微信项目(C#)

    之前一人负责微信的项目,那时2014年LZ还没毕业..啥都不懂,为此特别感谢@SZW,没有你的框架,我可能都无从下手 当时做项目最麻烦的就是调试,因为很多页面都要使用 网页授权获取用户信息 在电脑上打 ...

  8. Perl的调试方法

    来源: http://my.oschina.net/alphajay/blog/52172 http://www.cnblogs.com/baiyanhuang/archive/2009/11/09/ ...

  9. 《转》VS2010进行远程调试方法总结

    ---恢复内容开始--- 原文地址:http://blog.sina.com.cn/s/blog_a459dcf5010153o7.html 假设现在有A.B两台PC机. VS2010安装在A机器上, ...

随机推荐

  1. apt-get install 出问题怎么办?

    有时候在用apt-get安装包的时候总是会莫名其妙出现各种问题,建议先把如下命令行按顺序敲一遍,基本上都能解决 sudo apt-get clean sudo apt-get update sudo ...

  2. LeetCode 解题总结

    1. 最长合法括号串 给定只包含'('和')'的字符串,找出最长合法括号串的长度. Example 1: Input: "(()"  Output: 2    Explanatio ...

  3. Beta 冲刺(6/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(6/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 ppt制作 视频拍摄 接下来的计划 准备答辩 ...

  4. java基础知识三 流

    Java 流(Stream).文件(File)和IOJava.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型 ...

  5. linux统配符

    linux通配符注意:linux的通配符和三剑客的表达式是不一样的,因为,代表的意义是有较大区别的.通配符一般用户命令行bash环境,而linux正则表达式用于grep,sed,awk场景. *    ...

  6. VMware与Hyper-V的冲突解决 VMware Workstation 与 Device/Credential Guard 不兼容 解决方案

    win10专业版官方解决方案https://kb.vmware.com/s/article/2146361 win10家庭版解决方案win10家庭版本身是不支持Hyper-V服务的,但是如果是“win ...

  7. python-装饰器&生成器&迭代器&推导式

    一:普通装饰器 概念:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能,为已存在的对象添加某个功能 普通装饰器编写的格式 def 外层函数(参数) def 内层函数(*args,* ...

  8. angular2报错

    1.运行ng serve的时候卡在95% emitting LicenseWebpackPlugin 放弃使用cnpm,使用yarn 删除node_modules (不需要删除project目录重新n ...

  9. centos6.9关闭防火墙

    /etc/init.d/iptables stop     临时关闭防火墙, chkconfig iptables off    永久关闭防火墙 查看防火墙状态  chkconfig --list i ...

  10. gulp 粗粗学习 记录下

    看视频学习 粗粗记录下 以便以后学习 1.初记录 gulp.task //定义一个任务 gulp.src //锁定到做task任务的文件路径 gulp.dest //锁定到任务做完后文件去向的路径 g ...