impala和python_Impala和Hive之间有什么关系?
除了共享hive的metastore之外沒什么太大的關(guān)系。
hive是Java寫的,由Facebook開源,目的是將特定的SQL語句編譯為MapReduce jar包扔給hadoop去執(zhí)行,本質(zhì)上是一個代碼轉(zhuǎn)換編譯的工具,簡化mr的開發(fā),因?yàn)閜ig hive出現(xiàn)以前,mr都需要由熟悉Java或Python和hadoop架構(gòu)熟悉的比較高級的程序員來寫,這就限制了hadoop的使用廣度。所以擅長語言翻譯的facebook搞了一個hive,來把sql語言翻譯成java再跑mr。
impala是spark萌芽時期cdh開源的c++編寫的sql執(zhí)行引擎,也用到了有向無環(huán)圖和RDD的思路,我想當(dāng)初可能是CDH想跟spark競爭一下內(nèi)存計算這塊的市場,后來發(fā)現(xiàn)爭不過spark,現(xiàn)在也就處于半開發(fā)半維護(hù)的狀態(tài)了,從核心上來說,執(zhí)行原理跟hive完全不一樣,hive是把sql轉(zhuǎn)譯成java,編譯了jar包提交給hadoop,剩下的事情就是hadoop的mr的事了,hive只需要等著獲取結(jié)果就好了。而impala則調(diào)用C語言層的libhdfs來直接訪問HDFS,從NN獲取到數(shù)據(jù)塊信息后,直接將數(shù)據(jù)塊讀入內(nèi)存,會使用hadoop的一個配置項(xiàng)叫dfs.client.short.read.circuit。看得出來,這是一個client端配置,作用是直接讀取本地的數(shù)據(jù)塊而不是通過HDFS讀取整合后的文件。所以impala需要在每個dn節(jié)點(diǎn)都安裝impalad去完成本地讀取的工作。數(shù)據(jù)塊讀進(jìn)內(nèi)存之后就開始做有向無環(huán)圖,完成計算之后會將熱數(shù)據(jù)保存在內(nèi)存里供下次讀取。
CDH不開發(fā)單獨(dú)的metastore是因?yàn)闆]有必要,當(dāng)時hive已經(jīng)是主流分析工具了,hadoop的使用者經(jīng)過幾年的積累,已經(jīng)在hive上建立了成千上萬個表。你再單獨(dú)開發(fā)一個metastore純屬浪費(fèi),難道客戶還要再給impala建一個單獨(dú)的schema嗎?再把那成千上萬的分析表重建一遍?為什么不直接用以前hive建好的?
在我的認(rèn)知范圍內(nèi),impala不能脫離hive的metastore獨(dú)立存在,而且catalogd有時還需要手工刷新hive的metastore緩存。
總結(jié)
以上是生活随笔為你收集整理的impala和python_Impala和Hive之间有什么关系?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php定时发送生日模块消息_Swoft
- 下一篇: linux 正则查找email_Linu