2023學年完整公開課版Hive概述2_第1頁
2023學年完整公開課版Hive概述2_第2頁
2023學年完整公開課版Hive概述2_第3頁
2023學年完整公開課版Hive概述2_第4頁
2023學年完整公開課版Hive概述2_第5頁
已閱讀5頁,還剩29頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

hive概述使用MapReduce實現WordCountpublicclassWordCountMapperextendsMapper<Object,Text,Text,IntWritable>{privatefinalstaticIntWritableone=newIntWritable(1);privateTextword=newText();publicvoidmap(Objectkey,Textvalue,Contextcontext)throwsIOException,InterruptedException{

word.set(value.toString());

context.write(word,one);}}publicstaticclassWordCountReducerextendsReducer<Text,IntWritable,Text,IntWritable>{privateIntWritableresult=newIntWritable();publicvoidreduce(Textkey,Iterable<IntWritable>values,Contextcontext)throwsIOException,InterruptedException{

intsum=0;for(IntWritable

val:values){sum+=val.get();}

result.set(sum);

context.write(key,result);}}Hadoop的缺點過于底層不夠靈活,受語言約束笨重不堪數據操作很不清晰,代碼量大,難維護常見操作如排序、連接繁瑣,且不高效缺乏高級抽象程序關注點是如何實現,而不是要實現什么大量時間浪費在調試無用的細節上

新的需求

常見的操作是對原有的數據進行不斷地轉化、綜合、分析

簡化轉化步驟存在常見的模式,例如排序、分組等希望將關注點提高到統計分析上提高重用性在WordCount例子中:SELECTword,count(*)FROMdataGROUPBYword;SELECTword,count(*)counterFROMdataGROUPBYwordHAVINGcounter>=10ORDERBYcounter;

高層工具需要高層工具,通過編譯轉化為MapReduce任務交給Hadoop執行Hive:使用類似SQL的語法Pig:使用PigLatin腳本Hive概述Hive是基于Hadoop的數據倉庫平臺,由Facebook貢獻,Hive提供了一系列的工具,可以用來進行數據提取、轉化、加載(ETL),這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。Hive定義了簡單的類SQL查詢語言,稱為HQL,hive設計目的是讓SQL技能良好,但Java技能較弱的分析師可以查詢海量數據。Hive是SQL解析引擎,它將SQL語句轉譯成M/RJob,可以認為hive是HQL到MR的語言翻譯器。Hive中數據計算使用MR,數據存儲使用HDFSHive的HQL表達能力有限,有些復雜運算還需要編寫MR程序,hive允許熟悉MapReduce開發人員開發自定義的mapper和reducer來處理內建的mapper和reducer無法完成的復雜的分析工作。Hive概述Hive不是一個完整的數據庫,Hadoop以及HDFS的設計本身約束和限制性地限制了Hive,使Hive不支持記錄級別的更新或者刪除操作。但用戶可以通過查詢生成新表或者將查詢結果導入到文件中。Hadoop是一個面向批處理的系統,而MapReduce任務的啟動過程需要消耗較長的時間,所以Hive查詢延時比較嚴重。hadoop生態圖中的HiveHive優點Hive使用類SQL查詢語法,最大限度的實現了和SQL標準的兼容,大大降低了傳統數據分析人員學習成本;使用JDBC接口/ODBC接口,開發人員更易開發應用;以MR作為計算引擎、HDFS作為存儲系統,解決了傳統的關系型數據庫在大數據處理上的瓶頸。統一的元數據管理(Derby、MySql等),并可與Pig、Presto等共享;并行計算,充分利用集群的CPU計算資源、存儲資源,處理大規模數據集。

Hive缺點Hive的HQL表達的能力有限迭代式算法無法表達有些復雜運算用HQL不易表達Hive效率較低Hive自動生成MapReduce作業,通常不夠智能;HQL調優困難,粒度較粗可控性差

Hive應用場景適用場景海量數據的存儲處理數據挖掘海量數據的離線分析不適用場景復雜的機器學習算法復雜的科學計算聯機交互式實時查詢Facebook的hive應用WebServersScribeServersFilersHiveonHadoopClusterOracleRACFederatedMySQLHive架構用戶接口包括CLI,JDBC/ODBC,WebUI元數據庫元數據用于存放Hive庫的基礎信息,它存儲在關系數據庫中,如mysql、derby。元數據包括:數據庫信息、表的名字,表的列和分區及其屬性,表的屬性,表的數據所在目錄等。解析器編譯器、優化器、執行器Hadoop用MapReduce進行計算,用HDFS進行存儲HiveHadoopThrift服務器解析器編譯器優化器執行器元數據庫MapReduceHDFS數據倉庫用戶接口CLI接口JDBC/ODBC客戶端WEB接口HadoopHive的運行機制用戶通過用戶接口連接Hive,發布HiveSQLHive解析查詢并制定查詢計劃Hive將查詢轉換成MapReduce作業Hive在Hadoop上執行MapReduce作業hivesqlMap/ReduceHdfstable1table2table3......用戶用戶接口1234Hive的運行機制Hive和Hadoop關系Hive構建在Hadoop之上

HQL中對查詢語句的解釋、優化、生成查詢計劃是由Hive完成的

所有的數據都是存儲在Hadoop中

查詢計劃被轉化為MapReduce任務,在Hadoop中執行Hadoop和Hive都是用UTF-8編碼的Hive和傳統關系數據庫比較

HiveRDBMS查詢語言HQLSQL數據存儲HDFSRawDeviceorLocalFS數據更新不支持支持索引新版本有,但較弱有執行MapReduceExcutor

執行延遲高低可擴展性高低數據規模大小Hive設計特征Hive做為Hadoop的數據倉庫處理工具,它所有的數據都存儲在Hadoop兼容的文件系統中。Hive在加載數據過程中不會對數據進行任何的修改,只是將數據復制或移動到HDFS中Hive設定的目錄下,因此,Hive不支持對數據的改寫,所有的數據都是在加載的時候確定的。Hive的設計特點如下:支持索引,加快數據查詢。不同的文件格式

,Hive中默認有三個文件格式TextFile,SequenceFile以及RCFile。將元數據保存在關系數據庫中,減少了在查詢中執行語義檢查時間。可以直接使用存儲在Hadoop文件系統中的數據。內置大量用戶函數UDF,也支持用戶擴展UDF函數來完成內置函數無法實現的操作。類SQL的查詢方式,將SQL查詢轉換為MapReduce的job在Hadoop集群上執行。Hive的運行模式Hive有三種運行模式內嵌模式:使用的是內嵌的Derby數據庫來存儲元數據,不需要額外起Metastore服務。這個是默認的,配置簡單,但是一次只能一個客戶端連接,適用于實驗,不適用于生產環境。本地模式:這種模式是將元數據保存在本地的獨立數據庫中(比如MySQL);這種模式不需要單獨起metastore服務,用的是跟hive在同一個進程里的metastore服務。遠程模式:如果Hive客戶端比較多,在每個客戶端都安裝MySQL服務會造成一定的冗余和浪費,這種情況下,需要單獨起metastore服務,然后每個客戶端都在配置文件里配置連接到該metastore服務。遠程元存儲的metastore服務和hive運行在不同的進程里。Metadata(元數據):元數據包含用Hive創建的database、table等的元信息。元數據存儲在關系型數據庫中,如Derby、MySQL、Postgres、Oracle、MSSQLServer等。Metastore作用是:客戶端連接metastore服務,metastore再去連接數據庫來存取元數據。Hive的MetastoreHive部署架構Hive的數據模型每一個類似于數據庫的系統都首先需要定義一個數據模型,然后才是在這個數據模型之上的各種操作。Tables:Hive的數據模型由數據表組成數據表中的列是有類型的(int,float,string,data,boolean)也可以是復合的類型,如Map、STRUCT、ARRAYPartitions:數據表可以按照一定的規則進行劃分Partition,例如,通過日期的方式將數據表進行劃分。Buckets:數據存儲的桶,在一定范圍內的數據按照Hash的方式進行劃分。ExternalTable:

指向已經在HDFS中或本地存在的數據Hive的數據存儲Hive沒有專門的數據存儲格式,用戶可以非常自由的組織Hive中的表,只需要在創建表的時候告訴Hive數據中的列分隔符和行分隔符,Hive就可以解析數據。Hive的數據文件存儲在HDFS中設定的位置,例如被放置在HDFS的/hive/warehouse目錄中,/hive/warehouse是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的數據倉庫的目錄每個Table被存放在warehouse的子目錄中,例如表tbl_pv放在目錄/hive/warehouse/tbl_pv中。Hive的數據存儲Hive表中的一個Partition對應于表下的一個目錄,所有的Partition的數據都存儲在對應的目錄中。例如:tbl_pv表中包含ds和city兩個Partition,則對應于ds=20090801,city=beijing的HDFS子目錄為:/warehouse/tbl_pv/ds=20090801/city=beijing;對應于ds=20090801,city=shenyang的HDFS子目錄為/warehouse/tbl_pv/ds=20090801/city=shenyangBuckets

對指定列計算hash,根據hash值切分數據,每一個Bucket對應一個文件。ExternalTable:外部表,與table類似,不過其數據存放位置可以在任意指定路徑。Hive的數據存儲

底層的存儲有兩種選擇:HDFSNoSQL數據庫HBase最簡單的方式:普通存儲在HDFS中的文件就可以被Hive識別為一張表,通常文件的一行對應數據庫的一行,而列由指定的分隔符隔開。Hive的訪問接口Hive提供了三種客戶端訪問接口::HiveCLI(HiveCommandLine,Hive命令行),客戶端可以直接在命令行模式下進行操作hwi(HiveWebInterface,HiveWeb接口),Hive提供了更直觀的Web界面HiveServer,Hive提供了一種服務,可以通過不同的客戶端連接到這個服務去訪問Hive提供的功能,允許Thrift、JDBC、ODBC進行訪問。Hive命令行命名空間hivevar:用戶自定義變量hiveconf:hive相關的配置屬性system:java定義的配置屬性env:shell環境定義的環境變量顯示一個變量的值hive>setenv:HOME;Hive命令行hiveconf用于配置hive行為的所有屬性sethiveconf:hive.cli.print.current.db=true;sethive.cli.print.current.db=true;執行查詢,執行結束后hivecli立即退出hive-e"select*fromtest";Hive使用-f文件名方式執行指定文件中的查詢語句hive-ftest.hqlcli其他命令用戶不需要退出cli就可以執行簡單的shell命令hive>!pwd;在hive內使用hadoop的dfs命令hive>dfs-ls/Hive腳本中的注釋使用以—開頭的字符串來表示注釋顯示字段名稱hive>sethive.cli.print.hea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論