一、Hadoop介紹
Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。
Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(HadoopDistributedFileSystem),簡稱HDFS。HDFS有高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(highthroughput)來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(largedataset)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streamingaccess)文件系統(tǒng)中的數(shù)據(jù)。
Hadoop的核心架構(gòu)
HDFS
對外部客戶機(jī)而言,HDFS就像一個(gè)傳統(tǒng)的分級文件系統(tǒng)。可以創(chuàng)建、刪除、移動(dòng)或重命名文件,等等。但是HDFS的架構(gòu)是基于一組特定的節(jié)點(diǎn)構(gòu)建的(參見圖1),這是由它自身的特點(diǎn)決定的。這些節(jié)點(diǎn)包括NameNode(僅一個(gè)),它在HDFS內(nèi)部提供元數(shù)據(jù)服務(wù);DataNode,它為HDFS提供存儲(chǔ)塊。由于僅存在一個(gè)NameNode,因此這是HDFS的一個(gè)缺點(diǎn)(單點(diǎn)失?。?/p>
存儲(chǔ)在HDFS中的文件被分成塊,然后將這些塊復(fù)制到多個(gè)計(jì)算機(jī)中(DataNode)。這與傳統(tǒng)的RAID架構(gòu)大不相同。塊的大?。ㄍǔ?4MB)和復(fù)制的塊數(shù)量在創(chuàng)建文件時(shí)由客戶機(jī)決定。NameNode可以控制所有文件操作。HDFS內(nèi)部的所有通信都基于標(biāo)準(zhǔn)的TCP/IP協(xié)議。
NameNode
NameNode是一個(gè)通常在HDFS實(shí)例中的單獨(dú)機(jī)器上運(yùn)行的軟件。它負(fù)責(zé)管理文件系統(tǒng)名稱空間和控制外部客戶機(jī)的訪問。NameNode決定是否將文件映射到DataNode上的復(fù)制塊上。對于最常見的3個(gè)復(fù)制塊,第一個(gè)復(fù)制塊存儲(chǔ)在同一機(jī)架的不同節(jié)點(diǎn)上,最后一個(gè)復(fù)制塊存儲(chǔ)在不同機(jī)架的某個(gè)節(jié)點(diǎn)上。注意,這里需要您了解集群架構(gòu)。
二、hive介紹
Hive是部署在hadoop集群上的數(shù)據(jù)倉庫工具。
數(shù)據(jù)庫和數(shù)據(jù)倉庫的區(qū)別:
數(shù)據(jù)庫(如常用關(guān)系型數(shù)據(jù)庫)可以支持實(shí)時(shí)增刪改查。
數(shù)據(jù)倉庫不僅僅是為了存放數(shù)據(jù),它可以存放海量數(shù)據(jù),而且可以查詢、分析和計(jì)算存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)。但他有一個(gè)弱點(diǎn),他不能進(jìn)行實(shí)時(shí)的更新、刪除等操作。也就是一次寫入多次讀取。
Hive也定義了簡單的類SQL查詢語言,稱為QL,它允許熟悉SQL的用戶查詢數(shù)據(jù)?,F(xiàn)在hive2.0也支持更新、索引和事務(wù),幾乎SQL的其它特征都能支持。
Hive支持SQL92大部分功能,我們暫時(shí)可以把hive理解成一個(gè)關(guān)系型數(shù)據(jù)庫,語法和MySQL是幾乎是一樣的。
Hive是Hadoop上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架之一,是SQL解析引擎,它可以將SQL轉(zhuǎn)換成MapReduce任務(wù),然后在Hadoop執(zhí)行。
實(shí)際的I/O事務(wù)并沒有經(jīng)過NameNode,只有表示DataNode和塊的文件映射的元數(shù)據(jù)經(jīng)過NameNode。當(dāng)外部客戶機(jī)發(fā)送請求要求創(chuàng)建文件時(shí),NameNode會(huì)以塊標(biāo)識和該塊的第一個(gè)副本的DataNodeIP地址作為響應(yīng)。這個(gè)NameNode還會(huì)通知其他將要接收該塊的副本的DataNode。
NameNode在一個(gè)稱為FsImage的文件中存儲(chǔ)所有關(guān)于文件系統(tǒng)名稱空間的信息。這個(gè)文件和一個(gè)包含所有事務(wù)的記錄文件(這里是EditLog)將存儲(chǔ)在NameNode的本地文件系統(tǒng)上。FsImage和EditLog文件也需要復(fù)制副本,以防文件損壞或NameNode系統(tǒng)丟失。
NameNode本身不可避免地具有SPOF(SinglePointOfFailure)單點(diǎn)失效的風(fēng)險(xiǎn),主備模式并不能解決這個(gè)問題,通過HadoopNon-stopnamenode才能實(shí)現(xiàn)100%uptime可用時(shí)間。
DataNode
DataNode也是一個(gè)通常在HDFS實(shí)例中的單獨(dú)機(jī)器上運(yùn)行的軟件。Hadoop集群包含一個(gè)NameNode和大量DataNode。DataNode通常以機(jī)架的形式組織,機(jī)架通過一個(gè)交換機(jī)將所有系統(tǒng)連接起來。Hadoop的一個(gè)假設(shè)是:機(jī)架內(nèi)部節(jié)點(diǎn)之間的傳輸速度快于機(jī)架間節(jié)點(diǎn)的傳輸速度。
DataNode響應(yīng)來自HDFS客戶機(jī)的讀寫請求。它們還響應(yīng)來自NameNode的創(chuàng)建、刪除和復(fù)制塊的命令。NameNode依賴來自每個(gè)DataNode的定期心跳(heartbeat)消息。每條消息都包含一個(gè)塊報(bào)告,NameNode可以根據(jù)這個(gè)報(bào)告驗(yàn)證塊映射和其他文件系統(tǒng)元數(shù)據(jù)。如果DataNode不能發(fā)送心跳消息,NameNode將采取修復(fù)措施,重新復(fù)制在該節(jié)點(diǎn)上丟失的塊。
文件操作
可見,HDFS并不是一個(gè)萬能的文件系統(tǒng)。它的主要目的是支持以流的形式訪問寫入的大型文件。
如果客戶機(jī)想將文件寫到HDFS上,首先需要將該文件緩存到本地的臨時(shí)存儲(chǔ)。如果緩存的數(shù)據(jù)大于所需的HDFS塊大小,創(chuàng)建文件的請求將發(fā)送給NameNode。NameNode將以DataNode標(biāo)識和目標(biāo)塊響應(yīng)客戶機(jī)。
同時(shí)也通知將要保存文件塊副本的DataNode。當(dāng)客戶機(jī)開始將臨時(shí)文件發(fā)送給第一個(gè)DataNode時(shí),將立即通過管道方式將塊內(nèi)容轉(zhuǎn)發(fā)給副本DataNode??蛻魴C(jī)也負(fù)責(zé)創(chuàng)建保存在相同HDFS名稱空間中的校驗(yàn)和(checksum)文件。
在最后的文件塊發(fā)送之后,NameNode將文件創(chuàng)建提交到它的持久化元數(shù)據(jù)存儲(chǔ)(在EditLog和FsImage文件)。
Linux集群
Hadoop框架可在單一的Linux平臺(tái)上使用(開發(fā)和調(diào)試時(shí)),官方提供MiniCluster作為單元測試使用,不過使用存放在機(jī)架上的商業(yè)服務(wù)器才能發(fā)揮它的力量。這些機(jī)架組成一個(gè)Hadoop集群。它通過集群拓?fù)渲R決定如何在整個(gè)集群中分配作業(yè)和文件。Hadoop假定節(jié)點(diǎn)可能失敗,因此采用本機(jī)方法處理單個(gè)計(jì)算機(jī)甚至所有機(jī)架的失敗。
Hive的系統(tǒng)架構(gòu)
?用戶接口,包括CLI(Shell命令行),JDBC/ODBC,WebUI
?MetaStore元數(shù)據(jù)庫,通常是存儲(chǔ)在關(guān)系數(shù)據(jù)庫如mysql,derby中
?Driver包含解釋器、編譯器、優(yōu)化器、執(zhí)行器
?Hadoop:用HDFS進(jìn)行存儲(chǔ),利用MapReduce進(jìn)行計(jì)算
Hive的表和數(shù)據(jù)庫,對應(yīng)的其實(shí)是HDFS(Hadoop分布式文件系統(tǒng))的目錄/文件,按表名把文件夾分開。如果是分區(qū)表,則分區(qū)值是子文件夾,可以直接在MapReduceJob里使用這些數(shù)據(jù)。
三、Hive與Hadoop生態(tài)系統(tǒng)中其他組件的關(guān)系
1、Hive依賴于HDFS存儲(chǔ)數(shù)據(jù),依賴MR處理數(shù)據(jù);
2、Pig可作為Hive的替代工具,是一種數(shù)據(jù)流語言和運(yùn)行環(huán)境,適合用于在Hadoop平臺(tái)上查詢半結(jié)構(gòu)化數(shù)據(jù)集,用于與ETL過程的一部分,即將外部數(shù)據(jù)裝載到Hadoop集群中,轉(zhuǎn)換為用戶需要的數(shù)據(jù)格式;
3、HBase是一個(gè)面向列的、分布式可伸縮的數(shù)據(jù)庫,可提供數(shù)據(jù)的實(shí)時(shí)訪問功能,而Hive只能處理靜態(tài)數(shù)據(jù),主要是BI報(bào)表數(shù)據(jù),Hive的初衷是為減少復(fù)雜MR應(yīng)用程序的編寫工作,HBase則是為了實(shí)現(xiàn)對數(shù)據(jù)的實(shí)時(shí)訪問。
Hive與傳統(tǒng)數(shù)據(jù)庫的對比
四、Hive的部署和應(yīng)用
Hive在企業(yè)大數(shù)據(jù)分析平臺(tái)中的應(yīng)用
當(dāng)前企業(yè)中部署的大數(shù)據(jù)分析平臺(tái),除Hadoop的基本組件HDFS和MR外,還結(jié)合使用Hive、Pig、HBase、Mahout,從而滿足不同業(yè)務(wù)場景需求。
圖企業(yè)中一種常見的大數(shù)據(jù)分析平臺(tái)部署框架
上圖是企業(yè)中一種常見的大數(shù)據(jù)分析平臺(tái)部署框架,在這種部署架構(gòu)中:
Hive和Pig用于報(bào)表中心,Hive用于分析報(bào)表,Pig用于報(bào)表中數(shù)據(jù)的轉(zhuǎn)換工作。
HBase用于在線業(yè)務(wù),HDFS不支持隨機(jī)讀寫操作,而HBase正是為此開發(fā),可較好地支持實(shí)時(shí)訪問數(shù)據(jù)。
Mahout提供一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域的經(jīng)典算法實(shí)現(xiàn),用于創(chuàng)建商務(wù)智能(BI)應(yīng)用程序。
五、Hive工作原理
1、SQL語句轉(zhuǎn)換成MapReduce作業(yè)的基本原理
1.1用MapReduce實(shí)現(xiàn)連接操作
假設(shè)連接(join)的兩個(gè)表分別是用戶表User(uid,name)和訂單表Order(uid,orderid),具體的SQL命令:
SELECTname,orderidFROMUseruJOINOrderoONu.uid=o.uid;
上圖描述了連接操作轉(zhuǎn)換為MapReduce操作任務(wù)的具體執(zhí)行過程。
首先,在Map階段,
User表以uid為key,以name和表的標(biāo)記位(這里User的標(biāo)記位記為1)為value,進(jìn)行Map操作,把表中記錄轉(zhuǎn)換生成一系列KV對的形式。比如,User表中記錄(1,Lily)轉(zhuǎn)換為鍵值對(1,《1,Lily》),其中第一個(gè)“1”是uid的值,第二個(gè)“1”是表User的標(biāo)記位,用來標(biāo)示這個(gè)鍵值對來自User表;
同樣,Order表以uid為key,以orderid和表的標(biāo)記位(這里表Order的標(biāo)記位記為2)為值進(jìn)行Map操作,把表中的記錄轉(zhuǎn)換生成一系列KV對的形式;
接著,在Shuffle階段,把User表和Order表生成的KV對按鍵值進(jìn)行Hash,然后傳送給對應(yīng)的Reduce機(jī)器執(zhí)行。比如KV對(1,《1,Lily》)、(1,《2,101》)、(1,《2,102》)傳送到同一臺(tái)Reduce機(jī)器上。當(dāng)Reduce機(jī)器接收到這些KV對時(shí),還需按表的標(biāo)記位對這些鍵值對進(jìn)行排序,以優(yōu)化連接操作;
最后,在Reduce階段,對同一臺(tái)Reduce機(jī)器上的鍵值對,根據(jù)“值”(value)中的表標(biāo)記位,對來自表User和Order的數(shù)據(jù)進(jìn)行笛卡爾積連接操作,以生成最終的結(jié)果。比如鍵值對(1,《1,Lily》)與鍵值對(1,《2,101》)、(1,《2,102》)的連接結(jié)果是(Lily,101)、(Lily,102)。
1.2用MR實(shí)現(xiàn)分組操作
假設(shè)分?jǐn)?shù)表Score(rank,level),具有rank(排名)和level(級別)兩個(gè)屬性,需要進(jìn)行一個(gè)分組(GroupBy)操作,功能是把表Score的不同片段按照rank和level的組合值進(jìn)行合并,并計(jì)算不同的組合值有幾條記錄。SQL語句命令如下:
SELECT rank,level,count(*) as value FROM score GROUP BY rank,level;
圖用MapReduce實(shí)現(xiàn)分組操作的實(shí)現(xiàn)原理
上圖描述分組操作轉(zhuǎn)化為MapReduce任務(wù)的具體執(zhí)行過程。
首先,在Map階段,對表Score進(jìn)行Map操作,生成一系列KV對,其鍵為《rank,level》,值為“擁有該《rank,level》組合值的記錄的條數(shù)”。比如,Score表的第一片段中有兩條記錄(A,1),所以進(jìn)行Map操作后,轉(zhuǎn)化為鍵值對(《A,1》,2);
接著在Shuffle階段,對Score表生成的鍵值對,按照“鍵”的值進(jìn)行Hash,然后根據(jù)Hash結(jié)果傳送給對應(yīng)的Reduce機(jī)器去執(zhí)行。比如,鍵值對(《A,1》,2)、(《A,1》,1)傳送到同一臺(tái)Reduce機(jī)器上,鍵值對(《B,2》,1)傳送另一Reduce機(jī)器上。然后,Reduce機(jī)器對接收到的這些鍵值對,按“鍵”的值進(jìn)行排序;
在Reduce階段,把具有相同鍵的所有鍵值對的“值”進(jìn)行累加,生成分組的最終結(jié)果。比如,在同一臺(tái)Reduce機(jī)器上的鍵值對(《A,1》,2)和(《A,1》,1)Reduce操作后的輸出結(jié)果為(A,1,3)。
2、Hive中SQL查詢轉(zhuǎn)換成MR作業(yè)的過程
當(dāng)Hive接收到一條HQL語句后,需要與Hadoop交互工作來完成該操作。HQL首先進(jìn)入驅(qū)動(dòng)模塊,由驅(qū)動(dòng)模塊中的編譯器解析編譯,并由優(yōu)化器對該操作進(jìn)行優(yōu)化計(jì)算,然后交給執(zhí)行器去執(zhí)行。執(zhí)行器通常啟動(dòng)一個(gè)或多個(gè)MR任務(wù),有時(shí)也不啟動(dòng)(如SELECT*FROMtb1,全表掃描,不存在投影和選擇操作)
上圖是Hive把HQL語句轉(zhuǎn)化成MR任務(wù)進(jìn)行執(zhí)行的詳細(xì)過程。
由驅(qū)動(dòng)模塊中的編譯器–Antlr語言識別工具,對用戶輸入的SQL語句進(jìn)行詞法和語法解析,將HQL語句轉(zhuǎn)換成抽象語法樹(ASTTree)的形式;
遍歷抽象語法樹,轉(zhuǎn)化成QueryBlock查詢單元。因?yàn)锳ST結(jié)構(gòu)復(fù)雜,不方便直接翻譯成MR算法程序。其中QueryBlock是一條最基本的SQL語法組成單元,包括輸入源、計(jì)算過程、和輸入三個(gè)部分;
遍歷QueryBlock,生成OperatorTree(操作樹),OperatorTree由很多邏輯操作符組成,如TableScanOperator、SelectOperator、FilterOperator、JoinOperator、GroupByOperator和ReduceSinkOperator等。這些邏輯操作符可在Map、Reduce階段完成某一特定操作;
Hive驅(qū)動(dòng)模塊中的邏輯優(yōu)化器對OperatorTree進(jìn)行優(yōu)化,變換OperatorTree的形式,合并多余的操作符,減少M(fèi)R任務(wù)數(shù)、以及Shuffle階段的數(shù)據(jù)量;
遍歷優(yōu)化后的OperatorTree,根據(jù)OperatorTree中的邏輯操作符生成需要執(zhí)行的MR任務(wù);
啟動(dòng)Hive驅(qū)動(dòng)模塊中的物理優(yōu)化器,對生成的MR任務(wù)進(jìn)行優(yōu)化,生成最終的MR任務(wù)執(zhí)行計(jì)劃;
最后,有Hive驅(qū)動(dòng)模塊中的執(zhí)行器,對最終的MR任務(wù)執(zhí)行輸出。
Hive驅(qū)動(dòng)模塊中的執(zhí)行器執(zhí)行最終的MR任務(wù)時(shí),Hive本身不會(huì)生成MR算法程序。它通過一個(gè)表示“Job執(zhí)行計(jì)劃”的XML文件,來驅(qū)動(dòng)內(nèi)置的、原生的Mapper和Reducer模塊。Hive通過和JobTracker通信來初始化MR任務(wù),而不需直接部署在JobTracker所在管理節(jié)點(diǎn)上執(zhí)行。通常在大型集群中,會(huì)有專門的網(wǎng)關(guān)機(jī)來部署Hive工具,這些網(wǎng)關(guān)機(jī)的作用主要是遠(yuǎn)程操作和管理節(jié)點(diǎn)上的JobTracker通信來執(zhí)行任務(wù)。Hive要處理的數(shù)據(jù)文件常存儲(chǔ)在HDFS上,HDFS由名稱節(jié)點(diǎn)(NameNode)來管理。
JobTracker/TaskTracker
NameNode/DataNode
六、HiveHA基本原理
在實(shí)際應(yīng)用中,Hive也暴露出不穩(wěn)定的問題,在極少數(shù)情況下,會(huì)出現(xiàn)端口不響應(yīng)或進(jìn)程丟失問題。HiveHA(HighAvailablity)可以解決這類問題。
在HiveHA中,在Hadoop集群上構(gòu)建的數(shù)據(jù)倉庫是由多個(gè)Hive實(shí)例進(jìn)行管理的,這些Hive實(shí)例被納入到一個(gè)資源池中,由HAProxy提供統(tǒng)一的對外接口。客戶端的查詢請求,首先訪問HAProxy,由HAProxy對訪問請求進(jìn)行轉(zhuǎn)發(fā)。HAProxy收到請求后,會(huì)輪詢資源池中可用的Hive實(shí)例,執(zhí)行邏輯可用性測試。
如果某個(gè)Hive實(shí)例邏輯可用,就會(huì)把客戶端的訪問請求轉(zhuǎn)發(fā)到Hive實(shí)例上;
如果某個(gè)實(shí)例不可用,就把它放入黑名單,并繼續(xù)從資源池中取出下一個(gè)Hive實(shí)例進(jìn)行邏輯可用性測試。
對于黑名單中的Hive,HiveHA會(huì)每隔一段時(shí)間進(jìn)行統(tǒng)一處理,首先嘗試重啟該Hive實(shí)例,如果重啟成功,就再次把它放入資源池中。
由于HAProxy提供統(tǒng)一的對外訪問接口,因此,對于程序開發(fā)人員來說,可把它看成一臺(tái)超強(qiáng)“Hive”。
七、Impala
1、Impala簡介
Impala由Cloudera公司開發(fā),提供SQL語義,可查詢存儲(chǔ)在Hadoop和HBase上的PB級海量數(shù)據(jù)。Hive也提供SQL語義,但底層執(zhí)行任務(wù)仍借助于MR,實(shí)時(shí)性不好,查詢延遲較高。
Impala作為新一代開源大數(shù)據(jù)分析引擎,最初參照Dremel(由Google開發(fā)的交互式數(shù)據(jù)分析系統(tǒng)),支持實(shí)時(shí)計(jì)算,提供與Hive類似的功能,在性能上高出Hive3~30倍。Impala可能會(huì)超過Hive的使用率能成為Hadoop上最流行的實(shí)時(shí)計(jì)算平臺(tái)。Impala采用與商用并行關(guān)系數(shù)據(jù)庫類似的分布式查詢引擎,可直接從HDFS、HBase中用SQL語句查詢數(shù)據(jù),不需把SQL語句轉(zhuǎn)換成MR任務(wù),降低延遲,可很好地滿足實(shí)時(shí)查詢需求。
Impala不能替換Hive,可提供一個(gè)統(tǒng)一的平臺(tái)用于實(shí)時(shí)查詢。Impala的運(yùn)行依賴于Hive的元數(shù)據(jù)(Metastore)。Impala和Hive采用相同的SQL語法、ODBC驅(qū)動(dòng)程序和用戶接口,可統(tǒng)一部署Hive和Impala等分析工具,同時(shí)支持批處理和實(shí)時(shí)查詢。
2、Impala系統(tǒng)架構(gòu)
圖Impala系統(tǒng)架構(gòu)
上圖是Impala系統(tǒng)結(jié)構(gòu)圖,虛線模塊數(shù)據(jù)Impala組件。Impala和Hive、HDFS、HBase統(tǒng)一部署在Hadoop平臺(tái)上。Impala由Impalad、StateStore和CLI三部分組成。
Implalad:是Impala的一個(gè)進(jìn)程,負(fù)責(zé)協(xié)調(diào)客戶端提供的查詢執(zhí)行,給其他Impalad分配任務(wù),以及收集其他Impalad的執(zhí)行結(jié)果進(jìn)行匯總。Impalad也會(huì)執(zhí)行其他Impalad給其分配的任務(wù),主要是對本地HDFS和HBase里的部分?jǐn)?shù)據(jù)進(jìn)行操作。Impalad進(jìn)程主要含QueryPlanner、QueryCoordinator和QueryExecEngine三個(gè)模塊,與HDFS的數(shù)據(jù)節(jié)點(diǎn)(HDFSDataNode)運(yùn)行在同一節(jié)點(diǎn)上,且完全分布運(yùn)行在MPP(大規(guī)模并行處理系統(tǒng))架構(gòu)上。
StateStore:收集分布在集群上各個(gè)Impalad進(jìn)程的資源信息,用于查詢的調(diào)度,它會(huì)創(chuàng)建一個(gè)statestored進(jìn)程,來跟蹤集群中的Impalad的健康狀態(tài)及位置信息。statestored進(jìn)程通過創(chuàng)建多個(gè)線程來處理Impalad的注冊訂閱以及與多個(gè)Impalad保持心跳連接,此外,各Impalad都會(huì)緩存一份StateStore中的信息。當(dāng)StateStore離線后,Impalad一旦發(fā)現(xiàn)StateStore處于離線狀態(tài)時(shí),就會(huì)進(jìn)入恢復(fù)模式,并進(jìn)行返回注冊。當(dāng)StateStore重新加入集群后,自動(dòng)恢復(fù)正常,更新緩存數(shù)據(jù)。
CLI:CLI給用戶提供了執(zhí)行查詢的命令行工具。Impala還提供了Hue、JDBC及ODBC使用接口。
3、Impala查詢執(zhí)行過程
圖Impala查詢執(zhí)行過程
注冊和訂閱。當(dāng)用戶提交查詢前,Impala先創(chuàng)建一個(gè)Impalad進(jìn)程來負(fù)責(zé)協(xié)調(diào)客戶端提交的查詢,該進(jìn)程會(huì)向StateStore提交注冊訂閱信息,StateStore會(huì)創(chuàng)建一個(gè)statestored進(jìn)程,statestored進(jìn)程通過創(chuàng)建多個(gè)線程來處理Impalad的注冊訂閱信息。
提交查詢。通過CLI提交一個(gè)查詢到Impalad進(jìn)程,Impalad的QueryPlanner對SQL語句解析,生成解析樹;Planner將解析樹變成若干PlanFragment,發(fā)送到QueryCoordinator。其中PlanFragment由PlanNode組成,能被分發(fā)到單獨(dú)的節(jié)點(diǎn)上執(zhí)行,每個(gè)PlanNode表示一個(gè)關(guān)系操作和對其執(zhí)行優(yōu)化需要的信息。
獲取元數(shù)據(jù)與數(shù)據(jù)地址。QueryCoordinator從MySQL元數(shù)據(jù)庫中獲取元數(shù)據(jù)(即查詢需要用到哪些數(shù)據(jù)),從HDFS的名稱節(jié)點(diǎn)中獲取數(shù)據(jù)地址(即數(shù)據(jù)被保存到哪個(gè)數(shù)據(jù)節(jié)點(diǎn)上),從而得到存儲(chǔ)這個(gè)查詢相關(guān)數(shù)據(jù)的所有數(shù)據(jù)節(jié)點(diǎn)。
分發(fā)查詢?nèi)蝿?wù)。QueryCoordinator初始化相應(yīng)的Impalad上的任務(wù),即把查詢?nèi)蝿?wù)分配給所有存儲(chǔ)這個(gè)查詢相關(guān)數(shù)據(jù)的數(shù)據(jù)節(jié)點(diǎn)。
匯聚結(jié)果。QueryExecutor通過流式交換中間輸出,并由QueryCoordinator匯聚來自各個(gè)Impalad的結(jié)果。
返回結(jié)果。QueryCoordinator把匯總后的結(jié)果返回給CLI客戶端。
4、Impala與Hive
圖Impala與Hive的對比
不同點(diǎn):
Hive適合長時(shí)間批處理查詢分析;而Impala適合進(jìn)行交互式SQL查詢。
Hive依賴于MR計(jì)算框架,執(zhí)行計(jì)劃組合成管道型MR任務(wù)模型進(jìn)行執(zhí)行;而Impala則把執(zhí)行計(jì)劃表現(xiàn)為一棵完整的執(zhí)行計(jì)劃樹,可更自然地分發(fā)執(zhí)行計(jì)劃到各個(gè)Impalad執(zhí)行查詢。
Hive在執(zhí)行過程中,若內(nèi)存放不下所有數(shù)據(jù),則會(huì)使用外存,以保證查詢能夠順利執(zhí)行完成;而Impala在遇到內(nèi)存放不下數(shù)據(jù)時(shí),不會(huì)利用外存,所以Impala處理查詢時(shí)會(huì)受到一定的限制。
相同點(diǎn):
使用相同的存儲(chǔ)數(shù)據(jù)池,都支持把數(shù)據(jù)存儲(chǔ)在HDFS和HBase中,其中HDFS支持存儲(chǔ)TEXT、RCFILE、PARQUET、AVRO、ETC等格式的數(shù)據(jù),HBase存儲(chǔ)表中記錄。
使用相同的元數(shù)據(jù)。
對SQL的解析處理比較類似,都是通過詞法分析生成執(zhí)行計(jì)劃。
-
數(shù)據(jù)倉庫
+關(guān)注
關(guān)注
0文章
61瀏覽量
10447 -
Hadoop
+關(guān)注
關(guān)注
1文章
90瀏覽量
15983 -
hive
+關(guān)注
關(guān)注
0文章
12瀏覽量
3850
發(fā)布評論請先 登錄
相關(guān)推薦
評論