Hive 本地调试方法

关键词: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类进行交互访问
原文地址:https://www.cnblogs.com/lhfcws/p/7761929.html