大數(shù)據(jù)常見面試題與參考答案總結

技術面試題
1.Hadoop中有哪些組件?
Hadoop=HDFS+Yarn+MapReduce+Hive+Hbase+...
1).HDFS:分布式文件存儲系統(tǒng)
主:namenode,secondarynamenode
從:datanode
2).Yarn:分布式資源管理系統(tǒng),用于同一管理集群中的資源(內(nèi)存等)
主:ResourceManager
從:NodeManager
3).MapReduce:Hadoop的計算框架,用map和reduce方式實現(xiàn)數(shù)據(jù)的全局匯總
4).Zookeeper:分布式協(xié)調(diào)服務,用于維護集群配置的一致性、任務提交的事物性、集群中服務的地址管理、集群管理等
主:QuorumPeerMain
從:QuorumPeerMain
5).Hbase:Hadoop下的分布式數(shù)據(jù)庫,類似于NoSQL
主:HMaster,HRegionserver,Region
7).Hive:分布式數(shù)據(jù)倉庫,其實說白了就是一個數(shù)據(jù)分析工具,底層用的還是MapReduce
8).Sqoop:用于將傳統(tǒng)數(shù)據(jù)庫中數(shù)據(jù)導入到hbase或者Hdfs中一個導入工具
9).Spark:基于內(nèi)存的分布式處理框架
主:Master
從:Worker
2.Hdfs中角色有哪些?
NameNode:管理元數(shù)據(jù)信息,給子節(jié)點分配任務(FSImage是主節(jié)點啟動時對整個文件系統(tǒng)的快照,Edits是修改記錄)
DataNode:負責數(shù)據(jù)存儲,實時上報心跳給主節(jié)點
SecondaryNameNode:
1)首先,它定時到NameNode去獲取edit logs,并更新到fsimage上。一旦它有了新的fsimage文件,它將其拷貝回 NameNode中。
2) NameNode在下次重啟時會使用這個新的fsimage文件,從而減少重啟的時間。
3.Hdfs和Yarn有什么區(qū)別?
1)Hdfs是分布式文件存儲系統(tǒng),是用來存儲文件的;
2)Yarn是一個資源管理系統(tǒng),可為上層應用提供統(tǒng)一的資源管理和調(diào)度,它的引入為集群在利用率、資源統(tǒng)一管理和 數(shù)據(jù)共享等方面帶來了巨大好處
4.MapReduce的shuffle過程?
從Map產(chǎn)生輸出開始到Reduce取得數(shù)據(jù)作為輸入之前的過程稱作shuffle。
1).Collect階段:將MapTask的結果輸出到默認大小為100M的環(huán)形緩沖區(qū),保存的是key/value,Partition分區(qū)信息等。
2).Spill階段:當內(nèi)存中的數(shù)據(jù)量達到一定的閥值的時候,就會將數(shù)據(jù)寫入本地磁盤,在將數(shù)據(jù)寫入磁盤之前需要對數(shù)據(jù) 進行一次排序的操作,如果配置了combiner,還會將有相同分區(qū)號和key的數(shù)據(jù)進行排序。
3).Merge階段:把所有溢出的臨時文件進行一次合并操作,以確保一個MapTask最終只產(chǎn)生一個中間數(shù)據(jù)文件。
4).Copy階段:ReduceTask啟動Fetcher線程到已經(jīng)完成MapTask的節(jié)點上復制一份屬于自己的數(shù)據(jù),這些數(shù)據(jù)默認會 保存在內(nèi)存的緩沖區(qū)中,當內(nèi)存的緩沖區(qū)達到一定的閥值的時候,就會將數(shù)據(jù)寫到磁盤之上。
5).Merge階段:在ReduceTask遠程復制數(shù)據(jù)的同時,會在后臺開啟兩個線程對內(nèi)存到本地的數(shù)據(jù)文件進行合并操作。
6).Sort階段:在對數(shù)據(jù)進行合并的同時,會進行排序操作,由于MapTask階段已經(jīng)對數(shù)據(jù)進行了局部的排序, ReduceTask只需保證Copy的數(shù)據(jù)的最終整體有效性即可。
5.MapReduce的Partition和Combine有什么區(qū)別?
1)combine分為map端和reduce端,作用是把同一個key的鍵值對合并在一起,可以自定義,該類的主要功能是合并相 同的key鍵
2)partition是分割map每個節(jié)點的結果,按照key分別映射給不同的reduce,也是可以自定義的,partition的作用就是把 這些數(shù)據(jù)歸類
6.Hadoop的高可用模式說一下?
7.Zookeeper在Hadoop中的作用?
1)Zookeepe主要用來解決分布式應用中經(jīng)常遇到的數(shù)據(jù)管理問題,如集群管理、統(tǒng)一命名服務、分布式配置管理、 分布式消息隊列、分布式鎖、分布式協(xié)調(diào)等。
2)Zookeeper是一個由多個server組成的集群,一個leader,多個follower,每個server保存一份數(shù)據(jù)副本,全局數(shù)據(jù) 一致、分布式讀寫,更新請求轉(zhuǎn)發(fā),由leader實施。
8.Sqoop的底層原理?
是用來實現(xiàn)結構型數(shù)據(jù)(如關系數(shù)據(jù)庫)和Hadoop之間進行數(shù)據(jù)遷移的工具。它充分利用了MapReduce的并行特 點以批處理的方式加快數(shù)據(jù)的傳輸,同時也借助MapReduce實現(xiàn)了容錯
9.Sqoop是怎么連接的關系型數(shù)據(jù)庫?
sqoop import-all-tables –connect jdbc:mysql://192.168.52.110/hivemetadb --username root -password root
10.Java中抽象類怎么理解?
抽象類不能實例化,繼承的關鍵字仍然是extends,而且繼承過后可以不覆蓋方法,只是使用繼承而來的方法
A:抽象類和抽象方法必須用abstract關鍵字修飾;
B:抽象類中不一定有抽象方法,但是有抽象方法的類必須定義為抽象類;
C:抽象類不能直接實例化;(可以通過子類(重寫方法后的子類)的多態(tài)方式實例化);
1.它不是具體的;
2.抽象類有構造方法,用于子類訪問父類數(shù)據(jù)的初始化;
D:抽象類的子類;
1.如果不想重寫抽象方法,該子類必須是抽象類;
2.成為具體類則必須重寫所有的抽象方法;
11.Hdfs的塊的大小多少能不能改成10M?
不能,假如數(shù)據(jù)塊設置過少,那需要讀取的數(shù)據(jù)塊就比較多,由于數(shù)據(jù)塊在硬盤上非連續(xù)存儲,普通硬盤因為需要 移動磁頭,所以隨機尋址較慢,讀越多的數(shù)據(jù)塊就增大了總的硬盤尋道時間。當硬盤尋道時間比io時間還要長的多 時,那硬盤尋道時間就成了系統(tǒng)的一個瓶頸
12.你的項目中你的Hive倉庫怎么設計的?分幾層?
1 )源數(shù)據(jù)層:此層數(shù)據(jù)無任何更改,不對外開放,為臨時存儲層,是接口數(shù)據(jù)的臨時存儲區(qū)域,為后一步的數(shù)據(jù)處 理做準備。
2) 數(shù)據(jù)倉庫層(DW):DW層的數(shù)據(jù)應該是一致的、準確的、干凈的數(shù)據(jù),即對源系統(tǒng)數(shù)據(jù)進行了清洗(去除了 雜質(zhì)后的數(shù)據(jù)。
2) 數(shù)據(jù)應用層(DA或APP):前端應用直接讀取的數(shù)據(jù)源;根據(jù)報表、專題分析需求而計算生成的數(shù)據(jù)。
13.Hive中的內(nèi)表和外表的區(qū)別?
1)在刪除內(nèi)部表的時候,Hive將會把屬于表的元數(shù)據(jù)和數(shù)據(jù)全部刪掉;
2)而刪除外部表的時候,Hive僅僅刪除外部表的元數(shù)據(jù),數(shù)據(jù)是不會刪除的
14.分區(qū)表和分桶表有什么區(qū)別?
1)分區(qū)就是分文件夾,在表文件夾下多一個文件夾,分區(qū)字段是虛擬的,用于標識文件,分區(qū)字段一定不是表中存 在的字段,否則會便宜報錯;
2)分桶功能默認不開啟,需要手動開啟,分桶個數(shù)自定義,是相對于分區(qū)更細粒度的劃分,是分文件;
15.Hive優(yōu)化假如有數(shù)據(jù)傾斜怎么優(yōu)化?
16.假如你的分析的數(shù)據(jù)有很多小文件,你用SQL語句分析的話會出現(xiàn)什么情況?
17.能說說你項目中的模型表是怎么設計的嗎?
18.Yarn除了在Hadoop中應用,還有什么用到了Yarn?
19.Azkaban的特性?
1、Web用戶界面
2、方便上傳工作流
3、方便設置任務之間的關系
4、調(diào)度工作流
5、認證/授權(權限的工作)
6、能夠殺死并重新啟動工作流
7、模塊化和可插拔的插件機制
8、項目工作區(qū)
9、工作流和任務的日志記錄和審計
20.怎么查看本機內(nèi)存CPU使用情況?
free -m
21.怎么查看目錄下的所有詳細情況?
先使用 ls -a 查看當前目錄下的所有文件;
然后使用 ls -a -l 查看所有文件的詳細信息,每一行是一個文件的所有信息;
再使用 ls -a -l -h 查看所有文件的詳細信息
22.Hbase索引和Hive索引有什么區(qū)別?
1.Hive中的表為純邏輯表,僅僅對表的元數(shù)據(jù)進行定義。Hive沒有物理存儲的功能,它完全依賴HDFS和 MapReduce。HBase表則是物理表,適合存放非結構化的數(shù)據(jù)。
2.Hive是在MapReduce的基礎上對數(shù)據(jù)進行處理;而HBase為列模式,這樣使得對海量數(shù)據(jù)的隨機訪問變得可行。
3.HBase的存儲表存儲密度小,因而用戶可以對行定義成不同的列;而Hive是邏輯表,屬于稠密型,即定義列數(shù),每 一行對列數(shù)都有固定的數(shù)據(jù)。
4.Hive使用Hadoop來分析處理數(shù)據(jù),而Hadoop系統(tǒng)是批處理系統(tǒng),所以數(shù)據(jù)處理存在延時的問題;而HBase是準實 時系統(tǒng),可以實現(xiàn)數(shù)據(jù)的實時查詢。
5.Hive沒有row-level的更新,它適用于大量append-only數(shù)據(jù)集(如日志)的批任務處理。而基于HBase的查詢,支 持和row-level的更新。
6.Hive全面支持SQL,一般可以用來進行基于歷史數(shù)據(jù)的挖掘、分析。而HBase不適用于有join,多級索引,表關系 復雜的應用場景。
23.數(shù)據(jù)量大如何用Order by 全局排序?
24.Kafka,Flume中組件包括哪些?
Kafka組件:
Topic :消息根據(jù)Topic進行歸類
Producer:發(fā)送消息者
Consumer:消息接受者
broker:每個kafka實例(server)
Zookeeper:依賴集群保存meta信息。
Flume組件:
Agent:
Source:
Channel:
Sink:
25.查看內(nèi)存使用情況/磁盤使用情況命令行?
free -m
26.Hdfs的讀寫流程?
27.Flume中Agent各個組件包含什么?
28.Hive數(shù)據(jù)傾斜如何處理?內(nèi)部表,外部表,分區(qū),分桶
29.order by ,sort by ,destribute by,cluster by 區(qū)別?
1)order by
order by會對輸入做全局排序,因此只有一個Reducer(多個Reducer無法保證全局有序),然而只有一個Reducer,會導 致當輸入規(guī)模較大時,消耗較長的計算時間。
2)sort by
sort by不是全局排序,其在數(shù)據(jù)進入reducer前完成排序,sort by只會保證每個reducer的輸出有序,并不保證全局有 序。sort by的數(shù)據(jù)只能保證在同一個reduce中的數(shù)據(jù)可以按指定字段排序。
3)distribute by
distribute by是控制在map端如何拆分數(shù)據(jù)給reduce端的。hive會根據(jù)distribute by后面列,對應reduce的個數(shù)進行分 發(fā),默認是采用hash算法。sort by為每個reduce產(chǎn)生一個排序文件。在有些情況下,你需要控制某個特定行應該到哪個 reducer,這通常是為了進行后續(xù)的聚集操作。distribute by剛好可以做這件事。因此,distribute by經(jīng)常和sort by配合 使 用。
4)cluster by
cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是倒敘排序,不能指定排序規(guī)則為ASC或 者DESC。
30.Sqoop怎么連接數(shù)據(jù)庫?
31.where和having的區(qū)別?
1) “Where” 是一個約束聲明,使用Where來約束來自數(shù)據(jù)庫的數(shù)據(jù),Where是在結果返回之前起作用的,且Where中不能使 用聚合函數(shù)。
2)“Having”是一個過濾聲明,是在查詢返回結果集以后對查詢結果進行的過濾操作,在Having中可以使用聚合函數(shù)。
32.左連接和右連接的區(qū)別?
左連接where只影向右表,右連接where只影響左表
1)Left Join
select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID
左連接后的檢索結果是顯示tbl1的所有數(shù)據(jù)和tbl2中滿足where 條件的數(shù)據(jù)。
2)Right Join
select * from tbl1 Right Join tbl2 where tbl1.ID = tbl2.ID
檢索結果是tbl2的所有數(shù)據(jù)和tbl1中滿足where 條件的數(shù)據(jù)。
33.Hive中如何對大量數(shù)據(jù)進行全局排序?
34.Linux指令
35.Shell,Hive,Hbase,Spark,Sqoop
36.機架感應機制
項目面試題
1.大概介紹一下項目;
2.hbase表你們是怎么存數(shù)據(jù)的?一天數(shù)據(jù)量是多少?這么多數(shù)據(jù)你們都存hbase里嗎?一開始就是個文件,hbase是表結構,那你是怎么去獲取數(shù)據(jù)然后給存成表結構的?
3.假如現(xiàn)在我要查詢每個月的每個片區(qū)里訂單成交量最高的那個司機ID,你怎么實現(xiàn)?
4.hive怎么讀取數(shù)據(jù)的?我要只存里邊我需要的數(shù)據(jù),你給我想下怎么優(yōu)化?
5.你都用過哪些ETL工具?怎么用的?就像flume是怎么獲取數(shù)據(jù)的,你怎么配置的?那kafka怎么讀取數(shù)據(jù)的?hive是直接從kafka里獲取數(shù)據(jù)嗎?
6.你建過外表嗎?怎么建的?為什么要建外表?
7.你會寫shell嗎?寫過哪些?
8.你應該也經(jīng)常用linux命令吧,都用過哪些?我現(xiàn)在要查所有后綴是.txt的文件名,怎么查?grep用過嗎?
9.我現(xiàn)在不想查司機,我想查訂單,怎么去設計hbase表?
相關文章
java方向大數(shù)據(jù)面試題與參考答案整理匯總
這篇文章主要介紹了java方向大數(shù)據(jù)面試題與參考答案,整理總結了java大數(shù)據(jù)方向常見面試題、知識點與參考答案,需要的朋友可以參考下2020-01-16京東大數(shù)據(jù)方向Java實習面試經(jīng)歷簡述【一面、二面】
這篇文章主要介紹了京東大數(shù)據(jù)方向Java實習面試經(jīng)歷,簡單描述了京東大數(shù)據(jù)方向java面試一面與二面過程中所遇到的各種問題,需要的朋友可以參考下2019-12-10- 這篇文章主要介紹了大數(shù)據(jù)爬蟲實習招聘面試題,總結分析了大數(shù)據(jù)爬蟲崗位招聘中的面試題及參考答案,需要的朋友可以參考下2019-11-29
阿里大數(shù)據(jù)工程師面試流程與經(jīng)驗總結
這篇文章主要介紹了阿里大數(shù)據(jù)工程師面試流程與經(jīng)驗,總結分析了阿里大數(shù)據(jù)工程師三輪面試的經(jīng)歷與相關問題注意事項,需要的朋友可以參考下2019-11-15- 這篇文章主要介紹了百度大數(shù)據(jù)實習生職位電話面試,總結分析了百度大數(shù)據(jù)實習生職位招聘電話面試過程中所遇到的各種問題與面試經(jīng)驗,需要的朋友可以參考下2019-11-07
大數(shù)據(jù)spark經(jīng)典面試題目與參考答案總結
這篇文章主要介紹了大數(shù)據(jù)spark經(jīng)典面試題目,整理總結了大數(shù)據(jù)spark面試中遇到的比較經(jīng)典的簡答題與選擇題,涉及spark概念、原理、配置、使用等相關知識點,需要的朋友可以參2019-10-24- 這篇文章主要介紹了大數(shù)據(jù)相關常見面試題與答案,總結分析了大數(shù)據(jù)相關的概念、技術、原理,需要的朋友可以參考下2019-10-21
- 這篇文章主要介紹了大數(shù)據(jù)spark精華面試題與參考答案,整理總結了大數(shù)據(jù)spark面試中經(jīng)常遇到的各類問題、概念與知識點,需要的朋友可以參考下2019-10-15
- 這篇文章主要介紹了大數(shù)據(jù)工程師面試題與參考答案,總結整理了大數(shù)據(jù)相關的基本概念、原理、知識點與注意事項,需要的朋友可以參考下2019-09-16
- 這篇文章主要介紹了大數(shù)據(jù)基礎面試題考點與知識點,總結整理了大數(shù)據(jù)常見的各種知識點、難點、考點以及相關注意事項,需要的朋友可以參考下2019-09-09