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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

新的需求

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

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

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

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

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

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

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

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

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

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

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

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

對(duì)指定列計(jì)算hash,根據(jù)hash值切分?jǐn)?shù)據(jù),每一個(gè)Bucket對(duì)應(yīng)一個(gè)文件。ExternalTable:外部表,與table類似,不過(guò)其數(shù)據(jù)存放位置可以在任意指定路徑。Hive的數(shù)據(jù)存儲(chǔ)

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論