




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
什么是Hive(一)Hive是建立在Hadoop上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。Hive定義了簡單的類SQL查詢語言,稱為QL,它允許熟悉SQL的用戶查詢數據。同時,這個語言也允許熟悉MapReduce開發者的開發自定義的mapper和reducer來處理內建的mapper和reducer無法完成的復雜的分析工作。什么是Hive(二)Hive是SQL解析引擎,它將SQL語句轉譯成M/RJob然后在Hadoop執行。Hive的表其實就是HDFS的目錄,按表名把文件夾分開。如果是分區表,則分區值是子文件夾,可以直接在M/RJob里使用這些數據。Hive的系統架構?用戶接口,包括CLI,JDBC/ODBC,WebUI?元數據存儲,通常是存儲在關系數據庫如mysql,derby中?解釋器、編譯器、優化器、執行器?Hadoop:用HDFS進行存儲,利用MapReduce進行計算Hive的系統架構用戶接口主要有三個:CLI,JDBC/ODBC和WebUICLI,即Shell命令行JDBC/ODBC是Hive的Java,與使用傳統數據庫JDBC的方式類似WebGUI是通過瀏覽器訪問HiveHive將元數據存儲在數據庫中(metastore),目前只支持mysql、derby。Hive中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等解釋器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃(plan)的生成。生成的查詢計劃存儲在HDFS中,并在隨后由MapReduce調用執行Hive的數據存儲在HDFS中,大部分的查詢由MapReduce完成(包含*的查詢,比如select*fromtable不會生成MapRedcue任務)Hive的安裝啟動#hivehive>showtables;hive>createtabletest(idint,namestring);hive>quit;Hive的metastoremetastore是hive元數據的集中存放地。metastore默認使用內嵌的derby數據庫作為存儲引擎Derby引擎的缺點:一次只能打開一個會話使用Mysql作為外置存儲引擎,多用戶同時訪問Hive運行模式Hive的運行模式即任務的執行環境分為本地與集群兩種我們可以通過mapred.job.tracker來指明設置方式:hive>SETmapred.job.tracker=local;Hive的啟動方式1、hive命令行模式,直接輸入#/hive/bin/hive的執行程序,或者輸入#hive--servicecli2、hiveweb界面的(端口號9999)啟動方式#hive--servicehwi&用于通過瀏覽器來訪問hivehttp://hadoop0:9999/hwi/3、hive遠程服務(端口號10000)啟動方式#hive--servicehiveserver&Hive與傳統數據庫查詢語言HiveQLSQL數據存儲位置HDFSRawDeviceor本地FS數據格式用戶定義系統決定數據更新不支持支持索引新版本有,但弱有執行MapReduceExecutor執行延遲高低可擴展性高低數據規模大小Hive的數據類型基本數據類型tinyint/smallint/int/bigintfloat/doublebooleanstring復雜數據類型Array/Map/Struct沒有date/datetimeHive的數據存儲Hive的數據存儲基于HadoopHDFSHive沒有專門的數據存儲格式存儲結構主要包括:數據庫、文件、表、視圖Hive默認可以直接加載文本文件(TextFile),還支持sequencefile創建表時,指定Hive數據的列分隔符與行分隔符,Hive即可解析數據Hive的數據模型-數據庫類似傳統數據庫的DataBase默認數據庫"default"使用#hive命令后,不使用hive>use<數據庫名>,系統默認的數據庫。可以顯式使用hive>usedefault;創建一個新庫hive>createdatabasetest_dw;Hive的數據模型-表Table內部表Partition分區表ExternalTable外部表BucketTable桶表Hive的數據模型-內部表與數據庫中的Table在概念上是類似每一個Table在Hive中都有一個相應的目錄存儲數據。例如,一個表test,它在HDFS中的路徑為:/warehouse/test。warehouse是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的數據倉庫的目錄所有的Table數據(不包括ExternalTable)都保存在這個目錄中。刪除表時,元數據與數據都會被刪除Hive的數據模型-內部表創建數據文件inner_table.dat創建表hive>createtableinner_table(keystring);加載數據hive>loaddatalocalinpath'/root/inner_table.dat'intotableinner_table;查看數據select*frominner_tableselectcount(*)frominner_table刪除表droptableinner_tableHive的數據模型-分區表Partition對應于數據庫的Partition列的密集索引在Hive中,表中的一個Partition對應于表下的一個目錄,所有的Partition的數據都存儲在對應的目錄中例如:test表中包含date和city兩個Partition,則對應于date=20130201,city=bj的HDFS子目錄為:/warehouse/test/date=20130201/city=bj對應于date=20130202,city=sh的HDFS子目錄為;/warehouse/test/date=20130202/city=shHive的數據模型-分區表CREATE
TABLEtmp_table#表名(titlestring,
#字段名稱字段類型minimum_biddouble,quantitybigint,have_invoicebigint)COMMENT'注釋:XXX'
#表注釋
PARTITIONEDBY(ptSTRING)
#分區表字段(如果你文件非常之大的話,采用分區表可以快過濾出按分區字段劃分的數據)
ROWFORMATDELIMITED
FIELDSTERMINATEDBY
'\001'
#字段是用什么分割開的STOREDASSEQUENCEFILE;#用哪種方式存儲數據,SEQUENCEFILE是hadoop自帶的文件壓縮格式一些相關命令SHOW
TABLES;#查看所有的表SHOW
TABLES
'*TMP*';#支持模糊查詢SHOWPARTITIONSTMP_TABLE;#查看表有哪些分區DESCRIBE
TMP_TABLE;#查看表結構Hive的數據模型-分區表創建數據文件partition_table.dat創建表createtablepartition_table(rectimestring,msisdnstring)partitionedby(daytimestring,citystring)rowformatdelimitedfieldsterminatedby'\t'storedasTEXTFILE;加載數據到分區loaddatalocalinpath'/home/partition_table.dat'intotablepartition_tablepartition(daytime='2013-02-01',city='bj');查看數據select*frompartition_tableselectcount(*)frompartition_table?刪除表droptablepartition_tableHive的數據模型-分區表altertablepartition_tableaddpartition(daytime='2013-02-04',city='bj');通過loaddata加載數據altertablepartition_tabledroppartition(daytime='2013-02-04',city='bj')元數據,數據文件刪除,但目錄daytime=2013-02-04還在Hive的數據模型—桶表桶表是對數據進行哈希取值,然后放到不同文件中存儲。創建表 createtablebucket_table(idstring)clusteredby(id)into4buckets; 加載數據 sethive.enforce.bucketing=true; insertintotablebucket_tableselectnamefromstu; insertoverwritetablebucket_tableselectnamefromstu;數據加載到桶表時,會對字段取hash值,然后與桶的數量取模。把數據放到對應的文件中。抽樣查詢 select*frombucket_tabletablesample(bucket1outof4onid);Hive的數據模型-外部表指向已經在HDFS中存在的數據,可以創建Partition它和內部表在元數據的組織上是相同的,而實際數據的存儲則有較大的差異內部表的創建過程和數據加載過程(這兩個過程可以在同一個語句中完成),在加載數據的過程中,實際數據會被移動到數據倉庫目錄中;之后對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除外部表只有一個過程,加載數據和創建表同時完成,并不會移動到數據倉庫目錄中,只是與外部數據建立一個鏈接。當刪除一個外部表時,僅刪除該鏈接Hive的數據模型-外部表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的數據模型-外部表創建數據文件external_table.dat創建表hive>createexternaltableexternal_table1(keystring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'location'/home/external';在HDFS創建目錄/home/external#hadoopfs-put/home/external_table.dat/home/external加載數據LOADDATAINPATH'/home/external_table1.dat'INTOTABLEexternal_table1;查看數據select*fromexternal_tableselectcount(*)fromexternal_table刪除表droptableexternal_table視圖操作視圖的創建CREATEVIEWv1ASselect*fromt1;表的操作表的修改altertabletarget_tabaddcolumns(cols,string)表的刪除droptable導入數據當數據被加載至表中時,不會對數據進行任何轉換。Load操作只是將數據復制/移動至Hive表對應的位置。LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]
INTOTABLEtablename
[PARTITION(partcol1=val1,partcol2=val2...)]把一個Hive表導入到另一個已建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指定分發器(Partitioner),多Reducer可用查詢基于Partition的查詢一般SELECT查詢是全表掃描。但如果是分區表,查詢就可以利用分區剪枝(inputpruning)的特性,類似“分區索引“”,只掃描一個表中它關心的那一部分。Hive當前的實現是,只有分區斷言(Partitionedby)出現在離FROM子句最近的那個WHERE子句中,才會啟用分區剪枝。例如,如果page_views表(按天分區)使用date列分區,以下語句只會讀取分區為‘2008-03-01’的數據。
SELECTpage_views.*FROMpage_views
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目管理考試內容理解試題及答案
- 項目管理資格認證考試回顧試題及答案
- 2024年項目管理專業人士資格考試預測試題及答案
- 2025年會計崗位職責試題及答案
- 洗煤廠粉塵治理施工方案
- 微生物檢驗技師的基本知識試題及答案
- 財務政策對公司戰略的影響試題及答案
- 水泥土換填施工方案批復
- 管道工程測量與定位考核試卷
- 2024年項目管理能力評估試題及答案
- 煙霧病教學查房
- 我的家鄉成都課件
- 延長石油集團招聘筆試
- 風機及塔筒吊裝工程吊裝方案
- 交流電機控制原理及控制系統 習題及答案 第2-12章 交流電機調速系統功率電子電路- 全數字交流電機調速系統設計
- 【MOOC】電子線路設計、測試與實驗(二)-華中科技大學 中國大學慕課MOOC答案
- 2024年人大題庫考試中國特色社會主義理論題庫答案
- 給青年的十二封信讀書分享
- 第47屆世界技能大賽江蘇省選拔賽平面設計技術項目技術工作文件
- 2024年網絡與信息安全考試題庫
- 安橋功放機TX-NR3010說明書
評論
0/150
提交評論