hadoop常见面试题
Q1.什么是 Hadoop?
Hadoop 是一個開源軟件框架,用于存儲大量數據,并發處理/查詢在具有多個商用硬件(即低成本硬件)節點的集群上的那些數據。總之,Hadoop 包括以下內容:
HDFS(Hadoop Distributed File System,Hadoop 分布式文件系統):HDFS 允許你以一種分布式和冗余的方式存儲大量數據。例如,1 GB(即 1024 MB)文本文件可以拆分為 16 * 128MB 文件,并存儲在 Hadoop 集群中的 8 個不同節點上。每個分裂可以復制 3 次,以實現容錯,以便如果 1 個節點故障的話,也有備份。HDFS 適用于順序的“一次寫入、多次讀取”的類型訪問。
MapReduce:一個計算框架。它以分布式和并行的方式處理大量的數據。當你對所有年齡> 18 的用戶在上述 1 GB 文件上執行查詢時,將會有“8 個映射”函數并行運行,以在其 128 MB 拆分文件中提取年齡> 18 的用戶,然后“reduce”函數將運行以將所有單獨的輸出組合成單個最終結果。
YARN(Yet Another Resource Nagotiator,又一資源定位器):用于作業調度和集群資源管理的框架。
Hadoop 生態系統,擁有 15 多種框架和工具,如 Sqoop,Flume,Kafka,Pig,Hive,Spark,Impala 等,以便將數據攝入 HDFS,在 HDFS 中轉移數據(即變換,豐富,聚合等),并查詢來自 HDFS 的數據用于商業智能和分析。某些工具(如 Pig 和 Hive)是 MapReduce 上的抽象層,而 Spark 和 Impala 等其他工具則是來自 MapReduce 的改進架構/設計,用于顯著提高的延遲以支持近實時(即 NRT)和實時處理。
Q2.為什么組織從傳統的數據倉庫工具轉移到基于 Hadoop 生態系統的智能數據中心?
Hadoop 組織正在從以下幾個方面提高自己的能力:
現有數據基礎設施:
- 主要使用存儲在高端和昂貴硬件中的“structured data,結構化數據”
- 主要處理為 ETL 批處理作業,用于將數據提取到 RDBMS 和數據倉庫系統中進行數據挖掘,分析和報告,以進行關鍵業務決策。
- 主要處理以千兆字節到兆字節為單位的數據量
基于 Hadoop 的更智能的數據基礎設施,其中
- 結構化(例如 RDBMS),非結構化(例如 images,PDF,docs )和半結構化(例如 logs,XMLs)的數據可以以可擴展和容錯的方式存儲在較便宜的商品機器中。
- 可以通過批處理作業和近實時(即,NRT,200 毫秒至 2 秒)流(例如 Flume 和 Kafka)來攝取數據。
- 數據可以使用諸如 Spark 和 Impala 之類的工具以低延遲(即低于 100 毫秒)的能力查詢。
- 可以存儲以兆兆字節到千兆字節為單位的較大數據量。
這使得組織能夠使用更強大的工具來做出更好的業務決策,這些更強大的工具用于獲取數據,轉移存儲的數據(例如聚合,豐富,變換等),以及使用低延遲的報告功能和商業智能。
Q3.更智能&更大的數據中心架構與傳統的數據倉庫架構有何不同?
傳統的企業數據倉庫架構
基于 Hadoop 的數據中心架構
Q4.基于 Hadoop 的數據中心的好處是什么?
隨著數據量和復雜性的增加,提高了整體 SLA(即服務水平協議)。例如,“Shared Nothing”架構,并行處理,內存密集型處理框架,如 Spark 和 Impala,以及 YARN 容量調度程序中的資源搶占。
縮放數據倉庫可能會很昂貴。添加額外的高端硬件容量以及獲取數據倉庫工具的許可證可能會顯著增加成本。基于 Hadoop 的解決方案不僅在商品硬件節點和開源工具方面更便宜,而且還可以通過將數據轉換卸載到 Hadoop 工具(如 Spark 和 Impala)來補足數據倉庫解決方案,從而更高效地并行處理大數據。這也將釋放數據倉庫資源。
探索新的渠道和線索。Hadoop 可以為數據科學家提供探索性的沙盒,以從社交媒體,日志文件,電子郵件等地方發現潛在的有價值的數據,這些數據通常在數據倉庫中不可得。
更好的靈活性。通常業務需求的改變,也需要對架構和報告進行更改。基于 Hadoop 的解決方案不僅可以靈活地處理不斷發展的模式,還可以處理來自不同來源,如社交媒體,應用程序日志文件,image,PDF 和文檔文件的半結構化和非結構化數據。
Q5.大數據解決方案的關鍵步驟是什么?
提取數據,存儲數據(即數據建模)和處理數據(即數據加工,數據轉換和查詢數據)。
提取數據
從各種來源提取數據,例如:
并將其存儲在基于“Hadoop 分布式文件系統”(簡稱 HDFS)的數據中心上。可以通過批處理作業(例如每 15 分鐘運行一次,每晚一次,等),近實時(即 100 毫秒至 2 分鐘)流式傳輸和實時流式傳輸(即 100 毫秒以下)去采集數據。
Hadoop 中使用的一個常用術語是“Schema-On-Read”。這意味著未處理(也稱為原始)的數據可以被加載到 HDFS,其具有基于處理應用的需求在處理之時應用的結構。這與“Schema-On-Write”不同,后者用于需要在加載數據之前在 RDBM 中定義模式。
存儲數據
數據可以存儲在 HDFS 或 NoSQL 數據庫,如 HBase。HDFS 針對順序訪問和“一次寫入和多次讀取”的使用模式進行了優化。HDFS 具有很高的讀寫速率,因為它可以將 I / O 并行到多個驅動器。HBase 在 HDFS 之上,并以柱狀方式將數據存儲為鍵/值對。列作為列家族在一起。HBase 適合隨機讀/寫訪問。在 Hadoop 中存儲數據之前,你需要考慮以下幾點:
處理數據
Hadoop 的處理框架使用 HDFS。它使用“Shared Nothing”架構,在分布式系統中,每個節點完全獨立于系統中的其他節點。沒有共享資源,如 CPU,內存以及會成為瓶頸的磁盤存儲。Hadoop 的處理框架(如 Spark,Pig,Hive,Impala 等)處理數據的不同子集,并且不需要管理對共享數據的訪問。 “Shared Nothing”架構是非常可擴展的,因為更多的節點可以被添加而沒有更進一步的爭用和容錯,因為每個節點是獨立的,并且沒有單點故障,系統可以從單個節點的故障快速恢復。
Q6.你會如何選擇不同的文件格式存儲和處理數據?
設計決策的關鍵之一是基于以下方面關注文件格式:
CSV 文件
CSV 文件通常用于在 Hadoop 和外部系統之間交換數據。CSV 是可讀和可解析的。 CSV 可以方便地用于從數據庫到 Hadoop 或到分析數據庫的批量加載。在 Hadoop 中使用 CSV 文件時,不包括頁眉或頁腳行。文件的每一行都應包含記錄。CSV 文件對模式評估的支持是有限的,因為新字段只能附加到記錄的結尾,并且現有字段不能受到限制。CSV 文件不支持塊壓縮,因此壓縮 CSV 文件會有明顯的讀取性能成本。
JSON 文件
JSON 記錄與 JSON 文件不同;每一行都是其 JSON 記錄。由于 JSON 將模式和數據一起存儲在每個記錄中,因此它能夠實現完整的模式演進和可拆分性。此外,JSON 文件不支持塊級壓縮。
序列文件
序列文件以與 CSV 文件類似的結構用二進制格式存儲數據。像 CSV 一樣,序列文件不存儲元數據,因此只有模式進化才將新字段附加到記錄的末尾。與 CSV 文件不同,序列文件確實支持塊壓縮。序列文件也是可拆分的。序列文件可以用于解決“小文件問題”,方式是通過組合較小的通過存儲文件名作為鍵和文件內容作為值的 XML 文件。由于讀取序列文件的復雜性,它們更適合用于在飛行中的(即中間的)數據存儲。
注意:序列文件是以 Java 為中心的,不能跨平臺使用。
Avro 文件
適合于有模式的長期存儲。Avro 文件存儲具有數據的元數據,但也允許指定用于讀取文件的獨立模式。啟用完全的模式進化支持,允許你通過定義新的獨立模式重命名、添加和刪除字段以及更改字段的數據類型。Avro 文件以 JSON 格式定義模式,數據將采用二進制 JSON 格式。Avro 文件也是可拆分的,并支持塊壓縮。更適合需要行級訪問的使用模式。這意味著查詢該行中的所有列。不適用于行有 50+ 列,但使用模式只需要訪問 10 個或更少的列。Parquet 文件格式更適合這個列訪問使用模式。
Columnar 格式,例如 RCFile,ORC
RDBM 以面向行的方式存儲記錄,因為這對于需要在獲取許多列的記錄的情況下是高效的。如果在向磁盤寫入記錄時已知所有列值,則面向行的寫也是有效的。但是這種方法不能有效地獲取行中的僅 10% 的列或者在寫入時所有列值都不知道的情況。這是 Columnar 文件更有意義的地方。所以 Columnar 格式在以下情況下工作良好
- 在不屬于查詢的列上跳過 I / O 和解壓縮
- 用于僅訪問列的一小部分的查詢。
- 用于數據倉庫型應用程序,其中用戶想要在大量記錄上聚合某些列。
RC 和 ORC 格式是專門用 Hive 寫的而不是通用作為 Parquet。
Parquet 文件
Parquet 文件是一個 columnar 文件,如 RC 和 ORC。Parquet 文件支持塊壓縮并針對查詢性能進行了優化,可以從 50 多個列記錄中選擇 10 個或更少的列。Parquet 文件寫入性能比非 columnar 文件格式慢。Parquet 通過允許在最后添加新列,還支持有限的模式演變。Parquet 可以使用 Avro API 和 Avro 架構進行讀寫。
所以,總而言之,相對于其他,你應該會更喜歡序列,Avro 和 Parquet 文件格式;序列文件用于原始和中間存儲,Avro 和 Parquet 文件用于處理。
1、海量日志數據提取出某日訪問百度次數最多的IP,怎么做?
2、有一個1G大小的文件,里面每一行是一個詞,詞的大小不超過16字節,內存限制大小是1M。返回頻數最高的100個詞。
3、更智能&更大的數據中心架構與傳統的數據倉庫架構有何不同?
傳統的企業數據倉庫架構
基于 Hadoop 的數據中心架構
4、運行Hadoop集群需要哪些守護進程?
DataNode,NameNode,TaskTracker和JobTracker都是運行Hadoop集群需要的守護進程。
5、Hadoop支持哪些操作系統部署?
Hadoop的主要操作系統是Linux。 但是,通過使用一些額外的軟件,也可以在Windows平臺上部署,但這種方式不被推薦。
6、Hadoop常見輸入格式是什么?
三種廣泛使用的輸入格式是:
·文本輸入:Hadoop中的默認輸入格式。
·Key值:用于純文本文件
·序列:用于依次讀取文件
7、RDBMS和Hadoop的主要區別是什么?
RDBMS用于事務性系統存儲和處理數據,而Hadoop可以用來存儲大量數據。
8、給定a、b兩個文件,各存放50億個url,每個url各占64字節,內存限制是4G,讓你找出a、b文件共同的URL?
9、如何在生產環境中部署Hadoop的不同組件?
需要在主節點上部署jobtracker和namenode,然后在多個從節點上部署datanode。
10、添加新datanode后,作為Hadoop管理員需要做什么?
需要啟動平衡器才能在所有節點之間重新平均分配數據,以便Hadoop集群自動查找新的datanode。要優化集群性能,應該重新啟動平衡器以在數據節點之間重新分配數據。
11、namenode的重要性是什么?
namenonde的作用在Hadoop中非常重要。它是Hadoop的大腦,主要負責管理系統上的分配塊,還為客戶提出請求時的數據提供特定地址。
12、判斷:Block Size是不可以修改的。(錯誤)
分析:
13、當NameNode關閉時會發生什么?
如果NameNode關閉,文件系統將脫機。
14、是否可以在不同集群之間復制文件?如果是的話,怎么能做到這一點?
是的,可以在多個Hadoop集群之間復制文件,這可以使用分布式復制來完成。
15、是否有任何標準方法來部署Hadoop?
現在有使用Hadoop部署數據的標準程序,所有Hadoop發行版都沒有什么通用要求。但是,對于每個Hadoop管理員,具體方法總是不同的。
16、HDFS,replica如何定位?
17、distcp是什么?
Distcp是一個Hadoop復制工具,主要用于執行MapReduce作業來復制數據。 Hadoop環境中的主要挑戰是在各集群之間復制數據,distcp也將提供多個datanode來并行復制數據。
18、什么是檢查點?
對文件數據的修改不是直接寫回到磁盤的,很多操作是先緩存到內存的Buffer中,當遇到一個檢查點Checkpoint時,系統會強制將內存中的數據寫回磁盤,當然此時才會記錄日志,從而產生持久的修改狀態。因此,不用重放一個編輯日志,NameNode可以直接從FsImage加載到最終的內存狀態,這肯定會降低NameNode啟動時間。
19、什么是機架感知?
這是一種決定如何根據機架定義放置塊的方法。Hadoop將嘗試限制存在于同一機架中的datanode之間的網絡流量。為了提高容錯能力,名稱節點會盡可能把數據塊的副本放到多個機架上。 綜合考慮這兩點的基礎上Hadoop設計了機架感知功能。
20、有哪些重要的Hadoop工具?
“Hive”,HBase,HDFS,ZooKeeper,NoSQL,Lucene / SolrSee,Avro,Oozie,Flume,和SQL是一些增強大數據性能的Hadoop工具。
21、什么是投機性執行?
如果一個節點正在執行比主節點慢的任務。那么就需要在另一個節點上冗余地執行同一個任務的一個實例。所以首先完成的任務會被接受,另一個可能會被殺死。這個過程被稱為“投機執行”。
22、Hadoop及其組件是什么?
當“大數據”出現問題時,Hadoop發展成為一個解決方案。這是一個提供各種服務或工具來存儲和處理大數據的框架。這也有助于分析大數據,并做出用傳統方法難以做出的商業決策。
23、Hadoop的基本特性是什么?
Hadoop框架有能力解決大數據分析的許多問題。它是基于Google大數據文件系統的Google MapReduce設計的。
24、是否可以在Windows上運行Hadoop?
可以,但是最好不要這么做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳操作系統。在Hadoop安裝中,Windows通常不會被使用,因為會出現各種各樣的問題。因此,Windows絕不是Hadoop推薦系統。
25、主動和被動“名稱節點”是什么?
在HA(高可用性)架構中,我們有兩個NameNodes - Active“NameNode”和被動“NameNode”。
· 活動“NameNode”是在集群中運行的“NameNode”。
· 被動“NameNode”是一個備用的“NameNode”,與“NameNode”有著相似的數據。
當活動的“NameNode”失敗時,被動“NameNode”將替換群集中的活動“NameNode”。因此,集群永遠不會沒有“NameNode”,所以它永遠不會失敗。
轉載于:https://www.cnblogs.com/gala1021/p/8552850.html
總結
以上是生活随笔為你收集整理的hadoop常见面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 移动端点击屏幕按钮闪现的灰色底框
- 下一篇: AJAX异步原理与实现
