原創(chuàng)|行業(yè)資訊|編輯:陳俊吉|2016-07-14 09:54:08.000|閱讀 771 次
概述: 為了更好在Hadoop平臺上使用大家熟悉的SQL處理和分析大數(shù)據(jù),減少開發(fā)人員使用MapReduce帶來的巨大工作量,及與大量成熟的數(shù)據(jù)處理工具和應(yīng)用的集成,IBM 推出的SQL on Hadoop的產(chǎn)品--BigSQL 。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
為了更好在Hadoop平臺上使用大家熟悉的SQL處理和分析,減少開發(fā)人員使用MapReduce帶來的巨大工作量,及與大量成熟的數(shù)據(jù)處理工具和應(yīng)用的集成,IBM 推出的SQL on Hadoop的產(chǎn)品--BigSQL 。我們知道關(guān)系型數(shù)據(jù)技術(shù)源于 IBM,在過去的幾十年,IBM 在關(guān)系型數(shù)據(jù)庫領(lǐng)域累積了大量先進(jìn)的技術(shù)和豐富的經(jīng)驗(yàn),也擁有很多優(yōu)秀的基于 RDBMS 技術(shù)的產(chǎn)品和工具。 IBM 將在RDBMS積累先進(jìn)的技術(shù)運(yùn)用到了 BigSQL 當(dāng)中,使得它無論從性能上、SQL 語法的支持上、與其他應(yīng)用的集成上、安全性等方面都有了非常強(qiáng)大的功能。
支持廣泛的、標(biāo)準(zhǔn)的SQL ,包括
– SELECT:查詢功能遵循 SQL 2011 語言標(biāo)準(zhǔn)的規(guī)范,支持Join、Union、Aggregate和子查詢等.
– GRANT/REVOKE,INSERT … INTO
– SQL PL:包括存儲過程、SQL 體函數(shù)、用戶自定義函數(shù)、及豐富的標(biāo)量函數(shù)、表函數(shù)和聯(lián)機(jī)分析處理 (OLAP) 函數(shù)
– JDBC 和 ODBC 驅(qū)動
基于成本的優(yōu)化、優(yōu)秀的數(shù)據(jù)處理性能
– 采用 MPP 引擎 (C++) 代替 Java MapReduce
– 基于成本的優(yōu)化器,超過140個SQL語句重寫規(guī)則
– 持續(xù)運(yùn)行的守護(hù)進(jìn)程,避免啟動開銷
– 節(jié)點(diǎn)間數(shù)據(jù)流動以避免持久化中間結(jié)果
– 基于內(nèi)存的操作,同時具備在超過可用內(nèi)存時(匯總、排序等操作)將數(shù)據(jù)溢出到磁盤。
支持各種存儲格式
– 支持DFS、Hive、HBase 等數(shù)據(jù)存儲
– 文本 (帶分隔符)、順序文件、RCFile、ORC、Avro、Parquet 等格式
通過 LOAD、聯(lián)邦查詢實(shí)現(xiàn)與RDBMS數(shù)據(jù)庫集成
在描述BigSQL架構(gòu)之前,我們先回顧一下HDFS集群架構(gòu)。
一個HDFS集群是由一個Namenode和一定數(shù)目的Datanodes組成Namenode是一個中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶端對文件的訪問。集群中的Datanode一般是一個節(jié)點(diǎn)一個,負(fù)責(zé)管理它所在節(jié)點(diǎn)上的存儲。HDFS暴露了文件系統(tǒng)的名字空間,用戶能夠以文件的形式在上面存儲數(shù)據(jù)。從內(nèi)部看,一個文件其實(shí)被分成一個或多個數(shù)據(jù)塊,這些塊存儲在一組Datanode上。Namenode執(zhí)行文件系統(tǒng)的名字空間操作,比如打開、關(guān)閉、重命名文件或目錄。它也負(fù)責(zé)確定數(shù)據(jù)塊到具體Datanode節(jié)點(diǎn)的映射。Datanode負(fù)責(zé)處理文件系統(tǒng)客戶端的讀寫請求。在Namenode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。HDFS架構(gòu)如下圖所示:
理解了HDFS的主從架構(gòu),我們很自然地想到SQL on Hadoop的架構(gòu)也應(yīng)該很相似,因?yàn)檫@樣能更好的利用HDFS分布式數(shù)據(jù)存儲和處理的特點(diǎn)。事實(shí)上,BigSQL 也是一個主從的架構(gòu),是一種Shared-Nothing架構(gòu),它包含管理節(jié)點(diǎn)和工作節(jié)點(diǎn)。管理節(jié)點(diǎn)(也叫Head Node或Coordinator Node)負(fù)責(zé)接收客戶端發(fā)送的 SQL語句,經(jīng)過編譯和優(yōu)化生成并行的執(zhí)行計劃,然后將執(zhí)行計劃分發(fā)給多個工作節(jié)點(diǎn)(即Worker Node)。工作節(jié)點(diǎn)并行地執(zhí)行各自的子任務(wù),對進(jìn)行數(shù)據(jù)存取和計算。最后管理節(jié)點(diǎn)將各工作節(jié)點(diǎn)的結(jié)果匯總成最后的結(jié)果返回非客戶端。整個架構(gòu)如下圖所示:
接下來我們對這個架構(gòu)中的每個組件進(jìn)行描述,讓讀者更好的理解BigSQL組件的作用。
BigSQL的管理節(jié)點(diǎn)是整個架構(gòu)中的“大腦”,它負(fù)責(zé)建立和監(jiān)聽JDBC/ODBC連接、接收SQL語句、編譯和優(yōu)化查詢、生成并行執(zhí)行計劃和子任務(wù)、將子任務(wù)推送給工作節(jié)點(diǎn)并協(xié)調(diào)查詢的執(zhí)行,匯總子任務(wù)返回的結(jié)果等。同時,管理節(jié)點(diǎn)還可以使用傳統(tǒng)的RDBMS表存儲用戶數(shù)據(jù)(數(shù)據(jù)量較小的參考數(shù)據(jù)),以便在關(guān)聯(lián)查詢中使用。管理節(jié)點(diǎn)包含三個模塊,Coordinator、Catalog和Scheduler 。
Coordinator
Coordinator線程負(fù)責(zé)建立建立和監(jiān)聽客戶端連接,接收SQL,對SQL 進(jìn)行解析、編譯、優(yōu)化,生成一個分布式的執(zhí)行計劃并推送到各個工作節(jié)點(diǎn)。
Catalog
在DB2里,Catalog記錄做表和索引的統(tǒng)計信息,為優(yōu)化器在進(jìn)行成本計算是提供參考信息。同理,BigSQL 做了類似的事情,將這些統(tǒng)計信息存儲在自己的 Catalog 里面,以幫助優(yōu)化查詢。BigSQL 提供了一條 ANALYZE 命令,運(yùn)行該命令既能收集統(tǒng)計信息并更新到 Catalog中。
我們要注意區(qū)分 BigSQL Catalog和Hive Metastore (也叫HCatalog)概念。Hive Metastore是一個存儲元數(shù)據(jù)信息的地方,這些元數(shù)據(jù)包括表定義相關(guān)的數(shù)據(jù),比如位置、列名和類型、分區(qū)信息、讀寫table 涉及的類名等等。只要在 Hive Metastore 中定義了數(shù)據(jù)并且可在 Hadoop 集群中訪問該數(shù)據(jù),那么 Big SQL 就可訪問該數(shù)據(jù)。
Scheduler
Scheduler是幫助執(zhí)行查詢的服務(wù)線程,它負(fù)責(zé)查詢 Hive Metastore,得到表的元數(shù)據(jù)信息,這個元數(shù)據(jù)信息其中就包含了每一塊數(shù)據(jù)的存放位置,從而幫助Coordinator將子任務(wù)推送到合適的點(diǎn)上,盡量保證計算和數(shù)據(jù)在同一個節(jié)點(diǎn)上,以減少節(jié)點(diǎn)間的數(shù)據(jù)傳輸。
工作節(jié)點(diǎn)(也是HDFS的Data Node)是實(shí)際執(zhí)行子任務(wù)的地方。它有包含一個Worker進(jìn)程(又含 Reader/Writer多線程),用于讀取和處理HDFS 上的數(shù)據(jù)。這些 Reader/Writer 大部分都是由 C++寫的,運(yùn)行速度非常快。在工作節(jié)點(diǎn)上,Reader/Writer可能會用到臨時表,比如在涉及到多個表的連接查詢中會產(chǎn)生臨時數(shù)據(jù)并保存到臨時表。這些臨時表通常情況下會被盡量地保存在內(nèi)存中,以提升查詢速度。如果計算時內(nèi)存不夠用,Worker也會將數(shù)據(jù)溢出到磁盤上。
理解BigSQL所包含的組件之后,我們來看看BigSQL引擎是如何執(zhí)行查詢的。SQL查詢語句的執(zhí)行過程如圖所示:
o 應(yīng)用程序根據(jù)用戶配置,通過JDBC/ODBC連接到BigSQL管理節(jié)點(diǎn)。
o 管理節(jié)點(diǎn)的Coordinator線程會訪問Hive Metastore和自己的Catalog,獲取數(shù)據(jù)存儲的元數(shù)據(jù)和統(tǒng)計信息。
o Coordinator結(jié)合元數(shù)據(jù)和統(tǒng)計信息對SQL語句進(jìn)行編譯和優(yōu)化,生成并行執(zhí)行計劃。
o 運(yùn)行時引擎根據(jù)數(shù)據(jù)分布的元數(shù)據(jù)信息將并行執(zhí)行計劃分發(fā)到各個工作節(jié)點(diǎn)。
o 工作節(jié)點(diǎn)接收到查詢計劃,分派給專門的線程(Reader/Writer),這些線程知道如何讀寫HDFS數(shù)據(jù)。運(yùn)行時引擎將會將謂詞下壓,使查詢和投影靠近數(shù)據(jù)進(jìn)行處理,避免數(shù)據(jù)搬遷。
o 如果處理過程中產(chǎn)生臨時數(shù)據(jù),如排序數(shù)據(jù),則會將臨時數(shù)據(jù)Cache到臨時表。
o 工作節(jié)點(diǎn)將處理結(jié)果返回給管理節(jié)點(diǎn),管理節(jié)點(diǎn)的Coordinator匯總所有子任務(wù)的結(jié)果后返回給應(yīng)用。
管理節(jié)點(diǎn)是BigSQL的大腦,它不但要指揮工作節(jié)點(diǎn)如何干活,還要存儲Catalog數(shù)據(jù)、連接信息、當(dāng)前查詢?nèi)蝿?wù)等信息。因此,管理節(jié)點(diǎn)實(shí)現(xiàn)高可用是重要的,也是必要的。工作節(jié)點(diǎn)不需要高可用,因?yàn)閿?shù)據(jù)本身是高可用的,而Worker又沒有狀態(tài)需要保存。然而,當(dāng)工作節(jié)點(diǎn)發(fā)生故障(如因?yàn)榇疟P故障導(dǎo)致數(shù)據(jù)無法訪問),BigSQL的Scheduler會將故障節(jié)點(diǎn)加入到“黑名單”,并自動在其他工作節(jié)點(diǎn)重新提交查詢。注意,BigSQL HA為BigSQL的元數(shù)據(jù)存儲(Catalog)和Scheduler提供高可用,而Hadoop Name Node和Hive Matestore的高可用不是該方案的內(nèi)容。
BigSQL HA 采用 “log-shipping” 機(jī)制保持Primary管理節(jié)點(diǎn)和Standby管理節(jié)點(diǎn)同步。這里用的兩個關(guān)鍵技術(shù):DB2 HADR和TSAMP。DB2 HADR技術(shù)用于將Primary節(jié)點(diǎn)的交易日志實(shí)時傳輸給Standby節(jié)點(diǎn),Standby節(jié)點(diǎn)則持續(xù)回訪所受到的日志,以保持BigSQL Catalog數(shù)據(jù)實(shí)時同步。TSAMP則對Primary和Standby節(jié)點(diǎn)的狀態(tài)進(jìn)行監(jiān)控,并自動執(zhí)行故障切換動作。
o BigSQL架構(gòu)參考了博大精深的DB2數(shù)據(jù)庫引擎技術(shù)。
o 實(shí)現(xiàn)大量并行的SQL引擎以代替低效、復(fù)雜的MR。
o Shared-nothing架構(gòu)消除擴(kuò)展性和網(wǎng)絡(luò)瓶頸問題。
o 計算推送到數(shù)據(jù)本地,而不是將數(shù)據(jù)搬到到計算節(jié)點(diǎn)。
o 采用C++實(shí)現(xiàn),性能更優(yōu)。
o 節(jié)點(diǎn)間(多個工作節(jié)點(diǎn))和節(jié)點(diǎn)內(nèi)(多個Reader/Writer線程)并行處理。
BigSQL的基礎(chǔ)介紹請參考另一篇文章《BigInsights金剛鉆之首:BigSQL - SQL onHadoop》。
詳情請咨詢!
客服熱線:023-66090381
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn