1. 程式人生 > >2018年大資料面試題總結

2018年大資料面試題總結

目前面試了多家大資料開發工程師,成長了很多,也知道了很多知識,下面和大家分享一下我遇到的面試題和答案。

1.kafka叢集的規模,消費速度是多少

答:一般中小型公司是10個節點,每秒20M左右。

2.hdfs上傳檔案的流程。

答:這裡描述的 是一個256M的檔案上傳過程

① 由客戶端 向 NameNode節點節點 發出請求

②NameNode 向Client返回可以可以存資料的 DataNode 這裡遵循機架感應原則

③客戶端 首先 根據返回的資訊 先將 檔案分塊(Hadoop2.X版本 每一個block為 128M 而之前的版本為 64M

④然後通過那麼Node返回的DataNode資訊 直接傳送給DataNode 並且是 流式寫入 同時 會複製到其他兩臺機器

⑤dataNode 向 Client通訊 表示已經傳完 資料塊 同時向NameNode報告 ⑥依照上面(④到⑤)的原理將 所有的資料塊都上傳結束 向 NameNode 報告 表明 已經傳完所有的資料塊 。

3.講述一下mapreduce的流程(shuffle的sort,partitions,group)

首先是 Mapreduce經過SplitInput 輸入分片 決定map的個數在用Record記錄 key value。然後分為以下三個流程:

Map:

輸入 key(long型別偏移量) value(Text一行字串)

輸出 key value

Shuffle:、

合併(merge)map輸出時先輸出到環形記憶體,當記憶體使用率達到60%時開始溢位寫入到檔案,溢位檔案都是小檔案,所以就要合併他們,在這個構成中就會排序,根據key值比較排序

排序(sort)如果你自定義了key的資料型別要求你的類一定是WriteableCompartor的子類,不想繼承WriteableCompartor,至少實現Writeable,這時你就必須在job上設定排序比較器job.setSortCmpartorClass(MyCompartor.class);而MyCompartor.class必須繼承RawCompartor的類或子類

分割槽(partition)會根據map輸出的結果分成幾個檔案為reduce準備,有幾個reducetask就分成幾個檔案,在job上設定分割槽器job.setPartitionerClass(MyPartition.class)Myrtition.class要繼承Partitioner這個類

分組(group)分割槽時會呼叫分組器,把同一分割槽中的相同key的資料對應的value製作成一個iterable,並且會在sort。在job上設定分組器。Job.setGroupCompartorClass(MyGroup.class)MyGroup.class必須繼承RawCompartor的類跟子類

上面的結果儲存到本地檔案中,而不是hdfs上

上面只要有完成結果,reduce就開始複製上面的結果,通過http方式

Reduce

輸入key時map輸出時的key value是分組器分的iterable

輸出 key value

輸出結果儲存在hdfs上而不是本地檔案中

4.瞭解zookeeper嗎?介紹一下它,它的選舉機制和叢集的搭建。

答:那當然是熟悉啦,ZooKeeper 是一個開源的分散式協調服務,是 Google Chubby 的開源實現。分散式應用程式可以基於 ZooKeeper 實現諸如資料釋出/訂閱、負載均衡、命名服務、分散式協調/通知、叢集管理、Master 選舉、分散式鎖和分散式佇列等功能。我們公司使用的flume叢集,Kafka叢集等等,都離不開ZooKeeper呀。每個節點上我們都要搭建ZooKeeper服務。首先我們要在每臺pc上配置zookeeper環境變數,在cd到zookeeper下的conf資料夾下在zoo_simjle.cfg檔案中新增datadir路徑,再到zookeeper下新建data資料夾,建立myid,在檔案裡新增上server的ip地址。在啟動zkserver.sh start便ok了。

5.spark streming在實時處理時會發生什麼故障,如何停止,解決

和Kafka整合時訊息無序:

修改Kafka的ack引數,當ack=1時,master確認收到訊息就算投遞成功。ack=0時,不需要收到訊息便算成功,高效不準確。sck=all,master和server都要受到訊息才算成功,準確不高效。

StreamingContext.stop會把關聯的SparkContext物件也停止,如果不想把SparkContext物件也停止的話可以把StremingContext.stop的可選引數stopSparkContext設為flase。一個SparkContext物件可以和多個streamingcontext物件關聯。只要對前一個stremingcontext.stop(stopsparkcontext=false),然後再建立新的stremingcontext物件就可以了。

6.mysql,mongodb,rides的埠。

面試資料庫介紹的再好,不知到預設埠,也證明你沒有經驗。mysql:3306,mongdb:27017,rides:6379。

7.說一下你對hadoop生態圈的認識。

沒有固定答案,主要從hdfs底層儲存,hbase資料庫,hive資料倉庫,flume收集,Kafka快取,zookeeper分散式協調服務,spark大資料分析,sqoop資料互轉來說。

8.yarn的理解:

YARN是Hadoop2.0版本引進的資源管理系統,直接從MR1演化而來。
核心思想:將MR1中的JobTracker的資源管理和作業排程兩個功能分開,分別由ResourceManager和ApplicationMaster程序實現。

ResourceManager:負責整個叢集的資源管理和排程 ApplicationMaster:負責應用程式相關事務,比如任務排程、任務監控和容錯等。 YARN的出現,使得多個計算框架可以執行在同一個叢集之中。 1. 每一個應用程式對應一個ApplicationMaster。 2. 目前可以支援多種計算框架執行在YARN上面,比如MapReduce、storm、Spark、Flink。

9.資料來源的方式:

1.webServer :使用者訪問我們的網站,對日誌進行收集,記錄在反向的日誌檔案裡 tomcat下logs

2js程式碼嵌入前端頁面(埋點):js的sdk會獲取使用者行為,document會得到元素呼叫function,通過ngix叢集進行日誌收集。

10.我們公司是做啥啥啥的,請你用大資料分析,請你想說就說啥。

這個是靠查你的思維,沒法有答案。

11.聊聊你的專案。

這是60%的時間都在這,你一定要把自己的專案瞭解搞清楚,資料的來源,資料的收集,資料的分析,資料的儲存,資料的展示。

主要解決了啥業務。遇到了啥問題,資料的格式,有哪些優化,等等等