導航:首頁 > 源碼編譯 > hive源碼編譯

hive源碼編譯

發布時間:2023-01-03 05:22:38

① Hive入門概述

1.1 什麼是Hive

Hive:由Facebook開源用於解決海量結構化日誌的數據統計。

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,並提供類SQL查詢功能。本質是:將HQL轉化成MapRece程序

Hive處理的數據存儲在HDFS

Hive分析數據底層的實現是MapRece

執行程序運行在Yarn上

1.2 Hive的優缺點

1.2.1 優點

操作介面採用類SQL語法,提供快速開發的能力(簡單、容易上手)。

避免了去寫MapRece,減少開發人員的學習成本。

Hive的執行延遲比較高,因此Hive常用於數據分析,對實時性要求不高的場合。

Hive優勢在於處理大數據,對於處理小數據沒有優勢,因為Hive的執行延遲比較高。

Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。

1.2.2 缺點

1.Hive的HQL表達能力有限

(1)迭代式演算法無法表達

(2)數據挖掘方面不擅長

2.Hive的效率比較低

(1)Hive自動生成的MapRece作業,通常情況下不夠智能化

(2)Hive調優比較困難,粒度較粗

1.3 Hive架構原理

1.用戶介面:Client

CLI(hive shell)、JDBC/ODBC(java訪問hive)、WEBUI(瀏覽器訪問hive)

2.元數據:Metastore

元數據包括:表名、表所屬的資料庫(默認是default)、表的擁有者、列/分區欄位、表的類型(是否是外部表)、表的數據所在目錄等;

默認存儲在自帶的derby資料庫中,推薦使用MySQL替代derby存儲Metastore

3.Hadoop

使用HDFS進行存儲,使用MapRece進行計算。

4.驅動器:Driver

(1)解析器(SQL Parser):將SQL字元串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行語法分析,比如表是否存在、欄位是否存在、SQL語義是否有誤。

(2)編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。

(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。

(4)執行器(Execution):把邏輯執行計劃轉換成可以運行的物理計劃。對於Hive來說,就是MR/Spark。

Hive通過給用戶提供的一系列交互介面,接收到用戶的指令(SQL),使用自己的Driver,結合元數據(MetaStore),將這些指令翻譯成MapRece,提交到Hadoop中執行,最後,將執行返回的結果輸出到用戶交互介面。

1.4 Hive和資料庫比較

由於 Hive 採用了類似SQL 的查詢語言 HQL(Hive Query Language),因此很容易將 Hive 理解為資料庫。其實從結構上來看,Hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述 Hive 和資料庫的差異。資料庫可以用在 Online 的應用中,但是Hive 是為數據倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。

1.4.1 查詢語言

由於SQL被廣泛的應用在數據倉庫中,因此,專門針對Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者可以很方便的使用Hive進行開發。

1.4.2 數據存儲位置

Hive 是建立在 Hadoop 之上的,所有 Hive 的數據都是存儲在 HDFS 中的。而資料庫則可以將數據保存在塊設備或者本地文件系統中。

1.4.3 數據更新

由於Hive是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive中不建議對數據的改寫,所有的數據都是在載入的時候確定好的。而資料庫中的數據通常是需要經常進行修改的,因此可以使用 INSERT INTO … VALUES 添加數據,使用 UPDATE … SET修改數據。

1.4.4 索引

Hive在載入數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,因此也沒有對數據中的某些Key建立索引。Hive要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於 MapRece 的引入, Hive 可以並行訪問數據,因此即使沒有索引,對於大數據量的訪問,Hive 仍然可以體現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,資料庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。

1.4.5 執行

Hive中大多數查詢的執行是通過 Hadoop 提供的 MapRece 來實現的。而資料庫通常有自己的執行引擎。

1.4.6 執行延遲

Hive 在查詢數據的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapRece框架。由於MapRece 本身具有較高的延遲,因此在利用MapRece 執行Hive查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即數據規模較小,當數據規模大到超過資料庫的處理能力的時候,Hive的並行計算顯然能體現出優勢。

1.4.7 可擴展性

由於Hive是建立在Hadoop之上的,因此Hive的可擴展性是和Hadoop的可擴展性是一致的(世界上最大的Hadoop 集群在 Yahoo!,2009年的規模在4000 台節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴展行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴展能力也只有100台左右。

1.4.8 數據規模

由於Hive建立在集群上並可以利用MapRece進行並行計算,因此可以支持很大規模的數據;對應的,資料庫可以支持的數據規模較小。

② spark thrift server 與 網易 kyuubi thrift server

thrift server可以實現通過jdbc, beeline等工具,實現連接到spark集群,並提交sql查詢的機制。

默認情況下,cdh安裝的spark沒有包含thrift server模塊,因此我們需要重新編譯spark。

另外,為了不影響cdh自帶的spark,而且spark目前都是基於yarn運行的,本身也沒有什麼獨立的服務部署(除了history sever)。

所以,在一個集群中,可以部署安裝多個版本的spark。

我們使用源碼編譯的spark 2.4.0(其中hive的版本是1.2.1)

cdh集成的spark版本和Hive版本如下:

使用jdk1.8
修改spark提供的mvn,使用自行安裝的maven 3.8.1

使用make-distribution.sh可以幫助與我們編譯之後打包成tgz文件

修改pom.xml文件的配置如下。

最後,執行編譯命令如下:

這樣打出的包,就含有thrift server的jar包了。

最終打包文件,根目錄下。

之後就是解壓到其他目錄下後即可。

將hive-site.xml的文件連接過來,這樣spark就可以讀取hive的表了。

為了確保spark提交到yarn上運行,需要配置

cp spark-defaults.conf.template spar-defaults.conf

另外,可以在spark-env.sh中設置環境變數。

HADOOP_CONF_DIR

環境變數,也可以在/etc/profile中設置

啟動日誌可以查看,注意下埠佔用問題,如下。

啟動時候,使用beeline工具連接上,主要這里不用使用cdh默認安裝hive提供的beeline工具,應為版本太高。

使用編譯後spark生成beeline工具

參考beeline使用教程。

https://github.com/apache/incubator-kyuubi

kyuubi是基於thrift sever二次開發,在系能和安全上優於thrift server。

鑒於目前hive的版本是2.1,而最新的kyuubi的hive是2.3,所以採用前天版本的kyuubi,採用0.7版本,保證hive的版本小於當前集群中的hive版本。

使用build目錄下的dist腳本進行編譯和打包。

編譯成功後,會在更目錄下出現tar.gz的壓縮文件,如上圖。

之後解壓到目錄下。

配置bin/kyuubi-env.sh腳本,設置spark路徑

執行bin/start-kyuubi.sh命令即可。

訪問的方式同樣採用beelin,注意使用上面章節的beeline工具。

訪問後,可以通過beeline訪問到hive的表(在spark中已經配置了hive-site.xml)

!connect jdbc: hive2://xxxx:10009 即可。

③ 大數據分析應該掌握哪些基礎知識

Java基礎語法

· 分支結構if/switch

· 循環結構for/while/do while

· 方法聲明和調用

· 方法重載

· 數組的使用

· 命令行參數、可變參數

IDEA

· IDEA常用設置、常用快捷鍵

· 自定義模板

· 關聯Tomcat

· Web項目案例實操

面向對象編程

· 封裝、繼承、多態、構造器、包

· 異常處理機制

· 抽象類、介面、內部類

· 常有基礎API、集合List/Set/Map

· 泛型、線程的創建和啟動

· 深入集合源碼分析、常見數據結構解析

· 線程的安全、同步和通信、IO流體系

· 反射、類的載入機制、網路編程

Java8/9/10/11新特性

· Lambda表達式、方法引用

· 構造器引用、StreamAPI

· jShell(JShell)命令

· 介面的私有方法、Optional加強

· 局部變數的類型推斷

· 更簡化的編譯運行程序等

MySQL

· DML語言、DDL語言、DCL語言

· 分組查詢、Join查詢、子查詢、Union查詢、函數

· 流程式控制制語句、事務的特點、事務的隔離級別等

JDBC

· 使用JDBC完成資料庫增刪改查操作

· 批處理的操作

· 資料庫連接池的原理及應用

· 常見資料庫連接池C3P0、DBCP、Druid等

Maven

· Maven環境搭建

· 本地倉庫&中央倉庫

· 創建Web工程

· 自動部署

· 持續繼承

· 持續部署

linux

· VI/VIM編輯器

· 系統管理操作&遠程登錄

· 常用命令

· 軟體包管理&企業真題

Shell編程

· 自定義變數與特殊變數

· 運算符

· 條件判斷

· 流程式控制制

· 系統函數&自定義函數

· 常用工具命令

· 面試真題

Hadoop

· Hadoop生態介紹

· Hadoop運行模式

· 源碼編譯

· HDFS文件系統底層詳解

· DN&NN工作機制

· HDFS的API操作

· MapRece框架原理

· 數據壓縮

· Yarn工作機制

· MapRece案例詳解

· Hadoop參數調優

· HDFS存儲多目錄

· 多磁碟數據均衡

· LZO壓縮

· Hadoop基準測試

Zookeeper

· Zookeeper數據結果

· 內部原理

· 選舉機制

· Stat結構體

· 監聽器

· 分布式安裝部署

· API操作

· 實戰案例

· 面試真題

· 啟動停止腳本

HA+新特性

· HDFS-HA集群配置

Hive

· Hive架構原理

· 安裝部署

· 遠程連接

· 常見命令及基本數據類型

· DML數據操作

· 查詢語句

· Join&排序

· 分桶&函數

· 壓縮&存儲

· 企業級調優

· 實戰案例

· 面試真題

Flume

· Flume架構

· Agent內部原理

· 事務

· 安裝部署

· 實戰案例

· 自定義Source

· 自定義Sink

· Ganglia監控

Kafka

· 消息隊列

· Kafka架構

· 集群部署

· 命令行操作

· 工作流程分析

· 分區分配策略

· 數據寫入流程

· 存儲策略

· 高階API

· 低級API

· 攔截器

· 監控

· 高可靠性存儲

· 數據可靠性和持久性保證

· ISR機制

· Kafka壓測

· 機器數量計算

· 分區數計算

· 啟動停止腳本

DataX

· 安裝

· 原理

· 數據一致性

· 空值處理

· LZO壓縮處理

Scala

· Scala基礎入門

· 函數式編程

· 數據結構

· 面向對象編程

· 模式匹配

· 高階函數

· 特質

· 註解&類型參數

· 隱式轉換

· 高級類型

· 案例實操

Spark Core

· 安裝部署

· RDD概述

· 編程模型

· 持久化&檢查點機制

· DAG

· 運算元詳解

· RDD編程進階

· 累加器&廣播變數

Spark SQL

· SparkSQL

· DataFrame

· DataSet

· 自定義UDF&UDAF函數

Spark Streaming

· SparkStreaming

· 背壓機制原理

· Receiver和Direct模式原理

· Window原理及案例實操

· 7x24 不間斷運行&性能考量

Spark內核&優化

· 內核源碼詳解

· 優化詳解

Hbase

· Hbase原理及架構

· 數據讀寫流程

· API使用

· 與Hive和Sqoop集成

· 企業級調優

Presto

· Presto的安裝部署

· 使用Presto執行數倉項目的即席查詢模塊

Ranger2.0

· 許可權管理工具Ranger的安裝和使用

Azkaban3.0

· 任務調度工具Azkaban3.0的安裝部署

· 使用Azkaban進行項目任務調度,實現電話郵件報警

Kylin3.0

· Kylin的安裝部署

· Kylin核心思想

· 使用Kylin對接數據源構建模型

Atlas2.0

· 元數據管理工具Atlas的安裝部署

Zabbix

· 集群監控工具Zabbix的安裝部署

DolphinScheler

· 任務調度工具DolphinScheler的安裝部署

· 實現數倉項目任務的自動化調度、配置郵件報警

Superset

· 使用SuperSet對數倉項目的計算結果進行可視化展示

Echarts

· 使用Echarts對數倉項目的計算結果進行可視化展示

Redis

· Redis安裝部署

· 五大數據類型

· 總體配置

· 持久化

· 事務

· 發布訂閱

· 主從復制

Canal

· 使用Canal實時監控MySQL數據變化採集至實時項目

Flink

· 運行時架構

· 數據源Source

· Window API

· Water Mark

· 狀態編程

· CEP復雜事件處理

Flink SQL

· Flink SQL和Table API詳細解讀

Flink 內核

· Flink內核源碼講解

· 經典面試題講解

Git&GitHub

· 安裝配置

· 本地庫搭建

· 基本操作

· 工作流

· 集中式

ClickHouse

· ClickHouse的安裝部署

· 讀寫機制

· 數據類型

· 執行引擎

DataV

· 使用DataV對實時項目需求計算結果進行可視化展示

sugar

· 結合Springboot對接網路sugar實現數據可視化大屏展示

Maxwell

· 使用Maxwell實時監控MySQL數據變化採集至實時項目

ElasticSearch

· ElasticSearch索引基本操作、案例實操

Kibana

· 通過Kibana配置可視化分析

Springboot

· 利用Springboot開發可視化介面程序

④ 我想學習hive,請問安裝hive之前,必須安裝centos、hadoop、java這些嗎

安裝需要
java 1.6,java 1.7或更高版本。
Hadoop 2.x或更高, 1.x. Hive 0.13 版本也支持 0.20.x, 0.23.x
Linux,mac,windows操作系統。以下內容適用於linux系統。
安裝打包好的hive
需要先到apache下載已打包好的hive鏡像,然後解壓開該文件
$ tar -xzvf hive-x.y.z.tar.gz

設置hive環境變數
$ cd hive-x.y.z$ export HIVE_HOME={{pwd}}

設置hive運行路徑
$ export PATH=$HIVE_HOME/bin:$PATH

編譯Hive源碼
下載hive源碼
此處使用maven編譯,需要下載安裝maven。

以Hive 0.13版為例
編譯hive 0.13源碼基於hadoop 0.23或更高版本
$cdhive$mvncleaninstall-Phadoop-2,dist$cdpackaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin$lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
編譯hive 基於hadoop 0.20
$cdhive$antcleanpackage$cdbuild/dist#lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
運行hive
Hive運行依賴於hadoop,在運行hadoop之前必需先配置好hadoopHome。
export HADOOP_HOME=<hadoop-install-dir>

在hdfs上為hive創建\tmp目錄和/user/hive/warehouse(akahive.metastore.warehouse.dir) 目錄,然後你才可以運行hive。
在運行hive之前設置HiveHome。
$ export HIVE_HOME=<hive-install-dir>

在命令行窗口啟動hive
$ $HIVE_HOME/bin/hive

若執行成功,將看到類似內容如圖所示

⑤ 如何通俗地理解Hive的工作原理

Hive是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化載入(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL,它允許熟悉 SQL 的用戶查詢數據。同時,這個語言也允許熟悉 MapRece 開發者的開發自定義的 mapper 和 recer 來處理內建的 mapper 和 recer 無法完成的復雜的分析工作。
流程大致步驟為:
1. 用戶提交查詢等任務給Driver。
2. 編譯器獲得該用戶的任務Plan。
3. 編譯器Compiler根據用戶任務去MetaStore中獲取需要的Hive的元數據信息。
4. 編譯器Compiler得到元數據信息,對任務進行編譯,先將HiveQL轉換為抽象語法樹,然後將抽象語法樹轉換成查詢塊,將查詢塊轉化為邏輯的查詢計劃,重寫邏輯查詢計劃,將邏輯計劃轉化為物理的計劃(MapRece), 最後選擇最佳的策略。
5. 將最終的計劃提交給Driver。
6. Driver將計劃Plan轉交給ExecutionEngine去執行,獲取元數據信息,提交給JobTracker或者SourceManager執行該任務,任務會直接讀取HDFS中文件進行相應的操作。
7. 獲取執行的結果。
8. 取得並返回執行結果。

閱讀全文

與hive源碼編譯相關的資料

熱點內容
燒錄編程器那個好用 瀏覽:542
三晉先鋒app如何簽約 瀏覽:439
網路如何讀取伺服器信息 瀏覽:434
mac壓縮解壓視頻 瀏覽:906
這就是程序員魅力 瀏覽:296
京東java演算法筆試題 瀏覽:178
柱子加密箍筋不準有接頭 瀏覽:199
我的世界伺服器菜單插件如何使用 瀏覽:12
劉毅10000詞pdf 瀏覽:890
剛畢業的程序員會什麼 瀏覽:974
單片機控制64路開關量 瀏覽:982
win10截圖編程 瀏覽:420
怎樣把名字變成文件夾 瀏覽:203
文件怎麼搞成文件夾 瀏覽:730
多線程編程php 瀏覽:606
安卓機越用越卡有什麼辦法 瀏覽:17
高中生解壓操場適合做的游戲 瀏覽:395
程序員java招聘 瀏覽:462
未來之光手機雲伺服器 瀏覽:160
伺服器下載資料為什麼c盤滿了 瀏覽:265