本文爲 對劉鵬著《大數據庫》一書學習後對課後部分習題的個人理解,歡迎同學們與我討論。
1. 主流的大數據SQL引擎有哪幾種?
SQL引擎可以理解爲具有數據存儲、查詢(類SQL語言)與數據處理分析能力爲一體的數據倉庫,應區別於Hadoop(分佈式系統基礎架構)、MapReduce(分佈式計算(處理)架構)、HDFS(分佈式文件系統)與HBase等NoSql(數據庫)等。
- Shark/Spark SQL、Impala、Hive等
2. 簡述大數據SQL的實現機制。
- 將SQL查詢語言通過詞法分析轉換爲計算模型可在文件存儲系統中執行的查詢計劃。
3. 爲什麼MapReduce不適合實時數據處理?
- MapReduce處理的是存儲在本地磁盤上的離線數據,對於計算任務的中間結果,往往會將中間結果實體化到磁盤上(爲了防止Reduce的失敗),而不是內存中。
- MapReduce任務調度的開銷大。傳統的MapReduce系統,就比如Hadoop,是爲了運行長達數小時的批量作業而設計的,而組成作業的每個任務其運行時間則有數分鐘之久,他們會在獨立的系統進程中執行任務,在某些極端情況下提交一個任務的延遲非常之高。
Hadoop使用週期性的“心跳”消息來向工作節點分配任務,而這個週期是3秒鐘,因此總共的任務啓動延時就會高達5-10秒。這對於批處理的系統顯然是可以忍受的,但是對於實時查詢這顯然是不夠的。
- MapReduce主要用於對靜態數據的計算,無法進行流式計算。
靜態數據:不需要對數據的查詢進行快速響應且數據本身不發生頻繁變化的數據。
- 執行模型難以DAG計算。MapReduce任務中往往會產生多個stage,而這些串聯的stage則又依賴於底層文件系統(如HDFS)來存儲每一個stage的輸出結果。
DAG(有向無環圖計算,由於多個任務存在依賴關係,後一個應用的輸入是前一個應用的輸出。解決這一問題的方式有Apache的Tez計算框架,它是基於Hadoop YARN(Hadoop資源管理調度系統)之上的DAG計算框架,它將MapReduce任務分解爲多個子任務同時可以把多個Map/ Reduce任務合併成一個大的DAG任務,這樣當前一個任務完成之後,直接將結果輸出給下一個任務,不用將結果寫到磁盤之上,減少了Map/Reduce之間的文件存儲。同時合理的組合其子過程,減少了任務的運行時間。)
5. 簡述Impala在大數據處理中的位置
- Impala用來對存儲在HDFS或HBase中PB級大數據進行交互式實時查詢。
- Impala主要面向SQL on Hadoop:支持通用SQL查詢引擎並與Hadoop集成。
- 實際的大數據處理中常先用Hive做數據提取與轉換處理,再用Impala進行快速的數據分析。
6. 簡述Impala工作原理及其特點
工作原理
- Impala沒有使用Hive+MapReduce的批處理,而是採用了與商用並行關係數據庫類似的分佈式查詢引擎,可直接對HDFS和HBase進行交互式查詢。
- Impala將數據全部加載至內存,在內存中進行數據處理。中間結果不寫磁盤,省掉了大量的I/O開銷。
特點
- Impala最大的特點是快速,專注於交互式實時處理。
- 提供了SQL接口。
- 支持最常見的HQL語言,包括Select、Join和聚合函數。
- 與Hadoop集成,支持HDFS和HBase作爲存儲介質。
- Impala與Hive具有高度的兼容性,Impala使用與Hive記錄表結構和屬性信息相同的元數據存儲。
10.簡述Spark SQL的邏輯架構
上圖的Spark SQL邏輯架構圖總體上由4個模塊組成:Core、Catalyst、Hive和Hive-ThriftServer。
- Core處理數據的輸入輸出,從不同的數據源獲取數據(RDD、Parquet、json等),將查詢結果輸出成schemaRDD;
- Catalyst處理查詢語句的整個處理過程,包括解析、綁定、優化、物理計劃等,說其是優化器,還不如說是查詢引擎;
- Hive對hive數據的處理
- Hive-ThriftServer提供CLI和JDBC/ODBC接口
11.Spark SQL查詢引擎Catalyst有哪些規則和策略?
- 分析規則(Analysis Rules)
- 優化規則(Optimizatioin Rules)
- 規劃策略(Planning Strategies)
其他總結:
本書總體介紹的爲Hadoop生態圈的內容。
Hadoop生態系統項目架構大致如下:
對應的解釋: