這篇文章給大家分享的是有關(guān)Hive能做什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司10余年經(jīng)驗(yàn)成就非凡,專業(yè)從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)頁(yè)制作,軟文營(yíng)銷,廣告投放等。10余年來已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:18980820575,我們期待您的來電!
Hive能做什么?
Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過類SQL語句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),不必開發(fā)專門的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析。
Hive是建立在 Hadoop 上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)構(gòu)架。它提供了一系列的工具,可以用來進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載(ETL https://my.oschina.net/u/2000675/blog/746016#navbar-header),這是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在 Hadoop 中的大規(guī)模數(shù)據(jù)的機(jī)制。Hive 定義了簡(jiǎn)單的類 SQL 查詢語言,稱為 HQL(Hive SQL),它允許熟悉 SQL 的用戶查詢數(shù)據(jù)。同時(shí),這個(gè)語言也允許熟悉 MapReduce 開發(fā)者的開發(fā)自定義的 mapper 和 reducer 來處理內(nèi)建的 mapper 和 reducer 無法完成的復(fù)雜的分析工作(HQL函數(shù)庫(kù))。
為什么要使用Hive?
操作接口采用類SQL語法,提供快速開發(fā)的能力
避免了去寫MapReduce,減少開發(fā)人員的學(xué)習(xí)成本
擴(kuò)展功能很方便
Hive與傳統(tǒng)數(shù)據(jù)庫(kù)對(duì)比
Hive | RDBMS | |
查詢語言 | HQL | SQL |
數(shù)據(jù)存儲(chǔ) | HDFS | Raw Device or Local FS |
執(zhí)行 | MapReduce | Excutor |
執(zhí)行延遲 | 高 | 低 |
處理數(shù)據(jù)規(guī)模 | 大 | 小 |
數(shù)據(jù)類型 | 全部數(shù)據(jù)(歷史和在線---分析) | 在線數(shù)據(jù) |
冗余程度 | 高冗余 | 低冗余(通過范式) |
... | ... | ... |
... | ... | ... |
Hive的架構(gòu)
用戶接口主要有三個(gè):CLI,Client 和WUI。其中最常用的是CLI,Cli啟動(dòng)的時(shí)候,會(huì)同時(shí)啟動(dòng)一個(gè)Hive副本。Client是Hive的客戶端,用戶連接至Hive Server。在啟動(dòng)Client模式的時(shí)候,需要指出Hive Server所在節(jié)點(diǎn),并且在該節(jié)點(diǎn)啟動(dòng)Hive Server。WUI是通過瀏覽器訪問Hive。
Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,如MySQL、derby。Hive中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。
解釋器、編譯器、優(yōu)化器完成HQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計(jì)劃的生成。生成的查詢計(jì)劃存儲(chǔ)在HDFS中,并在隨后有MapReduce調(diào)用執(zhí)行。
Hive的數(shù)據(jù)存儲(chǔ)在HDFS中,大部分的查詢、計(jì)算由MapReduce完成(包含*的查詢,比如select * from tbl不會(huì)生成MapRedcue任務(wù))。
Thriff (參考http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/)
Hive相關(guān)概念
Operator(最小的處理單元):每個(gè)操作符代表HDFS的一個(gè)操作或者一道MapReduce作業(yè)
Operator都是Hive定義的一個(gè)處理過程
Operator定義(樹狀結(jié)構(gòu)):
protectedList>childOperators; protectedList >parentOperators; protectedbooleandone;// 初始化值為false
ANTLR詞法語法分析工具解析HQL
Hive的三種模式
Local模式:該模式連接到一個(gè)In-memory的數(shù)據(jù)庫(kù)Derby,一般用于Unit Test
Hive單用戶模式:通過網(wǎng)絡(luò)連接到一個(gè)數(shù)據(jù)庫(kù)中,是最經(jīng)常使用到的模式
Hive多用戶模式:用于非Java客戶端訪問元數(shù)據(jù)庫(kù),在服務(wù)器端啟動(dòng)MetaStoreServer,客戶端利用Thrift協(xié)議通過MetaStoreServer訪問元數(shù)據(jù)庫(kù)
1.本地 derby 這種方式是最簡(jiǎn)單的存儲(chǔ)方式,只需要在 hive-site.xml 做如下配置便可注:使用 derby 存儲(chǔ)方式時(shí),運(yùn)行 hive 會(huì)在當(dāng)前目錄生成一個(gè) derby 文件和一個(gè) metastore_db 目錄。這種存儲(chǔ)方式的弊端是在同一個(gè)目錄下同時(shí)只能有一個(gè) hive 客戶端能使用數(shù)據(jù)庫(kù),否則會(huì)提示如下錯(cuò)誤 [html] view plaincopyprint? hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metast ore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metastore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask 2.本地 mysql 這種存儲(chǔ)方式需要在本地運(yùn)行一個(gè) mysql 服務(wù)器,并作如下配置(需要將 mysql 的驅(qū)動(dòng) jar 包拷貝到$HIVE_HOME/lib 目錄下)。 # /opt/hive-1.2.1/conf/hive-site.xml javax.jdo.option.ConnectionURL jdbc:derby:;databaseName=metastore_db;create=true javax.jdo.option.ConnectionDriverName org.apache.derby.jdbc.EmbeddedDriver hive.metastore.local true hive.metastore.warehouse.dir /user/hive/warehouse 附: 安裝 mysql Yum install mysql-server -y 啟動(dòng)服務(wù) service mysqld start mysql 修改 mysql 權(quán)限: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION; flush privileges; delete from user where Host != '%'; 刪除多余會(huì)對(duì)權(quán)限造成影響的數(shù)據(jù)刷新權(quán)限 [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected at jline.TerminalFactory.create(TerminalFactory.java:101) 錯(cuò)誤的原因: Hadoop jline 版本和 hive 的 jline 不一致 3.遠(yuǎn)端 mysql 3.1.remote 一體 這種存儲(chǔ)方式需要在遠(yuǎn)端服務(wù)器運(yùn)行一個(gè) mysql 服務(wù)器,并且需要在 Hive 服務(wù)器啟動(dòng) meta 服務(wù)。 這里用 mysql 的測(cè)試服務(wù)器,ip 位 192.168.1.214,新建 hive_remote 數(shù)據(jù)庫(kù),字符集位 latine1 hive.metastore.warehouse.dir /user/hive_remote/warehouse hive.metastore.local true javax.jdo.option.ConnectionURL jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName hive javax.jdo.option.ConnectionPassword password 注:這里把 hive 的服務(wù)端和客戶端都放在同一臺(tái)服務(wù)器上了。服務(wù)端和客戶端可以拆開, 3.2.Remote 分開 將 hive-site.xml 配置文件拆為如下兩部分 -服務(wù)端配置文件 啟動(dòng):hive --service metastore hive.metastore.warehouse.dir /user/hive/warehouse javax.jdo.option.ConnectionURL jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName hive javax.jdo.option.ConnectionPassword password hive.metastore.local false hive.metastore.uris thrift://192.168.1.188:9083 -客戶端配置文件 啟動(dòng):hive hive.metastore.warehouse.dir /user/hive/warehouse javax.jdo.option.ConnectionURL jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 123456 hive.metastore.warehouse.dir /user/hive/warehouse hive.metastore.local false hive.metastore.uris thrift://slave2:9083
感謝各位的閱讀!關(guān)于“Hive能做什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!