hadoop常見面試題

Q1.什麼是 Hadoop?html

  Hadoop 是一個開源軟件框架,用於存儲大量數據,併發處理/查詢在具備多個商用硬件(即低成本硬件)節點的集羣上的那些數據。總之,Hadoop 包括如下內容:node

  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 組織正在從如下幾個方面提升本身的能力:併發

  現有數據基礎設施:app

  • 主要使用存儲在高端和昂貴硬件中的「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.大數據解決方案的關鍵步驟是什麼?

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

  提取數據

  從各類來源提取數據,例如:

  1. RDBM(Relational Database Management Systems)關係數據庫管理系統,如 Oracle,MySQL 等。
  2. ERPs(Enterprise Resource Planning)企業資源規劃(即 ERP)系統,如 SAP。
  3. CRM(Customer Relationships Management)客戶關係管理系統,如 Siebel,Salesforce 等
  4. 社交媒體 Feed 和日誌文件。
  5. 平面文件,文檔和圖像。

  並將其存儲在基於「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 中存儲數據以前,你須要考慮如下幾點:

  1. 數據存儲格式:有許多能夠應用的文件格式(例如 CSV,JSON,序列,AVRO,Parquet 等)和數據壓縮算法(例如 snappy,LZO,gzip,bzip2 等)。每一個都有特殊的優點。像 LZO 和 bzip2 的壓縮算法是可拆分的。
  2. 數據建模:儘管 Hadoop 的無模式性質,模式設計依然是一個重要的考慮方面。這包括存儲在 HBase,Hive 和 Impala 中的對象的目錄結構和模式。Hadoop 一般用做整個組織的數據中心,而且數據旨在共享。所以,結構化和有組織的數據存儲很重要。
  3. 元數據管理:與存儲數據相關的元數據。
  4. 多用戶:更智能的數據中心託管多個用戶、組和應用程序。這每每致使與統治、標準化和管理相關的挑戰。

  處理數據

  Hadoop 的處理框架使用 HDFS。它使用「Shared Nothing」架構,在分佈式系統中,每一個節點徹底獨立於系統中的其餘節點。沒有共享資源,如 CPU,內存以及會成爲瓶頸的磁盤存儲。Hadoop 的處理框架(如 Spark,Pig,Hive,Impala 等)處理數據的不一樣子集,而且不須要管理對共享數據的訪問。 「Shared Nothing」架構是很是可擴展的,由於更多的節點能夠被添加而沒有更進一步的爭用和容錯,由於每一個節點是獨立的,而且沒有單點故障,系統能夠從單個節點的故障快速恢復。

  Q6.你會如何選擇不一樣的文件格式存儲和處理數據?

  設計決策的關鍵之一是基於如下方面關注文件格式:

  1. 使用模式,例如訪問 50 列中的 5 列,而不是訪問大多數列。
  2. 可並行處理的可分裂性。
  3. 塊壓縮節省存儲空間 vs 讀/寫/傳輸性能
  4. 模式演化以添加字段,修改字段和重命名字段。

  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 文件用於處理。

  一、海量日誌數據提取出某日訪問百度次數最多的IP,怎麼作?

  二、有一個1G大小的文件,裏面每一行是一個詞,詞的大小不超過16字節,內存限制大小是1M。返回頻數最高的100個詞。

  三、更智能&更大的數據中心架構與傳統的數據倉庫架構有何不一樣?

  傳統的企業數據倉庫架構

  基於 Hadoop 的數據中心架構

  四、運行Hadoop集羣須要哪些守護進程?

  DataNode,NameNode,TaskTracker和JobTracker都是運行Hadoop集羣須要的守護進程。

  五、Hadoop支持哪些操做系統部署?

  Hadoop的主要操做系統是Linux。 可是,經過使用一些額外的軟件,也能夠在Windows平臺上部署,但這種方式不被推薦。

  六、Hadoop常見輸入格式是什麼?

  三種普遍使用的輸入格式是:

  ·文本輸入:Hadoop中的默認輸入格式。

  ·Key值:用於純文本文件

  ·序列:用於依次讀取文件

  七、RDBMS和Hadoop的主要區別是什麼?

  RDBMS用於事務性系統存儲和處理數據,而Hadoop能夠用來存儲大量數據。

  八、給定a、b兩個文件,各存放50億個url,每一個url各佔64字節,內存限制是4G,讓你找出a、b文件共同的URL?

  九、如何在生產環境中部署Hadoop的不一樣組件?

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

  十、添加新datanode後,做爲Hadoop管理員須要作什麼?

  須要啓動平衡器才能在全部節點之間從新平均分配數據,以便Hadoop集羣自動查找新的datanode。要優化集羣性能,應該從新啓動平衡器以在數據節點之間從新分配數據。

  十一、namenode的重要性是什麼?

  namenonde的做用在Hadoop中很是重要。它是Hadoop的大腦,主要負責管理系統上的分配塊,還爲客戶提出請求時的數據提供特定地址。

  十二、判斷:Block Size是不能夠修改的。(錯誤)

  分析:

  1三、當NameNode關閉時會發生什麼?

  若是NameNode關閉,文件系統將脫機。

  1四、是否能夠在不一樣集羣之間複製文件?若是是的話,怎麼能作到這一點?

  是的,能夠在多個Hadoop集羣之間複製文件,這可使用分佈式複製來完成。

  1五、是否有任何標準方法來部署Hadoop?

  如今有使用Hadoop部署數據的標準程序,全部Hadoop發行版都沒有什麼通用要求。可是,對於每一個Hadoop管理員,具體方法老是不一樣的。

  1六、HDFS,replica如何定位?

  1七、distcp是什麼?

  Distcp是一個Hadoop複製工具,主要用於執行MapReduce做業來複制數據。 Hadoop環境中的主要挑戰是在各集羣之間複製數據,distcp也將提供多個datanode來並行複製數據。

  1八、什麼是檢查點?

  對文件數據的修改不是直接寫回到磁盤的,不少操做是先緩存到內存的Buffer中,當遇到一個檢查點Checkpoint時,系統會強制將內存中的數據寫回磁盤,固然此時纔會記錄日誌,從而產生持久的修改狀態。所以,不用重放一個輯日誌,NameNode能夠直接從FsImage加載到最終的內存狀態,這確定會下降NameNode啓動時間。

  1九、什麼是機架感知?

  這是一種決定如何根據機架定義放置塊的方法。Hadoop將嘗試限制存在於同一機架中的datanode之間的網絡流量。爲了提升容錯能力,名稱節點會盡量把數據塊的副本放到多個機架上。 綜合考慮這兩點的基礎上Hadoop設計了機架感知功能。

  20、有哪些重要的Hadoop工具?

  「Hive」,HBase,HDFS,ZooKeeper,NoSQL,Lucene / SolrSee,Avro,Oozie,Flume,和SQL是一些加強大數據性能的Hadoop工具。

  2一、什麼是投機性執行?

  若是一個節點正在執行比主節點慢的任務。那麼就須要在另外一個節點上冗餘地執行同一個任務的一個實例。因此首先完成的任務會被接受,另外一個可能會被殺死。這個過程被稱爲「投機執行」。

  2二、Hadoop及其組件是什麼?

  當「大數據」出現問題時,Hadoop發展成爲一個解決方案。這是一個提供各類服務或工具來存儲和處理大數據的框架。這也有助於分析大數據,並作出用傳統方法難以作出的商業決策。

  2三、Hadoop的基本特性是什麼?

  Hadoop框架有能力解決大數據分析的許多問題。它是基於Google大數據文件系統的Google MapReduce設計的。

  2四、是否能夠在Windows上運行Hadoop?

  能夠,可是最好不要這麼作,Red Hat Linux或者是Ubuntu纔是Hadoop的最佳操做系統。在Hadoop安裝中,Windows一般不會被使用,由於會出現各類各樣的問題。所以,Windows毫不是Hadoop推薦系統。

  2五、主動和被動「名稱節點」是什麼?

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

  · 活動「NameNode」是在集羣中運行的「NameNode」。

  · 被動「NameNode」是一個備用的「NameNode」,與「NameNode」有着類似的數據。

  當活動的「NameNode」失敗時,被動「NameNode」將替換羣集中的活動「NameNode」。所以,集羣永遠不會沒有「NameNode」,因此它永遠不會失敗。

相關文章
相關標籤/搜索