日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个数据仓库时代开始--Hive

發布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个数据仓库时代开始--Hive 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


一、什么是 Apache Hive?

Apache Hive 是一個基于 Hadoop Haused 構建的開源數據倉庫系統,我們使用它來查詢和分析存儲在 Hadoop 文件中的大型數據集。此外,通過使用 Hive,我們可以在 Hadoop 中處理結構化和半結構化數據。

換句話說,Hive 是一個數據倉庫基礎設施,便于查詢和管理駐留在分布式存儲系統中的大型數據集。它提供了一種類 SQL 的查詢語言 HiveQL(Hive Query Language)查詢數據的方法。 此外,編譯器在內部將 HiveQL 語句轉換為 MapReduce、Tez、Spark 等作業。進一步提交給 Hadoop 框架執行。

二、我們為什么要使用 Hive 技術?

隨著 Hadoop MapReduce 的出現,極大的簡化大數據編程的難度,使得普通程序員也能從事開發大數據編程。但在生產活動中經常要對大數據計算分析是從事商務智能行業(BI)的工程師,他們通常使用 SQL 語言進行大數據統計以及分析,而 Mapreduce 編程是有一定的門檻,如果每次都采用 MapReduce 開發計算分析,這樣成本就太高效率太低,那么有沒有更簡單的辦法,可以直接通過 SQL 在大數據平臺下運行進行統計分析?有的,答案即是 Hive。

Hive 主要用于數據查詢,統計和分析,提高開發人員的工作效率。Hive 通過內置函數將 SQL 語句生成 DAG(有向無環圖),再讓 Mapreduce 計算處理。從而得到我們想要的統計結果。而且在處理具有挑戰性的復雜分析處理和數據格式時,極大的簡化了開發難度。

三、Hive 架構

Hive 能夠直接處理我們輸入的 HiveQL 語句,調用 MapReduce 計算框架完成數據分析操作。下面是它的架構圖,我們結合架構圖來看看 Hive 到 MapReduce 整個流程。

由上圖可知,HDFS 和 Mapreduce 是 Hive 架構的根基。Hive 架構主要分為以下幾個組件:Client、Metastore、Thrift Server、Driver,下面是各個組件介紹:

Client:用戶接口組件主要包含 CLI(命令行接口)、JDBC 或 ODBC、WEB GUI(以瀏覽器訪問 Hive);

Metastore組件:元數據服務組件, 記錄表名、字段名、字段類型、關聯 HDFS 文件路徑等這些數據庫的元數據信息;

Driver(執行引擎):包括 Complier 、Optimizer 和 Executor,它們的作用是將 HiveQL 語句進行語法分析、語法解析、語法優化,生成執行計劃,然后提交給 Hadoop MapReduce 計算框架處理;

Thrift Server:Thrift 是 FaceBook 開發的一個軟件框架,它用來進行可擴展且跨語言的服務的開發, 通過該服務使不同編程語言調用 Hive 的接口。

我們通過 CLI 向 Hive 提交 SQL 命令,如果 SQL 是創建數據表的 DDL,Hive 會通過 執行引擎 Driver 將數據表元數據信息存儲 Metastore 中,而如果 SQL 是查詢分析數據的 DQL,通過 Complier 、Optimizer 和 Executor 進行語法分析、語法解析、語法優化操作,生成執行計劃生成一個 MapReduce 的作業,提交給 Hadoop MapReduce 計算框架處理。

到此 Hive 的整個流程就結束了,相信你對 Hive 的整個流程已經有基本了解。接下來我們探討一條 SQL 在 MapReduce 是如何統計分析。


四、SQL如何在Mapreduce執行


左邊是數據表,右邊是結果表,這條 SQL 語句對 age 分組求和,得到右邊的結果表,到底一條簡單的 SQL 在 MapReduce 是如何被計算, MapReduce 編程模型只包含 map 和 reduce 兩個過程,map 是對數據的劃分,reduce 負責對 map 的結果進行匯總。

select id,age,count(1) from student_info group by age

首先看 map 函數的輸入的 key 和 value,輸入主要看 value,value 就是 user_info 表的每一行數據,輸入的 value 作為map函數輸出的 key,輸出的 value 固定為 1,比如<<1,17>,1>。 map 函數的輸出經過 shuffle 處理,shuffle 把相同的 key 以及對應的 value 組合成新<key,value集合>,從 user_info 表看出map輸出 2 次<<1,17>,1>,那么經過 shuffle 處理后則會輸出<<1,17>,<1,1>>,并將輸出作為 reduce 函數的輸入。

在 reduce 函數會把所有 value 進行相加后輸出結果,<<1,17>,<1,1>>輸出為<<1,17>,2>。 這就是一條簡單 SQL 在 Mapreduce 執行過程,可能你會有點迷糊,在這里我畫了一張流程圖,結合流程圖你會更加清楚。



五、Hive 和 RDBMS 之間的區別

說到 Hive 跟 RDBMS(傳統關系型數據庫)相比有哪些區別,很多人可能還是說不清楚,在這里我總結一下關于 Hive 和 RDBMS 之間的區別。

1、Hive 支持部分 SQL 語法,跟標準 SQL 有一定區別。

2、傳統的數據庫在寫入數據會嚴格檢驗數據格式,對于這種我們成為讀時模式,而 Hive 是在查詢數據時驗證數據,這種驗證我們稱為寫時模式,而且由于每次都是掃描整個表導致高延時;

3、Hive 是在 Hadoop 上運行的,通常而言 Hive 時一次寫入多次讀取,而 RDBMS 則是多次讀寫;

4、Hive 視圖是邏輯存在,而且只讀,不接受 LOAD/INSERT/ALTER,而 RDBMS 視圖根據表變化而變化;

5、Hive 支持多表插入而 RDBMS 是不支持,而且 Hive 對子查詢有嚴格要求,有許多子查詢是不支持;

6、早期 Hive 只支持 INSERT OVERWRITE\INTO TABLE 插入數據,從 0.14.0 開始支持 INSERT INTO ... VALUE 語句按行添加數據,另外 UPDATE 和 DELETE 也允許被執行;

7、在 Hive 0.7.0 之后 Hive 是支持索引的,只是它跟 RDBMS 不一樣,比如它不支持主鍵和外鍵,而是支持在某些列上建立索引,以提高 Hive 表指定列的查詢速度(但是效果差強人意);

其實對于更新、事物和索引,一開始 Hive 是不支持的,因為這樣非常影響性能,不符合當初數據倉庫的設計,不過后來不斷的發展,也不得不妥協,這也導致 Hive 和 RDBMS 在形式上更加相識。

相信看完這些大家已經對它們之間區別有了一些理解,在這里我還貼出一張表格,你可以對照表格加深印象。

比較項RDBMSHive
ANSI SQL支持不完全支持
更新UPDATE\INSERT\DELETEUPDATE\INSERT\DELETE(0.14.0之后)
模式讀時模式寫時模式
數據保存磁盤HDFS
延時
多表插入不支持支持
子查詢完全支持支持 From 子句
視圖UpdatableRead-only
索引支持支持表列(0.7.0之后)
可擴展性
數據規模
讀寫一次寫入多次讀取多次讀寫
分析OLTPOLAP
執行ExcutorMapReduced、Spark等



小結

在實際生產過程中,其實我們不會經常編寫 MapReduce 程序,起初在網站的大數據分析基本是通過 SQL 進的,也因此 Hive 在大數據中扮演著非常重要作用。隨著 Hive 的普及,我們希望更多的大數據應用場景中使用 SQL 語句進行分析,于是現在越來越多的大數據 SQL 引擎被開發出來。在我看來無論是 Cloudera 的 Impala,還是后來的 Spark ,對大數據中使用 SQL需求越來迫切, 對大數據 SQL 應用場景更多樣化,我們只需要通過 SQL 語句就可以輕易得到我們想要的結果。最后說一點,在這些 SQL 引擎基本都是支持類 SQL 語言,但并不像數據庫那樣支持那樣標準 SQL,特別是 Hive 等數據倉庫幾乎必然會用到嵌套查詢 SQL,也就是在 where 條件嵌套 select 子查詢,但是幾乎所有的大數據 SQL 引擎都不支持。

轉載于:https://www.cnblogs.com/TFengStorm/p/10198853.html

總結

以上是生活随笔為你收集整理的一个数据仓库时代开始--Hive的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。