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

下載本文檔

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

文檔簡介

hive概述使用MapReduce實現(xiàn)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的缺點過于底層不夠靈活,受語言約束笨重不堪數(shù)據(jù)操作很不清晰,代碼量大,難維護常見操作如排序、連接繁瑣,且不高效缺乏高級抽象程序關注點是如何實現(xiàn),而不是要實現(xiàn)什么大量時間浪費在調(diào)試無用的細節(jié)上

新的需求

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

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

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

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

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

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

所有的數(shù)據(jù)都是存儲在Hadoop中

查詢計劃被轉化為MapReduce任務,在Hadoop中執(zhí)行Hadoop和Hive都是用UTF-8編碼的Hive和傳統(tǒng)關系數(shù)據(jù)庫比較

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

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

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

指向已經(jīng)在HDFS中或本地存在的數(shù)據(jù)Hive的數(shù)據(jù)存儲Hive沒有專門的數(shù)據(jù)存儲格式,用戶可以非常自由的組織Hive中的表,只需要在創(chuàng)建表的時候告訴Hive數(shù)據(jù)中的列分隔符和行分隔符,Hive就可以解析數(shù)據(jù)。Hive的數(shù)據(jù)文件存儲在HDFS中設定的位置,例如被放置在HDFS的/hive/warehouse目錄中,/hive/warehouse是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的數(shù)據(jù)倉庫的目錄每個Table被存放在warehouse的子目錄中,例如表tbl_pv放在目錄/hive/warehouse/tbl_pv中。Hive的數(shù)據(jù)存儲Hive表中的一個Partition對應于表下的一個目錄,所有的Partition的數(shù)據(jù)都存儲在對應的目錄中。例如: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,根據(jù)hash值切分數(shù)據(jù),每一個Bucket對應一個文件。ExternalTable:外部表,與table類似,不過其數(shù)據(jù)存放位置可以在任意指定路徑。Hive的數(shù)據(jù)存儲

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

溫馨提示

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

評論

0/150

提交評論