深入淺出的hive學(xué)習(xí)總結(jié)資料_第1頁
深入淺出的hive學(xué)習(xí)總結(jié)資料_第2頁
深入淺出的hive學(xué)習(xí)總結(jié)資料_第3頁
深入淺出的hive學(xué)習(xí)總結(jié)資料_第4頁
深入淺出的hive學(xué)習(xí)總結(jié)資料_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

什么是Hive(一)Hive是建立在Hadoop上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架。它提供了一系列的工具,可以用來進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載(ETL),這是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制。Hive定義了簡單的類SQL查詢語言,稱為QL,它允許熟悉SQL的用戶查詢數(shù)據(jù)。同時(shí),這個(gè)語言也允許熟悉MapReduce開發(fā)者的開發(fā)自定義的mapper和reducer來處理內(nèi)建的mapper和reducer無法完成的復(fù)雜的分析工作。什么是Hive(二)Hive是SQL解析引擎,它將SQL語句轉(zhuǎn)譯成M/RJob然后在Hadoop執(zhí)行。Hive的表其實(shí)就是HDFS的目錄,按表名把文件夾分開。如果是分區(qū)表,則分區(qū)值是子文件夾,可以直接在M/RJob里使用這些數(shù)據(jù)。Hive的系統(tǒng)架構(gòu)?用戶接口,包括CLI,JDBC/ODBC,WebUI?元數(shù)據(jù)存儲(chǔ),通常是存儲(chǔ)在關(guān)系數(shù)據(jù)庫如mysql,derby中?解釋器、編譯器、優(yōu)化器、執(zhí)行器?Hadoop:用HDFS進(jìn)行存儲(chǔ),利用MapReduce進(jìn)行計(jì)算Hive的系統(tǒng)架構(gòu)用戶接口主要有三個(gè):CLI,JDBC/ODBC和WebUICLI,即Shell命令行JDBC/ODBC是Hive的Java,與使用傳統(tǒng)數(shù)據(jù)庫JDBC的方式類似WebGUI是通過瀏覽器訪問HiveHive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中(metastore),目前只支持mysql、derby。Hive中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等解釋器、編譯器、優(yōu)化器完成HQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計(jì)劃(plan)的生成。生成的查詢計(jì)劃存儲(chǔ)在HDFS中,并在隨后由MapReduce調(diào)用執(zhí)行Hive的數(shù)據(jù)存儲(chǔ)在HDFS中,大部分的查詢由MapReduce完成(包含*的查詢,比如select*fromtable不會(huì)生成MapRedcue任務(wù))Hive的安裝啟動(dòng)#hivehive>showtables;hive>createtabletest(idint,namestring);hive>quit;Hive的metastoremetastore是hive元數(shù)據(jù)的集中存放地。metastore默認(rèn)使用內(nèi)嵌的derby數(shù)據(jù)庫作為存儲(chǔ)引擎Derby引擎的缺點(diǎn):一次只能打開一個(gè)會(huì)話使用Mysql作為外置存儲(chǔ)引擎,多用戶同時(shí)訪問Hive運(yùn)行模式Hive的運(yùn)行模式即任務(wù)的執(zhí)行環(huán)境分為本地與集群兩種我們可以通過mapred.job.tracker來指明設(shè)置方式:hive>SETmapred.job.tracker=local;Hive的啟動(dòng)方式1、hive命令行模式,直接輸入#/hive/bin/hive的執(zhí)行程序,或者輸入#hive--servicecli2、hiveweb界面的(端口號(hào)9999)啟動(dòng)方式#hive--servicehwi&用于通過瀏覽器來訪問hivehttp://hadoop0:9999/hwi/3、hive遠(yuǎn)程服務(wù)(端口號(hào)10000)啟動(dòng)方式#hive--servicehiveserver&Hive與傳統(tǒng)數(shù)據(jù)庫查詢語言HiveQLSQL數(shù)據(jù)存儲(chǔ)位置HDFSRawDeviceor本地FS數(shù)據(jù)格式用戶定義系統(tǒng)決定數(shù)據(jù)更新不支持支持索引新版本有,但弱有執(zhí)行MapReduceExecutor執(zhí)行延遲高低可擴(kuò)展性高低數(shù)據(jù)規(guī)模大小Hive的數(shù)據(jù)類型基本數(shù)據(jù)類型tinyint/smallint/int/bigintfloat/doublebooleanstring復(fù)雜數(shù)據(jù)類型Array/Map/Struct沒有date/datetimeHive的數(shù)據(jù)存儲(chǔ)Hive的數(shù)據(jù)存儲(chǔ)基于HadoopHDFSHive沒有專門的數(shù)據(jù)存儲(chǔ)格式存儲(chǔ)結(jié)構(gòu)主要包括:數(shù)據(jù)庫、文件、表、視圖Hive默認(rèn)可以直接加載文本文件(TextFile),還支持sequencefile創(chuàng)建表時(shí),指定Hive數(shù)據(jù)的列分隔符與行分隔符,Hive即可解析數(shù)據(jù)Hive的數(shù)據(jù)模型-數(shù)據(jù)庫類似傳統(tǒng)數(shù)據(jù)庫的DataBase默認(rèn)數(shù)據(jù)庫"default"使用#hive命令后,不使用hive>use<數(shù)據(jù)庫名>,系統(tǒng)默認(rèn)的數(shù)據(jù)庫??梢燥@式使用hive>usedefault;創(chuàng)建一個(gè)新庫hive>createdatabasetest_dw;Hive的數(shù)據(jù)模型-表Table內(nèi)部表Partition分區(qū)表ExternalTable外部表BucketTable桶表Hive的數(shù)據(jù)模型-內(nèi)部表與數(shù)據(jù)庫中的Table在概念上是類似每一個(gè)Table在Hive中都有一個(gè)相應(yīng)的目錄存儲(chǔ)數(shù)據(jù)。例如,一個(gè)表test,它在HDFS中的路徑為:/warehouse/test。warehouse是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的數(shù)據(jù)倉庫的目錄所有的Table數(shù)據(jù)(不包括ExternalTable)都保存在這個(gè)目錄中。刪除表時(shí),元數(shù)據(jù)與數(shù)據(jù)都會(huì)被刪除Hive的數(shù)據(jù)模型-內(nèi)部表創(chuàng)建數(shù)據(jù)文件inner_table.dat創(chuàng)建表hive>createtableinner_table(keystring);加載數(shù)據(jù)hive>loaddatalocalinpath'/root/inner_table.dat'intotableinner_table;查看數(shù)據(jù)select*frominner_tableselectcount(*)frominner_table刪除表droptableinner_tableHive的數(shù)據(jù)模型-分區(qū)表Partition對應(yīng)于數(shù)據(jù)庫的Partition列的密集索引在Hive中,表中的一個(gè)Partition對應(yīng)于表下的一個(gè)目錄,所有的Partition的數(shù)據(jù)都存儲(chǔ)在對應(yīng)的目錄中例如:test表中包含date和city兩個(gè)Partition,則對應(yīng)于date=20130201,city=bj的HDFS子目錄為:/warehouse/test/date=20130201/city=bj對應(yīng)于date=20130202,city=sh的HDFS子目錄為;/warehouse/test/date=20130202/city=shHive的數(shù)據(jù)模型-分區(qū)表CREATE

TABLEtmp_table#表名(titlestring,

#字段名稱字段類型minimum_biddouble,quantitybigint,have_invoicebigint)COMMENT'注釋:XXX'

#表注釋

PARTITIONEDBY(ptSTRING)

#分區(qū)表字段(如果你文件非常之大的話,采用分區(qū)表可以快過濾出按分區(qū)字段劃分的數(shù)據(jù))

ROWFORMATDELIMITED

FIELDSTERMINATEDBY

'\001'

#字段是用什么分割開的STOREDASSEQUENCEFILE;#用哪種方式存儲(chǔ)數(shù)據(jù),SEQUENCEFILE是hadoop自帶的文件壓縮格式一些相關(guān)命令SHOW

TABLES;#查看所有的表SHOW

TABLES

'*TMP*';#支持模糊查詢SHOWPARTITIONSTMP_TABLE;#查看表有哪些分區(qū)DESCRIBE

TMP_TABLE;#查看表結(jié)構(gòu)Hive的數(shù)據(jù)模型-分區(qū)表創(chuàng)建數(shù)據(jù)文件partition_table.dat創(chuàng)建表createtablepartition_table(rectimestring,msisdnstring)partitionedby(daytimestring,citystring)rowformatdelimitedfieldsterminatedby'\t'storedasTEXTFILE;加載數(shù)據(jù)到分區(qū)loaddatalocalinpath'/home/partition_table.dat'intotablepartition_tablepartition(daytime='2013-02-01',city='bj');查看數(shù)據(jù)select*frompartition_tableselectcount(*)frompartition_table?刪除表droptablepartition_tableHive的數(shù)據(jù)模型-分區(qū)表altertablepartition_tableaddpartition(daytime='2013-02-04',city='bj');通過loaddata加載數(shù)據(jù)altertablepartition_tabledroppartition(daytime='2013-02-04',city='bj')元數(shù)據(jù),數(shù)據(jù)文件刪除,但目錄daytime=2013-02-04還在Hive的數(shù)據(jù)模型—桶表桶表是對數(shù)據(jù)進(jìn)行哈希取值,然后放到不同文件中存儲(chǔ)。創(chuàng)建表 createtablebucket_table(idstring)clusteredby(id)into4buckets; 加載數(shù)據(jù) sethive.enforce.bucketing=true; insertintotablebucket_tableselectnamefromstu; insertoverwritetablebucket_tableselectnamefromstu;數(shù)據(jù)加載到桶表時(shí),會(huì)對字段取hash值,然后與桶的數(shù)量取模。把數(shù)據(jù)放到對應(yīng)的文件中。抽樣查詢 select*frombucket_tabletablesample(bucket1outof4onid);Hive的數(shù)據(jù)模型-外部表指向已經(jīng)在HDFS中存在的數(shù)據(jù),可以創(chuàng)建Partition它和內(nèi)部表在元數(shù)據(jù)的組織上是相同的,而實(shí)際數(shù)據(jù)的存儲(chǔ)則有較大的差異內(nèi)部表的創(chuàng)建過程和數(shù)據(jù)加載過程(這兩個(gè)過程可以在同一個(gè)語句中完成),在加載數(shù)據(jù)的過程中,實(shí)際數(shù)據(jù)會(huì)被移動(dòng)到數(shù)據(jù)倉庫目錄中;之后對數(shù)據(jù)對訪問將會(huì)直接在數(shù)據(jù)倉庫目錄中完成。刪除表時(shí),表中的數(shù)據(jù)和元數(shù)據(jù)將會(huì)被同時(shí)刪除外部表只有一個(gè)過程,加載數(shù)據(jù)和創(chuàng)建表同時(shí)完成,并不會(huì)移動(dòng)到數(shù)據(jù)倉庫目錄中,只是與外部數(shù)據(jù)建立一個(gè)鏈接。當(dāng)刪除一個(gè)外部表時(shí),僅刪除該鏈接Hive的數(shù)據(jù)模型-外部表CREATEEXTERNALTABLEpage_view(viewTimeINT,

useridBIGINT,page_urlSTRING,

referrer_urlSTRING,

ipSTRINGCOMMENT'IPAddressoftheUser',countrySTRINGCOMMENT'countryoforigination‘)COMMENT'Thisisthestagingpageviewtable'ROWFORMATDELIMITEDFIELDSTERMINATEDBY

'44'

LINES TERMINATEDBY

'12'STOREDASTEXTFILELOCATION'hdfs://centos:9000/user/data/staging/page_view';Hive的數(shù)據(jù)模型-外部表創(chuàng)建數(shù)據(jù)文件external_table.dat創(chuàng)建表hive>createexternaltableexternal_table1(keystring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'location'/home/external';在HDFS創(chuàng)建目錄/home/external#hadoopfs-put/home/external_table.dat/home/external加載數(shù)據(jù)LOADDATAINPATH'/home/external_table1.dat'INTOTABLEexternal_table1;查看數(shù)據(jù)select*fromexternal_tableselectcount(*)fromexternal_table刪除表droptableexternal_table視圖操作視圖的創(chuàng)建CREATEVIEWv1ASselect*fromt1;表的操作表的修改altertabletarget_tabaddcolumns(cols,string)表的刪除droptable導(dǎo)入數(shù)據(jù)當(dāng)數(shù)據(jù)被加載至表中時(shí),不會(huì)對數(shù)據(jù)進(jìn)行任何轉(zhuǎn)換。Load操作只是將數(shù)據(jù)復(fù)制/移動(dòng)至Hive表對應(yīng)的位置。LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]

INTOTABLEtablename

[PARTITION(partcol1=val1,partcol2=val2...)]把一個(gè)Hive表導(dǎo)入到另一個(gè)已建Hive表INSERTOVERWRITETABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]select_statementFROMfrom_statementCTASCREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name (col_namedata_type,...) … ASSELECT…例:createtablenew_external_testasselect*fromexternal_table1;查詢selectSELECT[ALL|DISTINCT]select_expr,select_expr,... FROMtable_reference [WHEREwhere_condition] [GROUPBYcol_list] [CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBYcol_list]|[ORDERBYcol_list]] [LIMITnumber]DISTRIBUTEBY指定分發(fā)器(Partitioner),多Reducer可用查詢基于Partition的查詢一般SELECT查詢是全表掃描。但如果是分區(qū)表,查詢就可以利用分區(qū)剪枝(inputpruning)的特性,類似“分區(qū)索引“”,只掃描一個(gè)表中它關(guān)心的那一部分。Hive當(dāng)前的實(shí)現(xiàn)是,只有分區(qū)斷言(Partitionedby)出現(xiàn)在離FROM子句最近的那個(gè)WHERE子句中,才會(huì)啟用分區(qū)剪枝。例如,如果page_views表(按天分區(qū))使用date列分區(qū),以下語句只會(huì)讀取分區(qū)為‘2008-03-01’的數(shù)據(jù)。

SELECTpage_views.*FROMpage_views

溫馨提示

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

最新文檔

評論

0/150

提交評論