溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hive是什么意思

發(fā)布時(shí)間:2021-12-10 10:12:13 來源:億速云 閱讀:175 作者:小新 欄目:云計(jì)算

這篇文章主要介紹hive是什么意思,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

    hive是hadoop整個(gè)項(xiàng)目使用中最常用的輔助項(xiàng)目之一。

    hadoop基礎(chǔ)的組件有hdfs和mapreduce。hdfs完成整個(gè)hadoop集群中數(shù)據(jù)的存儲,采用google的bigTable架構(gòu),其實(shí)我覺得就是將數(shù)據(jù)平分為多份,然后平分給分布式中的各機(jī)器上,存儲在上面的數(shù)據(jù)就像一個(gè)隱藏文件,你在本地硬盤上找不到它們,但卻可以通過hadoop中hdfs指令顯示和操作它們,像hadoop dfs -ls 路徑。而mapreduce則是將存儲在集群中的數(shù)據(jù)進(jìn)行分布式計(jì)算,由原來1臺電腦的工作放到集群中所有電腦上,因此它的運(yùn)算效率會有顯著的提高。

    說完了hdfs和mapreduce,你應(yīng)該對hadoop有個(gè)基本的了解了,咱們再說下hive。

    hive是通過解析你所寫的HiveQL語句,來進(jìn)行mapreduce計(jì)算,實(shí)現(xiàn)數(shù)據(jù)倉庫中分析數(shù)據(jù)的作用。hive其實(shí)就是針對mapreduce寫了一系列的方法和類,咱們可以通過寫HIVEQL的形式執(zhí)行mapreduce.用hiveQL能實(shí)現(xiàn)的功能你都能在mapReduce中寫出來,如果你不閑麻煩的話。。。

    說下hive的主要功能:數(shù)據(jù)ETL(抽取、轉(zhuǎn)換、加載)工具、數(shù)據(jù)存儲和大型數(shù)據(jù)集的查詢和分析能力。

    hive包含了四種數(shù)據(jù)模型:表(Table)、外部表(External Table)、分區(qū)(Partition)、桶(bucket)。

    表和外部表個(gè)人感覺用起來沒什么區(qū)別, 有區(qū)別的地方只不過是外部表在創(chuàng)建的時(shí)候數(shù)據(jù)沒有移動到數(shù)據(jù)倉庫目錄中,也就是說外部表不是由它自己來管理。而刪除外部表的時(shí)候,只會刪除元數(shù)據(jù),外部表內(nèi)的數(shù)據(jù)不會被刪除。

    而分區(qū)和桶。。。就用分區(qū)。。不過分區(qū)和桶應(yīng)該都是為了優(yōu)化hive的分析效率而做的架構(gòu),我原來放10號到20號的數(shù)據(jù)都放個(gè)一個(gè)文件中,現(xiàn)在,我通過分區(qū),將10號到20號的每日數(shù)據(jù)存儲在以天為單位的存儲文件中,這樣,我查詢某一天的數(shù)據(jù)時(shí)只是查詢這一天的文件,而不是查詢未分區(qū)前的整個(gè)文件,這樣,效率就上來了,當(dāng)然,這只是我的理解,可能還有其它作用。。。

    我理解的hive的基本工作是:將metadata存到hive自建的表中,然后通過操作和分析hive表中的數(shù)據(jù),得到你想要的分析結(jié)果。

    hive的元數(shù)據(jù)存儲有三種方式:

    一、Single User Mode.其實(shí)就是將metadata存儲在一個(gè)內(nèi)存數(shù)據(jù)庫(derby)中。內(nèi)存才多大啊,所以日常中基本不用。

    二、Multi User Mode. 通過是連接本機(jī)的MySql,來獲取元數(shù)據(jù)。這是日常和工作中最常用的一種方式。。貌似是工作中。。

    三、Remote Server Mode .其實(shí)就是通過本機(jī)的thrift協(xié)議訪問另一個(gè)服務(wù)器上的metaStoreServcer,metadata不在本地。

    關(guān)于hive配置,不多說了,網(wǎng)上一堆。。。

   關(guān)于hive中表的操作,我說下容易讓人誤會的地方:

    hive雖然有表的概念,但它是一個(gè)離線數(shù)據(jù)分析工具,建表只是為了分析服務(wù)的,而分析的數(shù)據(jù)你不可能一條一條插入進(jìn)去,或者刪幾條。。而它的正常使用方式是將metadata導(dǎo)入到hive表中,再通過hiveQL分析hive表中的數(shù)據(jù)。所以hive中不提供手動插入一條或幾條數(shù)據(jù)。有手動就得有自動,自動我舉個(gè)例子:insert overwrite table abc select * from bbc;這就是我認(rèn)為的自動。。。。不能手動增加數(shù)據(jù)了,只能導(dǎo)入數(shù)據(jù)或自動添加數(shù)據(jù)。那么刪除和修改呢,妥妥的也不能。

    關(guān)于hive語句的介紹也不多說了,網(wǎng)上也一堆,說的都挺清楚明白的。不過,這里我還得舉個(gè)例子,關(guān)于我今天寫的一個(gè),煩了我一天的mapjoin...

     mapjoin 有兩個(gè)好處:1.關(guān)聯(lián)的兩張表中有一個(gè)表非常小時(shí),mapjoin可以將小表中的數(shù)據(jù)加載到內(nèi)存中,然后在map階段會自動大表中的數(shù)據(jù),效率還不錯(cuò)。like :select /*+ mapjoin*/ a.id,a,username from a join b on (a.id=b.id)。這是在對等的情況下,效率相當(dāng)不錯(cuò)。

                          2.還有一個(gè)好處就是它可以實(shí)現(xiàn)不對等連接。。 join ..on  ()  ,on 后面會跟對等的條件,像a.id=b.id ,你如果跟個(gè)like 會報(bào)錯(cuò)。而mapjoin可以實(shí)現(xiàn)不對等條件,就是在join后面不用on了,直接用where,不過這個(gè)效率,試了下,個(gè)人感覺效率不高。。like :select /*+ mapjoin*/ a.id,a,username from a join b where a.username like 'error')。

            關(guān)于hive其它的方面我還沒有看。。等以后看完了,再談下感受吧。。

    PS: 關(guān)于mapjoin()的非等值測試:

    兩張表:pv_temp_test1(大表)  ,title_keyword_test(小表)

             pv_temp_test1:  530180 條 

             title_keyword_test  5646 條

  測試語句 :

hive> insert overwrite table hbase_test_keyword 
select /*+ mapjoin(a)*/ a.keyword,b.dt,b.pid,b.area,count(*),count(distinct clientid) from title_keyword_test a join (select dt,pid,area,wd,clientid from pv_temp_test1 where wd!='' and wd != 'None') b where b.wd like concat('%',a.keyword,'%') group by  a.keyword,b.dt,b.area,b.pid;

   花費(fèi)時(shí)間:4927秒......

以上是“hive是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI