目前面試了多家大數據開發工程師,成長了不少,也知道了不少知識,下面和你們分享一下我遇到的面試題和答案。前端
1.kafka集羣的規模,消費速度是多少。mysql
答:通常中小型公司是10個節點,每秒20M左右。web
2.hdfs上傳文件的流程。面試
答:這裏描述的 是一個256M的文件上傳過程sql
① 由客戶端 向 NameNode節點節點 發出請求mongodb
②NameNode 向Client返回能夠能夠存數據的 DataNode 這裏遵循機架感應原則數據庫
③客戶端 首先 根據返回的信息 先將 文件分塊(Hadoop2.X版本 每個block爲 128M 而以前的版本爲 64M緩存
④而後經過那麼Node返回的DataNode信息 直接發送給DataNode 而且是 流式寫入 同時 會複製到其餘兩臺機器tomcat
⑤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%的時間都在這,你必定要把本身的項目瞭解搞清楚,數據的來源,數據的收集,數據的分析,數據的儲存,數據的展現。
主要解決了啥業務。遇到了啥問題,數據的格式,有哪些優化,等等等
祝你們都能拿到一份好offer。