傳智播客-培訓課程7hive_1_第1頁
傳智播客-培訓課程7hive_1_第2頁
傳智播客-培訓課程7hive_1_第3頁
傳智播客-培訓課程7hive_1_第4頁
傳智播客-培訓課程7hive_1_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、高級軟件人才實作培訓專家!Hadoop深入淺出講師:吳超博客:QQ:3774 86624北京傳智播客教育 高級軟件人才實作培訓專家!課程安排l Hive是什么?其體系結構簡介*l Hive的安裝與管理*l HiveQL數(shù)據(jù)類型,表以及表的操作*l HiveQL查詢數(shù)據(jù)*l Hive的Java客戶端*加深拓展l Hive的自定義函數(shù)UDF*高級軟件人才實作培訓專家!什么是Hive(一)l Hive 是建立在 Hadoop上的數(shù)據(jù)倉庫基礎構架。它提供了一系列的工具,可以用來進行數(shù)據(jù)提取轉化加載(ETL ),這是一種可以存儲、查詢和分析存儲在Ha

2、doop中的大規(guī)模數(shù)據(jù)的機制。Hive 定義了簡單的類 SQL查詢語言,稱為 QL ,它允許熟悉 SQL的用戶查詢數(shù)據(jù)。同時,這個語言也允許熟悉MapReduce開發(fā)者的開發(fā)自定義的 mapper和reducer來處理內建的 mapper 和 reducer無法完成的復雜的分析工作。高級軟件人才實作培訓專家!什么是Hive(二)l Hive是SQL解析引擎,它將SQL語句轉譯成M/R Job然后在Hadoop執(zhí)行。l Hive的表其實就是HDFS的目錄/文件,按表名把文件夾分開。如果是分區(qū)表,則分區(qū)值是子文件夾,可以直接在M/R Job里使用這些數(shù)據(jù)。高級軟件人才實作培訓專家!Hive的系統(tǒng)架

3、構 用戶接口,包括 CLI, JDBC/ODBC,WebUI 元數(shù)據(jù)存儲,通常是存儲在關系數(shù)據(jù)庫如 mysql, derby 中 解釋器、編譯器、優(yōu)化器、執(zhí)行器 Hadoop:用 HDFS 進行存儲, 利用 MapReduce 進行計算高級軟件人才實作培訓專家!Hive的系統(tǒng)架構用戶接口主要有三個:CLI,JDBC/ODBC和 WebUICLI,即Shell命令行JDBC/ODBC 是 Hive 的Java,與使用傳統(tǒng)數(shù)據(jù)庫JDBC的方式類似WebGUI是通過瀏覽器訪問 HiveHive 將元數(shù)據(jù)存儲在數(shù)據(jù)庫中(metastore),目前只支持 mysql、derby。Hive 中的元數(shù)據(jù)包括

4、表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等解釋器、編譯器、優(yōu)化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計劃(plan)的生成。生成的查詢計劃存儲在HDFS 中,并在隨后有 MapReduce 調用執(zhí)行Hive 的數(shù)據(jù)存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(包含 * 的查詢,比如 select * from table 不會生成 MapRedcue 任務)l1.2.3.lll高級軟件人才實作培訓專家!Hive的安裝在Hadoop0上修改/etc/profile文件。#vi /etc/profile增加export

5、 HIVE_HOME=/usr/local/hive修改exportPATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HIVE_HOME/bin保存退出#source /etc/profilel 把hive-0.9.0.tar.gz復制到/usr/locall 解壓hive-0.9.0.tar.gz與重命名#cd /usr/local#tar -zxvf hive-0.9.0.tar.gz #mv hive-0.9.0 hive高級軟件人才實作培訓專家!Hive的安裝1.修改hadoop的hadoop-env.sh(否則啟動hive匯報找不到類的錯誤)ex

6、port HADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin2.修改$HIVE_HOME/bin的hive-config.sh,增加以下三行export JAVA_HOME=/usr/local/jdkexport HIVE_HOME=/usr/local/hiveexport HADOOP_HOME=/usr/local/hadoopl cd$HIVE_HOMEl mvhive-env.sh.templatehive-env.shl mvhive-default.xml.templatehive-site.xml高

7、級軟件人才實作培訓專家!Hive的安裝l 啟動#hivehiveshow tables;hivecreate table test(id int,name string); hivequit;觀察:#hadoop fs -ls /user/hive參數(shù):hive.metastore.warehouse.dir高級軟件人才實作培訓專家!Hive的metastorel metastore是hive元數(shù)據(jù)的集中存放地。metastore默認使用內嵌的derby數(shù)據(jù)庫作為存儲引擎l Derby引擎的缺點:一次只能打開一個會話l 使用Mysql作為外置存儲引擎,多用戶同時訪問高級軟件人才實作培訓專家!H

8、ive的安裝l 配置MySQL的metastorel 1.上傳mysql-connector-java-5.1.10.jar到$HIVE_HOME/libl 2.登錄MYSQL,創(chuàng)建數(shù)據(jù)庫hivel #mysql -uroot -padminl mysqlcreate database hive;l mysqlGRANT all ON hive.* TO root% IDENTIFIED BY admin;l mysqlflush privileges;l mysqlset global binlog_format=MIXED;l 3.把mysql的數(shù)據(jù)庫字符類型改為latin1高級軟件人才實

9、作培訓專家!修改$HIVE_HOME/conf/hive-site.xmljavax.jdo.option.ConnectionURLjdbc:mysql:/hadoop0:3306/hive?createDatabaseIfNotExist=truejavax.jdo.option.ConnectionDriverNamecom.mysql.jdbc.Driverjavax.jdo.option.ConnectionUserNamerootjavax.jdo.option.ConnectionPasswordadmin高級軟件人才實作培訓專家!Hive運行模式l Hive的運行模式即任務的執(zhí)

10、行環(huán)境l 分為本地與集群兩種我們可以通過mapred.job.tracker 來指明設置方式:hive SET mapred.job.tracker=local高級軟件人才實作培訓專家!l 1、hive 命令行模式,直接輸入#/hive/bin/hive的執(zhí)行程序,或者輸入 #hive -service clil 2、 hive web界面的 (端9999) 啟動方式#hive -service hwi &用于通過瀏覽器來訪問hive http:/hadoop0:9999/hwi/l 3、 hive 遠程服務 (端10000) 啟動方式#hive -service hiveserver &Hi

11、ve的啟動方式高級軟件人才實作培訓專家!Hive與傳統(tǒng)數(shù)據(jù)庫查詢語言HiveQLSQL數(shù)據(jù)存儲位置HDFSRaw Device or 本地FS數(shù)據(jù)格式用戶定義系統(tǒng)決定數(shù)據(jù)更新不支持支持索引新版本有,但弱有執(zhí)行MapReduceExecutor執(zhí)行延遲高低可擴展性高低數(shù)據(jù)規(guī)模大小高級軟件人才實作培訓專家!Hive的數(shù)據(jù)類型l 基本數(shù)據(jù)類型tinyint/smallint/int/bigint float/doublebooleanstring復雜數(shù)據(jù)類型Array/Map/Struct 沒有date/datetime高級軟件人才實作培訓專家!Hive的數(shù)據(jù)存儲l Hive的數(shù)據(jù)存儲基于Hadoo

12、p HDFSl Hive沒有專門的數(shù)據(jù)存儲格式l 存儲結構主要包括:數(shù)據(jù)庫、文件、表、視圖l Hive默認可以直接加載文本文件(TextFile),還支持sequence filel 創(chuàng)建表時,指定Hive數(shù)據(jù)的列分隔符與行分隔符,Hive即可解析數(shù)據(jù)高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型-數(shù)據(jù)庫l 類似傳統(tǒng)數(shù)據(jù)庫的DataBasel 默認數(shù)據(jù)庫default使用#hive命令后,不使用hiveuse ,系統(tǒng)默認的數(shù)據(jù)庫。可以顯式使用hive use default;創(chuàng)建一個新庫hive create database test_dw;高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型-表l

13、Table 內部表l Partition分區(qū)表l External Table 外部表l BucketTable 桶表高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型-內部表l 與數(shù)據(jù)庫中的 Table 在概念上是類似l 每一個 Table 在 Hive 中都有一個相應的目錄存儲數(shù)據(jù)。例如,一個表 test,它在 HDFS 中的路徑為:/ warehouse/test。 warehouse是在 hive-site.xml 中由$hive.metastore.warehouse.dir 指定的數(shù)據(jù)倉庫的目錄l 所有的 Table 數(shù)據(jù)(不包括 External Table)都保存在這個目錄中。l 刪

14、除表時,元數(shù)據(jù)與數(shù)據(jù)都會被刪除高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型-內部表l 創(chuàng)建數(shù)據(jù)文件inner_table.datl 創(chuàng)建表hivecreate table inner_table (key string);l 加載數(shù)據(jù)hiveload data local inpath /root/inner_table.dat into table inner_table;l 查看數(shù)據(jù)select * from inner_tableselect count(*) from inner_tablel 刪除表 drop table inner_table高級軟件人才實作培訓專家!Hive的數(shù)據(jù)

15、模型-分區(qū)表l Partition 對應于數(shù)據(jù)庫的 Partition 列的密集索引l 在 Hive 中,表中的一個 Partition 對應于表下的一個目錄,所有的 Partition 的數(shù)據(jù)都存儲在對應的目錄中例如: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=sh高級軟件

16、人才實作培訓專家!Hive的數(shù)據(jù)模型-分區(qū)表TABLE tmp_table #表名CREATE(title# 字段名稱 字段類型double, bigint, bigintstring,minimum_bid quantity have_invoice)COMMENT 注釋:XXX #表注釋PARTITIONED BY(pt STRING) #分區(qū)表字段(如果你文件非常之大的話,采用分區(qū)表可以快過濾出按分區(qū)字段劃分的數(shù)據(jù))ROW FORMAT DELIMITED# 字段是用什么分割開的FIELDS TERMINATED BY 001STORED AS SEQUENCEFILE; #用哪種方式存

17、儲數(shù)據(jù),SEQUENCEFILE是hadoop自帶的文件壓縮格式一些相關命令TABLES; # 查看所有的表TABLES *TMP*; #支持模糊查詢SHOW SHOWPARTITIONS TMP_TABLE; #查看表有哪些分區(qū)SHOWDESCRIBE TMP_TABLE; #查看表結構高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型-分區(qū)表l 創(chuàng)建數(shù)據(jù)文件partition_table.datl 創(chuàng)建表create table partition_table(rectime string,msisdn string) partitioned by(daytime string,city str

18、ing) row format delimited fields terminated by t stored as TEXTFILE;l 加載數(shù)據(jù)到分區(qū)load data local inpath /home/partition_table.dat into table partition_table partition (daytime=2013-02-01,city=bj);l 查看數(shù)據(jù)select * from partition_tableselect count(*) from partition_table 刪除表 drop table partition_table高級軟件人才

19、實作培訓專家!Hive的數(shù)據(jù)模型-分區(qū)表l alter table partition_table add partition (daytime=2013- 02-04,city=bj);通過load data 加載數(shù)據(jù)l alter table partition_table drop partition (daytime=2013- 02-04,city=bj)元數(shù)據(jù),數(shù)據(jù)文件刪除,但目錄daytime=2013-02-04還在高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型桶表桶表是對數(shù)據(jù)進行哈希取值,然后放到不同文件中存儲。創(chuàng)建表create table bucket_table(id s

20、tring) clustered by(id) into 4 buckets;ll加載數(shù)據(jù)set hive.enforce.bucketing = true;insert into table bucket_table select name from stu; insert overwrite table bucket_table select name from stu;數(shù)據(jù)加載到桶表時,會對字段取hash值,然后與桶的數(shù)量取模。把數(shù)據(jù)放到對應的文件中。ll抽樣查詢select * from bucket_table tablesample(bucket 1 out of 4 on id)

21、;l高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型-外部表指向已經(jīng)在 HDFS 中存在的數(shù)據(jù),可以創(chuàng)建 Partition它和 內部表 在元數(shù)據(jù)的組織上是相同的,而實際數(shù)據(jù)的存儲則有較大的差異內部表 的創(chuàng)建過程和數(shù)據(jù)加載過程(這兩個過程可以在同一個語句中完成),在加載數(shù)據(jù)的過程中,實際數(shù)據(jù)會被移動到數(shù)據(jù)倉庫目錄中;之后對數(shù)據(jù)對訪問將會直接在數(shù)據(jù)倉庫目錄中完成。刪除表時,表中的數(shù)據(jù)和元數(shù)據(jù)將會被同時刪除外部表 只有一個過程,加載數(shù)據(jù)和創(chuàng)建表同時完成,并不會移動到數(shù)據(jù)倉庫目錄中,只是與外部數(shù)據(jù)建立一個鏈接。當刪除一個 外部表 時,僅刪除該鏈接llll高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型-外部

22、表CREATE EXTERNAL TABLE page_view ( viewTime INT,userid BIGINT, page_url STRING,referrer_url STRING,ip STRING COMMENTIP Address of the User,country STRING COMMENTcountry of origination)COMMENTThis is the staging page view tableROW FORMAT DELIMITEDFIELDS TERMINATEDBY 44 LINESTERMINATEDBY 12STOREDAS TE

23、XTFILELOCATIONhdfs:/centos:9000/user/data/staging/page_view;高級軟件人才實作培訓專家!Hive的數(shù)據(jù)模型-外部表l 創(chuàng)建數(shù)據(jù)文件external_table.datl 創(chuàng)建表hivecreate external table external_table1 (key string) ROW FORMAT DELIMITED FIELDS TERMINATED BY t location /home/external;在HDFS創(chuàng)建目錄/home/external#hadoop fs -put /home/external_table.

24、dat /home/externall 加載數(shù)據(jù)LOAD DATA INPATH /home/external_table1.dat INTO TABLE external_table1;l 查看數(shù)據(jù)select * from external_tableselect count(*) from external_tablel 刪除表drop table external_table高級軟件人才實作培訓專家!視圖操作l 視圖的創(chuàng)建CREATE VIEW v1 AS select * from t1;高級軟件人才實作培訓專家!表的操作l 表的修改alter table target_tab ad

25、d columns (cols,string)l 表的刪除drop table高級軟件人才實作培訓專家!導入數(shù)據(jù) 當數(shù)據(jù)被加載至表中時,不會對數(shù)據(jù)進行任何轉換。Load 操作只是將數(shù)據(jù)復制/移動至 Hive 表對應的位置。LOAD DATA LOCAL INPATH filepath OVERWRITEINTO TABLE tablenamePARTITION (partcol1=val1, partcol2=val2 .) 把一個Hive表導入到另一個已建Hive表INSERT OVERWRITE TABLE tablename PARTITION (partcol1=val1, partc

26、ol2=val2 .) select_statement FROM from_statement CTASCREATE EXTERNAL TABLE IF NOT EXISTS table_name(col_name data_type, .) AS SELECT 例:create table new_external_test asselect * from external_table1;高級軟件人才實作培訓專家!查詢select SELECT ALL | DISTINCTselect_expr, select_expr, . FROM table_reference WHERE wher

27、e_condition GROUP BY col_list CLUSTER BY col_list |DISTRIBUTE BY 指定分發(fā)器(Partitioner),多Reducer可用DISTRIBUTE BY col_list SORT BYcol_list | ORDER BY col_list LIMIT number高級軟件人才實作培訓專家!查詢 基于Partition的查詢一般 SELECT 查詢是全表掃描。但如果是分區(qū)表,查詢就可以利用分區(qū)剪枝(input pruning)的特性,類似“分區(qū)索引“”,只掃描一個表中它關心的那一部分。Hive 當前的實現(xiàn)是,只有分區(qū)斷言(Part

28、itioned by)出現(xiàn)在離 FROM 子句最近的那個WHERE 子句中,才會啟用分區(qū)剪枝。例如,如果 page_views 表(按天分區(qū))使用 date 列分區(qū),以下語句只會讀取分區(qū)為2008-03-01的數(shù)據(jù)。SELECT page_views.*FROM page_viewsWHERE page_views.date = 2013-03-01 AND page_views.date create table acinfo (name string,acip string)row format delimited fields terminated by t stored as TEXT

29、FILE;hive load data local inpath /home/acinfo/ac.dat into table acinfo;l 內連接select ,a.* from dim_ac a join acinfo b on (a.ac=b.acip) limit 10;l 左外連接select ,a.* from dim_ac a left outer join acinfo b on a.ac=b.acip limit 10;表連接高級軟件人才實作培訓專家!Java客戶端l Hive遠程服務啟動#hive -service hiveserver /dev/null 2/dev/null &l JAVA客戶端相關代碼Class.forName(org.apache.hadoop.hive.jdbc.HiveDriver); Connection con = DriverManager.getConnection(jdbc:hive:/192.1

溫馨提示

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

評論

0/150

提交評論