1. 程式人生 > >Hive 本地調試方法

Hive 本地調試方法

tcl 客戶 原因 lips thrift ast strong nbsp 需要

關鍵詞: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 -Dmaven.test.skip=true 。
    記得要指定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 本地調試方法