大數據相關面試題每日五問(三)
- 對ES的倒排索引了解多少?工作原理?如何提高其查詢效率?
- 了解MySQL中的事務嗎?它的ACID特性指的是什么?
- 簡述數據倉庫中“維度”和“事實”表的區(qū)別及其作用
- 構建數倉的模型有哪些?展開講講。
- HDFS 的寫數據流程是怎樣的?如果一個 DN在寫入過程中發(fā)生故障,Hadoop 會如何處理?
(1)http://fangfengwang8.cn/discuss/738791848554086400
(2)http://fangfengwang8.cn/discuss/739079633773023232
對ES的倒排索引了解多少?工作原理?如何提高其查詢效率?
Elasticsearch 使用的是倒排索引(Inverted Index),這是實現全文檢索的核心機制。其原理是:將每個文檔中的字段內容進行分詞處理,然后為每個詞項建立一個詞典(term),記錄該詞在哪些文檔(文檔 ID)中出現,以及出現的位置和頻率。這樣查詢時不是遍歷每個文檔去找關鍵詞,而是直接查詞典獲取相關文檔列表,極大提升了檢索效率。為了進一步提高查詢性能,可以采取多種優(yōu)化手段:一是合理設置字段類型和分詞器,減少無效字段的索引;二是使用 keyword
類型字段做精確匹配,避免不必要的全文分詞;三是通過設置合適的 filter
緩存結果、避免重復計算;四是開啟 doc_values
支持聚合、排序等操作,減少內存消耗;五是避免過度嵌套結構,必要時使用 flattened
或 join
優(yōu)化文檔結構。此外,合理的索引設計、分片分配和冷熱數據分離也是保障查詢效率的重要手段。
了解MySQL中的事務嗎?它的ACID特性指的是什么?
MySQL 中的事務是指一組操作的集合,要么全部執(zhí)行成功,要么全部回滾撤銷,常用于保證數據的一致性與完整性。事務具有四大特性,也就是 ACID:原子性(Atomicity) 指事務中的操作要么全部完成,要么全部不做,出現錯誤可以回滾;一致性(Consistency) 保證事務執(zhí)行前后數據都滿足數據庫的約束規(guī)則,不會出現破壞數據邏輯的狀態(tài);隔離性(Isolation) 表示多個事務并發(fā)執(zhí)行時互不干擾,常見的隔離級別包括讀未提交、讀已提交、可重復讀、串行化;持久性(Durability) 指事務一旦提交,對數據的修改就是永久性的,即使系統(tǒng)宕機也不會丟失。MySQL 中默認使用 InnoDB 引擎來支持事務,其通過 redo log、undo log 和鎖機制來實現對 ACID 的保障。
簡述數據倉庫中“維度”和“事實”表的區(qū)別及其作用
在數據倉庫中,維度表和事實表是構建星型或雪花模型的核心組成部分。事實表(Fact Table) 用于存儲與業(yè)務事件相關的度量值或指標數據,例如訂單金額、銷售數量等,通常數據量大,記錄的是“發(fā)生了什么”;而 維度表(Dimension Table) 則存儲描述事實的維度信息,比如時間、地區(qū)、產品、用戶等,是對事實的多角度分析視角。二者的主要區(qū)別在于:事實表關注“數值和業(yè)務行為”,維度表關注“描述和分類信息”;事實表一般包含外鍵關聯多個維度表,而維度表一般數據量小但字段豐富,便于查詢和篩選。在實際應用中,通過維度表可以對事實表的數據進行分組、聚合、切片和鉆取,是實現多維分析(OLAP)的基礎。
構建數倉的模型有哪些?展開講講。
構建數倉的常見模型主要包括星型模型、雪花模型和事實星座模型。星型模型是最常用的一種,其特點是一個中心事實表直接連接多個維度表,結構簡單、查詢高效,適合于查詢頻繁、維度較少的場景;雪花模型是在星型模型基礎上對維度表進一步規(guī)范化,將維度表拆分為多個層級子表,形成樹狀結構,減少冗余、節(jié)省存儲,但查詢時關聯復雜、效率較低;事實星座模型(也叫復合星型模型)是多個事實表共享維度表的結構,適用于存在多個業(yè)務過程(如訂單、支付、退貨等)且共享維度的復雜分析需求。選擇哪種模型需根據業(yè)務需求、數據復雜度和查詢性能權衡,實際開發(fā)中也常采用分層建模(ODS、DWD、DWS、ADS)與上述模型相結合,實現數據的穩(wěn)定、復用與靈活分析。
HDFS 的寫數據流程是怎樣的?如果一個 DN在寫入過程中發(fā)生故障,Hadoop 會如何處理?
?HDFS 中的寫數據流程從客戶端開始,首先客戶端向 NameNode 請求文件寫入權限。NameNode 確認文件不存在后,將文件寫入的權限以及負責存儲數據塊的 DataNode 信息返回給客戶端??蛻舳巳缓髸c DataNode 建立連接,并通過一個個數據塊的方式進行寫入。每個數據塊(Block)會按照一定的副本策略(默認三個副本)分配到多個 DataNode 上。客戶端向每個 DataNode 傳輸數據時,會將數據寫入第一個數據塊,完成后接著寫第二個、第三個,以此類推。如果在寫入過程中,某個 DataNode 發(fā)生故障,NameNode 會根據副本機制將數據復制到其他健康的 DataNode 上,確保數據不會丟失。通過心跳機制和副本機制,DataNode 故障會被檢測到,并且數據會自動恢復到最新副本。故障發(fā)生時,HDFS 會根據剩余副本的數據恢復丟失的部分。
1、Client通過Distributed FileSystem模塊向NN請求上傳文件,NN檢查目標文件是否已存在,父目錄是否存在 2、NN返回是否可以上傳 3、Client請求第一個block上傳哪幾個DN服務器上 4、NN返回3個DN節(jié)點,分別為DN1、DN2、DN3 5、Client通過FSDataOutputStream模塊請求DN1建立傳輸通道,DN1收到請求會繼續(xù)調用DN2,DN2繼續(xù)調用DN3 6、DN3應答DN2,DN2應答DN1,DN1應答Client 7、Client開始往DN1上傳第一個block(先讀取數據放到一個本地磁盤緩存),以packet為單位,DN1收到一個packet就會上傳給DN2,DN2傳給DN3;DN1每傳一個packet會放入到一個應答隊列等待應答 8、當一個block傳輸完成后,Client會再次請求NN上傳第二個block的服務器,重復執(zhí)行3-7
#??徒鈶n鋪##數據人的面試交流地#
努力找實習中,整理一些大數據相關面試題和大家分享,共同學習進步,有建議或批評歡迎留言!