1. 程式人生 > >Hadoop常見面試題(一)

Hadoop常見面試題(一)

1.什麼是 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)和實時處理。   2.為什麼組織從傳統的資料倉庫工具轉移到基於 Hadoop 生態系統的智慧資料中心?

Hadoop 組織正在從以下幾個方面提高自己的能力:

現有資料基礎設施:

主要使用儲存在高階和昂貴硬體中的“structured data,結構化資料” 主要處理為 ETL 批處理作業,用於將資料提取到 RDBMS 和資料倉庫系統中進行資料探勘,分析和報告,以進行關鍵業務決策。 主要處理以千兆位元組到兆位元組為單位的資料量   基於 Hadoop 的更智慧的資料基礎設施,其中

結構化(例如 RDBMS),非結構化(例如 images,PDF,docs )和半結構化(例如 logs,XMLs)的資料可以以可擴充套件和容錯的方式儲存在較便宜的商品機器中。 可以通過批處理作業和近實時(即,NRT,200 毫秒至 2 秒)流(例如 Flume 和 Kafka)來攝取資料。 資料可以使用諸如 Spark 和 Impala 之類的工具以低延遲(即低於 100 毫秒)的能力查詢。 可以儲存以兆兆位元組到千兆位元組為單位的較大資料量。   這使得組織能夠使用更強大的工具來做出更好的業務決策,這些更強大的工具用於獲取資料,轉移儲存的資料(例如聚合,豐富,變換等),以及使用低延遲的報告功能和商業智慧。   3.基於 Hadoop 的資料中心的好處是什麼?

隨著資料量和複雜性的增加,提高了整體 SLA(即服務水平協議)。例如,“Shared Nothing”架構,並行處理,記憶體密集型處理框架,如 Spark 和 Impala,以及 YARN 容量排程程式中的資源搶佔。

縮放資料倉庫可能會很昂貴。新增額外的高階硬體容量以及獲取資料倉庫工具的許可證可能會顯著增加成本。基於 Hadoop 的解決方案不僅在商品硬體節點和開源工具方面更便宜,而且還可以通過將資料轉換解除安裝到 Hadoop 工具(如 Spark 和 Impala)來補足資料倉庫解決方案,從而更高效地並行處理大資料。這也將釋放資料倉庫資源。

探索新的渠道和線索。Hadoop 可以為資料科學家提供探索性的沙盒,以從社交媒體,日誌檔案,電子郵件等地方發現潛在的有價值的資料,這些資料通常在資料倉庫中不可得。

更好的靈活性。通常業務需求的改變,也需要對架構和報告進行更改。基於 Hadoop 的解決方案不僅可以靈活地處理不斷髮展的模式,還可以處理來自不同來源,如社交媒體,應用程式日誌檔案,image,PDF 和文件檔案的半結構化和非結構化資料。   4.大資料解決方案的關鍵步驟是什麼?

提取資料,儲存資料(即資料建模)和處理資料(即資料加工,資料轉換和查詢資料)。

提取資料

從各種來源提取資料,例如:

RDBM(Relational Database Management Systems)關係資料庫管理系統,如 Oracle,MySQL 等。 ERPs(Enterprise Resource Planning)企業資源規劃(即 ERP)系統,如 SAP。 CRM(Customer Relationships Management)客戶關係管理系統,如 Siebel,Salesforce 等 社交媒體 Feed 和日誌檔案。 平面檔案,文件和影象。   並將其儲存在基於“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 中儲存資料之前,你需要考慮以下幾點:

資料儲存格式:有許多可以應用的檔案格式(例如 CSV,JSON,序列,AVRO,Parquet 等)和資料壓縮演算法(例如 snappy,LZO,gzip,bzip2 等)。每個都有特殊的優勢。像 LZO 和 bzip2 的壓縮演算法是可拆分的。 資料建模:儘管 Hadoop 的無模式性質,模式設計依然是一個重要的考慮方面。這包括儲存在 HBase,Hive 和 Impala 中的物件的目錄結構和模式。Hadoop 通常用作整個組織的資料中心,並且資料旨在共享。因此,結構化和有組織的資料儲存很重要。 元資料管理:與儲存資料相關的元資料。 多使用者:更智慧的資料中心託管多個使用者、組和應用程式。這往往導致與統治、標準化和管理相關的挑戰。   處理資料

Hadoop 的處理框架使用 HDFS。它使用“Shared Nothing”架構,在分散式系統中,每個節點完全獨立於系統中的其他節點。沒有共享資源,如 CPU,記憶體以及會成為瓶頸的磁碟儲存。Hadoop 的處理框架(如 Spark,Pig,Hive,Impala 等)處理資料的不同子集,並且不需要管理對共享資料的訪問。 “Shared Nothing”架構是非常可擴充套件的,因為更多的節點可以被新增而沒有更進一步的爭用和容錯,因為每個節點是獨立的,並且沒有單點故障,系統可以從單個節點的故障快速恢復。   5.你會如何選擇不同的檔案格式儲存和處理資料?

設計決策的關鍵之一是基於以下方面關注檔案格式:

使用模式,例如訪問 50 列中的 5 列,而不是訪問大多數列。 可並行處理的可分裂性。 塊壓縮節省儲存空間 vs 讀/寫/傳輸效能 模式演化以新增欄位,修改欄位和重新命名欄位。   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 檔案用於處理。      6.海量日誌資料提取出某日訪問百度次數最多的IP,怎麼做? 7.有一個1G大小的檔案,裡面每一行是一個詞,詞的大小不超過16位元組,記憶體限制大小是1M。返回頻數最高的100個詞。   8.更智慧&更大的資料中心架構與傳統的資料倉庫架構有何不同?   9.執行Hadoop叢集需要哪些守護程序?   DataNode,NameNode,TaskTracker和JobTracker都是執行Hadoop叢集需要的守護程序。   10.Hadoop支援哪些作業系統部署?   Hadoop的主要作業系統是Linux。 但是,通過使用一些額外的軟體,也可以在Windows平臺上部署,但這種方式不被推薦。   11.Hadoop常見輸入格式是什麼?   三種廣泛使用的輸入格式是:

·文字輸入:Hadoop中的預設輸入格式。

·Key值:用於純文字檔案

·序列:用於依次讀取檔案

12.RDBMS和Hadoop的主要區別是什麼?

RDBMS用於事務性系統儲存和處理資料,而Hadoop可以用來儲存大量資料。

13.給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,讓你找出a、b檔案共同的URL?   14.如何在生產環境中部署Hadoop的不同元件?

需要在主節點上部署jobtracker和namenode,然後在多個從節點上部署datanode。

15.新增新datanode後,作為Hadoop管理員需要做什麼?

需要啟動平衡器才能在所有節點之間重新平均分配資料,以便Hadoop叢集自動查詢新的datanode。要優化叢集效能,應該重新啟動平衡器以在資料節點之間重新分配資料。

16.namenode的重要性是什麼?

namenonde的作用在Hadoop中非常重要。它是Hadoop的大腦,主要負責管理系統上的分配塊,還為客戶提出請求時的資料提供特定地址。

17.判斷:Block Size是不可以修改的。(錯誤)   18.當NameNode關閉時會發生什麼?   如果NameNode關閉,檔案系統將離線。

19.是否可以在不同叢集之間複製檔案?如果是的話,怎麼能做到這一點?   是的,可以在多個Hadoop叢集之間複製檔案,這可以使用分散式複製來完成。   20.是否有任何標準方法來部署Hadoop?   現在有使用Hadoop部署資料的標準程式,所有Hadoop發行版都沒有什麼通用要求。但是,對於每個Hadoop管理員,具體方法總是不同的。   21.HDFS,replica如何定位?   22.distcp是什麼?   Distcp是一個Hadoop複製工具,主要用於執行MapReduce作業來複制資料。 Hadoop環境中的主要挑戰是在各叢集之間複製資料,distcp也將提供多個datanode來並行複製資料。   23.什麼是檢查點?   對檔案資料的修改不是直接寫回到磁碟的,很多操作是先快取到記憶體的Buffer中,當遇到一個檢查點Checkpoint時,系統會強制將記憶體中的資料寫回磁碟,當然此時才會記錄日誌,從而產生持久的修改狀態。因此,不用重放一個編輯日誌,NameNode可以直接從FsImage載入到最終的記憶體狀態,這肯定會降低NameNode啟動時間。   24.什麼是機架感知?   這是一種決定如何根據機架定義放置塊的方法。Hadoop將嘗試限制存在於同一機架中的datanode之間的網路流量。為了提高容錯能力,名稱節點會盡可能把資料塊的副本放到多個機架上。 綜合考慮這兩點的基礎上Hadoop設計了機架感知功能。

25.有哪些重要的Hadoop工具?

“Hive”,HBase,HDFS,ZooKeeper,NoSQL,Lucene / SolrSee,Avro,Oozie,Flume,和SQL是一些增強大資料效能的Hadoop工具。

26.什麼是投機性執行?

如果一個節點正在執行比主節點慢的任務。那麼就需要在另一個節點上冗餘地執行同一個任務的一個例項。所以首先完成的任務會被接受,另一個可能會被殺死。這個過程被稱為“投機執行”。

27.Hadoop及其元件是什麼?

當“大資料”出現問題時,Hadoop發展成為一個解決方案。這是一個提供各種服務或工具來儲存和處理大資料的框架。這也有助於分析大資料,並做出用傳統方法難以做出的商業決策。

28.Hadoop的基本特性是什麼?

Hadoop框架有能力解決大資料分析的許多問題。它是基於Google大資料檔案系統的Google MapReduce設計的。

29.是否可以在Windows上執行Hadoop?

可以,但是最好不要這麼做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳作業系統。在Hadoop安裝中,Windows通常不會被使用,因為會出現各種各樣的問題。因此,Windows絕不是Hadoop推薦系統。

30.主動和被動“名稱節點”是什麼?

在HA(高可用性)架構中,我們有兩個NameNodes - Active“NameNode”和被動“NameNode”。

· 活動“NameNode”是在叢集中執行的“NameNode”。

· 被動“NameNode”是一個備用的“NameNode”,與“NameNode”有著相似的資料。

當活動的“NameNode”失敗時,被動“NameNode”將替換群集中的活動“NameNode”。因此,叢集永遠不會沒有“NameNode”,所以它永遠不會失敗。