技術乾貨:Hadoop面試題及答案
推薦閱讀:
【技術乾貨】 http://blog.itpub.net/69902581/viewspace-2672371/
一、什麼是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)和實時處理。
二、基於Hadoop的資料中心的好處是什麼?
隨著資料量和複雜性的增加,提高了整體SLA(即服務水平協議)。例如,“Shared Nothing”架構,並行處理,記憶體密集型處理框架,如Spark和Impala,以及YARN容量排程程式中的資源搶佔。
1、縮放資料倉儲可能會很昂貴:新增額外的高階硬體容量以及獲取資料倉儲工具的許可證可能會顯著增加成本。基於Hadoop的解決方案不僅在商品硬體節點和開源工具方面更便宜,而且還可以透過將資料轉換解除安裝到Hadoop工具(如Spark和Impala)來補足資料倉儲解決方案,從而更高效地並行處理大資料。這也將釋放資料倉儲資源。
2、探索新的渠道和線索:Hadoop可以為資料科學家提供探索性的沙盒,以從社交媒體,日誌檔案,電子郵件等地方發現潛在的有價值的資料,這些資料通常在資料倉儲中不可得。
3、更好的靈活性:通常業務需求的改變,也需要對架構和報告進行更改。基於Hadoop的解決方案不僅可以靈活地處理不斷髮展的模式,還可以處理來自不同來源,如社交媒體,應用程式日誌檔案,image,PDF和文件檔案的半結構化和非結構化資料。
四、簡單描述如何安裝配置一個apache開源版hadoop,只描述即可,無需列出完整步驟,能列出步驟更好。
1、安裝JDK並配置環境變數(/etc/profile);
2、關閉防火牆;
3、配置hosts檔案,方便hadoop透過主機名訪問(/etc/hosts);
4、設定ssh免密碼登入;
5、解壓縮hadoop安裝包,並配置環境變數;
6、修改配置檔案($HADOOP_HOME/conf);hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml;
7、格式化hdfs檔案系統(hadoop namenode -format);
8、啟動hadoop($HADOOP_HOME/bin/start-all.sh);
9、使用jps檢視程式。
五、請列出正常工作的hadoop叢集中hadoop都分別需要啟動那些程式,他們的作用分別是什麼,儘可能寫的全面些。
1、NameNode: HDFS的守護程式,負責記錄檔案是如何分割成資料塊,以及這些資料塊分別被儲存到那些資料節點上,它的主要功能是對記憶體及IO進行集中管理。
2、Secondary NameNode:輔助後臺程式,與NameNode進行通訊,以便定期儲存HDFS後設資料的快照。
3、DataNode:負責把HDFS資料塊讀寫到本地的檔案系統。
4、JobTracker:負責分配task,並監控所有執行的task。
5、TaskTracker:負責執行具體的task,並與JobTracker進行互動。
六、請列出你所知道的hadoop排程器,並簡要說明其工作方法
比較流行的三種排程器有:預設排程器FIFO,計算能力排程器Capacity Scheduler,公平排程器Fair Scheduler
1、預設排程器FIFO:hadoop中預設的排程器,採用先進先出的原則。
2、計算能力排程器Capacity Scheduler:選擇佔用資源小,優先順序高的先執行。
3、公平排程器Fair Scheduler:同一佇列中的作業公平共享佇列中所有資源。
七、Hive有那些方式儲存後設資料的,各有那些特點。
1、記憶體資料庫derby,較小,不常用;
2、本地mysql,較常用;
3、遠端mysql,不常用。
八、簡述hadoop實現Join的幾種方法。
1、reduce side join
reduce side join是一種最簡單的join方式,其主要思想如下:
在map階段,map函式同時讀取兩個檔案File1和File2,為了區分兩種來源的key/value資料對,對每條資料打一個標籤(tag),比如:tag=0表示來自檔案File1,tag=2表示來自檔案File2。即:map階段的主要任務是對不同檔案中的資料打標籤。
在reduce階段,reduce函式獲取key相同的來自File1和File2檔案的value list, 然後對於同一個key,對File1和File2中的資料進行join(笛卡爾乘積)。即:reduce階段進行實際的連線操作。
2、map side join
之所以存在reduce side join,是因為在map階段不能獲取所有需要的join欄位,即:同一個key對應的欄位可能位於不同map中。Reduce side join是非常低效的,因為shuffle階段要進行大量的資料傳輸。
Map side join是針對以下場景進行的最佳化:兩個待連線表中,有一個表非常大,而另一個表非常小,以至於小表可以直接存放到記憶體中。這樣,我們可以將小表複製多份,讓每個map task記憶體中存在一份(比如存放到hash table中),然後只掃描大表:對於大表中的每一條記錄key/value,在hash table中查詢是否有相同的key的記錄,如果有,則連線後輸出即可。
為了支援檔案的複製,Hadoop提供了一個類DistributedCache,使用該類的方法如下:
(1)使用者使用靜態方法
DistributedCache.addCacheFile()指定要複製的檔案,它的引數是檔案的URI(如果是HDFS上的檔案,可以這樣:hdfs://namenode:9000/home/XXX/file,其中9000是自己配置的NameNode埠號)。
JobTracker在作業啟動之前會獲取這個URI列表,並將相應的檔案複製到各個TaskTracker的本地磁碟上。
(2)使用者使用
DistributedCache.getLocalCacheFiles()方法獲取檔案目錄,並使用標準的檔案讀寫API讀取相應的檔案。
3、SemiJoin
SemiJoin,也叫半連線,是從分散式資料庫中借鑑過來的方法。它的產生動機是:對於reduce side join,跨機器的資料傳輸量非常大,這成了join操作的一個瓶頸,如果能夠在map端過濾掉不會參加join操作的資料,則可以大大節省網路IO。
實現方法很簡單:選取一個小表,假設是File1,將其參與join的key抽取出來,儲存到檔案File3中,File3檔案一般很小,可以放到記憶體中。在map階段,使用DistributedCache將File3複製到各個TaskTracker上,然後將File2中不在File3中的key對應的記錄過濾掉,剩下的reduce階段的工作與reduce side join相同。
4、reduce side join + BloomFilter
在某些情況下,SemiJoin抽取出來的小表的key集合在記憶體中仍然存放不下,這時候可以使用BloomFiler以節省空間。
BloomFilter最常見的作用是:判斷某個元素是否在一個集合裡面。它最重要的兩個方法是:add() 和contains()。最大的特點是不會存在false negative,即:如果contains()返回false,則該元素一定不在集合中,但會存在一定的true negative,即:如果contains()返回true,則該元素可能在集合中。
因而可將小表中的key儲存到BloomFilter中,在map階段過濾大表,可能有一些不在小表中的記錄沒有過濾掉(但是在小表中的記錄一定不會過濾掉),這沒關係,只不過增加了少量的網路IO而已。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902581/viewspace-2674068/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 技術乾貨:RabbitMQ面試題及答案MQ面試題
- 技術乾貨:ActiveMQ面試題及答案MQ面試題
- 技術乾貨:spring boot面試題及答案Spring Boot面試題
- 技術乾貨:Tomcat面試題彙總及答案Tomcat面試題
- 技術乾貨:Kotlin面試題彙總及答案Kotlin面試題
- 技術乾貨:spring cloud面試題彙總及答案SpringCloud面試題
- 技術乾貨:Kubernetes面試題彙總及答案面試題
- 技術乾貨:關於效能測試面試題及答案面試題
- 技術乾貨:ASP.net mvc面試32題附答案ASP.NETMVC面試
- 12個iOS技術面試題及答案總結iOS面試題
- 乾貨來臨:C語言面試54題附答案C語言面試
- Java開發基礎常見面試題及答案彙總(實用乾貨!)Java面試題
- PHPer 面試可能會遇到的問題及答案 | 掘金技術徵文PHP面試
- 技術乾貨收集
- JS面試題及答案JS面試題
- Hadoop 面試中 6 個常見的問題及答案Hadoop面試
- 2017前端面試題及答案總結|掘金技術徵文前端面試題
- Android 面試題(附答案) | 掘金技術徵文Android面試題
- 技術面試題分享:含答案的10道Jvm面試專題面試題JVM
- struts面試題及答案【重要】面試題
- Oracle面試試題及答案Oracle面試
- 前端面試題乾貨集合前端面試題
- 阿里技術精華乾貨整理阿里
- 常見AI面試題及答案AI面試題
- 30 道 Dubbo 面試題及答案面試題
- Java初中級面試題及答案Java面試題
- 碼農面試智力題及答案面試
- Java高階面試題及答案Java面試題
- SQL經典面試題及答案SQL面試題
- c#面試題及答案(二)C#面試題
- Oracle 面試英文題目及答案Oracle面試
- (轉)ABAP 面試問題及答案面試
- 面試題:web程式設計技術考試題庫(含答案)面試題Web程式設計
- 10道Python常見面試題及答案,快來測測你的技術!Python面試題
- 程式設計師面試備戰篇:18個經典MySQL面試專題解析(乾貨分享答案)程式設計師面試MySql
- 技術乾貨 | WebRTC 技術解析之 Android VDMWebAndroid
- 技術乾貨:LeetCode1- 20題詳解LeetCode
- 阿里Jvm必問面試題及答案阿里JVM面試題