Hive原始碼閱讀之路
Hive原始碼閱讀(1)閱讀環境搭建
前言:讓學習成為一種習慣
工作已經兩年多了,各種各樣的大資料框架也使用過,各種官網也翻了很多,但是對於框架的底層原始碼從未細細的瞭解過,有一位大佬對我說如果你遇到瓶頸就去看看原始碼,看看別人的程式碼怎麼寫,看看別人的思想,然後總結歸納,與自己的思想相結合,於是我就有了閱讀原始碼的計劃,說實話這個計劃我糾結了很久,一直未付出實踐,糾結Flink,Spark,Hive,Hadoop原始碼我究竟該從那一方面下手,經過我苦苦思考,最終將目光放在了ApacheHive之上,Hive身為主流的資料倉儲框架,可以說已經很成熟了,並且應用廣泛,而且相容Spark,Flink,所以我決定先從Hive原始碼開始,原始碼閱讀不是說你看這人家的原始碼全部讀一遍就是閱讀原始碼,這樣無非是浪費時間,首先定義重點,我們如何閱讀Hive原始碼,應該從那裡下手,應該閱讀那幾部分的原始碼,廢話不多說,我們開始
環境準備
我推薦系統Linux或者Mac作為主系統,測試過win但是沒有成功,準備以下環境
- JDK這是必備的,個人目前主要是使用JDK8;
- Hadoop單機環境,沒必要叢集環境,因為我們只是為了閱讀原始碼,不是為了去執行計算;
- Spark環境,這個隨自己,主要是我自己本身就有這個環境,如果是新環境Hadoop+Hive就夠了;
- Maven這個是必須的;
Hive原始碼下載
Hive原始碼目錄
hive三個最重要的元件:
serde: 這個元件是 hive內建的一些序列化解析類,此元件允許使用者自己開發自定義序列化、反序列化檔案解析器
MetaStore: hive的後設資料伺服器,用來存放資料倉儲中所有表和分割槽的資訊,hive後設資料建表sql、升級sql指令碼都存放在此目錄下
ql: 此元件用於解析sql生成執行計劃(hive核心包,熟讀此包,可瞭解hive執行流程核心)
其他元件
cli: hive命令的入口,用於處理命令列提交作業
service: 此元件所有對外api介面的服務端(通過thrift實現),可用於其他客戶端與hive互動,比如jdbc。
common: hive基礎程式碼庫,hive各個元件資訊的傳遞也是有此包HiveConf類來管理。
ant: 此元件包含一些ant任務需要的基礎程式碼
bin: 此元件包涵hive裡的所有指令碼,包括hivecli的指令碼
beeline: HiveServer2提供的一個新的命令列工具Beeline
hcatalog: 是apache開源的對於表和底層資料管理統一服務平臺,HCatalog底層依賴於Hive Metastore
findbugs: Findbugs是一個在java程式中查詢bug的程式,它查詢bug模式的例項,也就是可能出錯的程式碼例項,注意Findbugs是檢查java位元組碼,也就是*.class檔案。
hwi: hive web頁面的介面
shims: shims相關類是用來相容不同的hadoop和hive版本
llap: 是基於tez的一種近實時查詢方案
hive輔助元件
conf: 此目錄包涵hive配置檔案hive-default.xml、hive-site.xml
data: hive測試所用資料
lib: hive執行期間依賴的jar
更多詳細資訊可以到官網看 ApacheHive
編譯原始碼
- 編譯命令:mvn clean package -DskipTests -Phadoop-2 -Pdist
mvn clean install -DskipTests -Phadoop-2 -Pdist
(二選一,注意依賴的Hadoop版本)
- 編譯完成後匯入IDEA
配置Hive本地除錯
- 配置Hadoop位置
進入/opt/software/apache-hive-1.2.2-src/packaging/target/apache-hive-1.2.2-bin/apache-hive-1.2.2-bin/conf
目錄複製目錄下的hive-env.sh.template為hive-env.sh(cp命令拷貝一份就行)
新增Hadoop所在目錄:export HADOOP_HOME=/opt/environment_variable/hadoop-2.6.0 - 初始化Hive後設資料資訊
進入/opt/software/apache-hive-1.2.2-src/packaging/target/apache-hive-1.2.2-bin/apache-hive-1.2.2-bin
執行命令bin/schematool -dbType derby -initSchema(這裡為了方便使用的是derby,也可設定為MySQL)
看到結果,說明成功;(圖都丟了,所以沒辦法,這個裝過Hive的應該都沒問題) - 啟動HiveDebug
hive --debug --hiveconf hive.root.logger=DEBUG,console
出現Listening即為成功
./hive --debug --hiveconf ^Cve.root.logger=DEBUG,console
Listening for transport dt_socket at address: 8000
配置IDEA-DEBUG(注意埠和Host)
開始Debug,配置成功圖片一張,入口類選擇了CLi,想看一下具體的原始碼執行流程
這裡說一下,我沒有解決程式碼報紅,因為爆紅也不影響Debug,但是有時間的最好解決一下,因為如果不解決會很坑的,本次文章就到這裡拉,如果覺得作者的文章不錯,點個贊吧,開始我的原始碼閱讀之旅,之後每週都會更新一篇原始碼閱讀心得,在說一下如果有那位大佬測試了CDH版本的希望可以指點一下小弟,感謝閱讀
相關文章
- 我的原始碼閱讀之路:redux原始碼剖析原始碼Redux
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- ReactorKit原始碼閱讀React原始碼
- AQS原始碼閱讀AQS原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- HashMap 原始碼閱讀HashMap原始碼
- delta原始碼閱讀原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- NGINX原始碼閱讀Nginx原始碼
- Mux 原始碼閱讀UX原始碼
- HashMap原始碼閱讀HashMap原始碼
- fuzz原始碼閱讀原始碼
- RunLoop 原始碼閱讀OOP原始碼
- express 原始碼閱讀Express原始碼
- muduo原始碼閱讀原始碼
- stack原始碼閱讀原始碼
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼SQL原始碼
- JDK原始碼閱讀:Object類閱讀筆記JDK原始碼Object筆記
- Laravel 原始碼閱讀 - QueueLaravel原始碼
- Vollery原始碼閱讀(—)原始碼
- 使用OpenGrok閱讀原始碼原始碼
- 如何閱讀Java原始碼?Java原始碼
- buffer 原始碼包閱讀原始碼
- 原始碼閱讀技巧篇原始碼
- 如何閱讀框架原始碼框架原始碼
- 再談原始碼閱讀原始碼
- Laravel 原始碼閱讀 - EloquentLaravel原始碼
- 如何閱讀jdk原始碼?JDK原始碼
- express 原始碼閱讀(全)Express原始碼
- Vuex原始碼閱讀分析Vue原始碼
- React原始碼閱讀:setStateReact原始碼
- ArrayList原始碼閱讀(增)原始碼
- ThreadLocal原始碼閱讀thread原始碼
- snabbdom 原始碼閱讀分析原始碼
- koa原始碼閱讀[0]原始碼