1. 程式人生 > >大資料實時面試題--未完整版

大資料實時面試題--未完整版

flume-->kafka-->spark-->hdfs-->sqoop

1、flume與kafka如何整合?

agent:   source:exec , spooldir,  avro
             channel :memory
             sink:org.apache.flume.sink.kafka.KafkaSink

2 、kafka與spark如何整合?

kafkaStreaming與kafka的整合,Spark提供了一個工具類KafkaUtils,工具包裡面提供了2中整合方案

         (1):KafkaUtils.createDstream:這種方案使用了receiver接收器來接收資料,所有receiver接收到的資料預設儲存在spark                          的executor中,然後使用sparkStreaming處理這些資料,預設會丟失資料,可以開啟wal日誌,將接收到的資料儲存

                       在分散式檔案系統中,但是這種方案因為涉及zk管理偏移量,如果資料寫入spark但是zk來不及修改偏移量的話就會                         造成重複消費的問題。

           (2):  KafkaUtils.createDirectStream:它定期從kafka的topic下對應的partition中查詢最新偏移量,在根據偏移量在batch裡                           面處理資料,沒有總zk管理偏移量。

3、 flume與spark如何整合?

spark提供了一個jar包,spark-streaming-flume.jar

           (1)poll方式(推薦使用):flume將收集到的資料傳送到整合包的sparksink中,並指定下沉的伺服器ip和埠號,由spark                      用這個伺服器ip和埠號進行接收處理

           (2)push方式:由flume將訊息直接推動到spark服務所在的機器上,spark接收本機器上的訊息並消費。

--kafka篇

1、kafka是什麼?

訊息佇列,主要作用是解耦,非同步,並行,傳統訊息佇列(MQ)是基於釋出和訂閱模式,而kafka是基於推送和拉去

2、Kafka有什麼元件,作用分別是什麼?

--product:生產者,往topic中生產資料

--consumer:消費者,從topic中消費資料

--broker:kafka的伺服器

--zookeeper:kafka依賴zk儲存一些topic以及partition資訊

--topic:一類訊息的抽象集合,一個topic下面由多個partition組成

--segement:包含兩個檔案,.log檔案 .index檔案

--.log檔案:記錄資料

--.index檔案:記錄log檔案索引

--offset:訊息偏移量

3、如何建立一個topic 

bin/kafka-topic.sh  --create  --topic XX  --分割槽(數量)  --備份(幾個)  --zookeeper叢集地址

理解一下分割槽:就是將topic中的資料劈成幾份,加入topic中有2條資料,分割槽之後每個分割槽只有一條資料

理解一下備份:一個分割槽的資料萬一丟失,資料就無效了,所以將資料備份在不同的伺服器上,實現高可用。

4、kafka中讀出來的資料為什麼是無序的?

1個topic有p1和p2兩個分割槽,消費的時候,消費者會輪詢讀取p1一些,再讀取p2一些,這樣就造成讀出來的兩個檔案是交錯的。

5、kafka如何做到資料讀寫順序一致性的?

 如果是多個分割槽的話,分割槽內部是有序的,整體是無序的,如果是一個分割槽的話整體就是有序的。

6、kafka為什麼快? Kafka為什麼能做大吞吐量?

      (1)kafka資料是順序讀寫
      (2)kafka是頁快取,先將資料寫入記憶體,再開8個執行緒將資料寫入硬碟。

7、  kafuka的分割槽策略有幾種分別是什麼?

四種(1)給定分割槽號,按分割槽號來,(2)沒有分割槽號,給定key值,按照key計算hash值確定其中一個機器進行分割槽,(3)既沒有分割槽號,也沒有key值,輪詢分割槽 (4)自定義分割槽,繼承partitioner

8、kafka消費者負載均衡策略?

   --如果執行緒比分割槽數量多,有空閒執行緒
   --如果執行緒與分割槽數相等,剛好一個執行緒消費一個分割槽
   --如果執行緒數比分割槽數少,有一些執行緒將要在多個分割槽消費資料

9、 kafka檔案儲存的基本結構?

     同一個topic下有多個不同的partition(分割槽),每個partition為一個目錄,partition的命名規則為topic名稱+有序序號,第一個partition序號從0開始,序號最大值為partition數量-1。一個partition由多個Segment file組成:每個segment由.log 和.index檔案 組成。kafka解決查詢效率的手段是檔案分段,比如有100條Message,它們的offset是從0到99。假設將資料檔案分成5段,第一段為0-19,第二段為20-39,以此類推。所以segment就是每個partition分段的結果。

10、kafka中的消費者如何消費資料?

同一時刻,一個partition中的訊息只能會被group中的一個consumer的一個執行緒消費,消費後會修改offeset偏移量。

11、kafka如何做到資料的不丟失和不重複?

 (1)product層ACK機制,只有跟broken中的leader和follow都確認後,才認為生產者上傳成功

 (2)broker層副本機制

   (3)   consumer層:offset偏移量,確保不重複讀取

12、kafka宕機之後如何保證資料的一致性?

kafka叢集受zookeeper管理,所有的kafka broker都去zk註冊節點,但是隻有1個會註冊成功,所以這個成功註冊的kafka broker就是kafka叢集中的controller(老大),其他broker就是follow這個註冊的過程叫broker在zk上註冊watch。如果此時kafka叢集的controller宕機了,這時在zk上的註冊點就消失了,此時叢集中其他broker又會去zk上註冊,zk會選舉一個做為新的controller管理
 叢集,此時新的controller就會在zk上讀取宕機的哪臺機器上所有partition(分割槽)資訊。

--spark篇

1、spark為什麼比mapreduce快?

(1)spark 將job階段的輸出結果直接放記憶體中了,減少了大量IO操作,利於迭代計算

(2)mapreduce中每一個task是以程序的方式執行,而在spark中將task以執行緒的方式執行

2、spark有哪些元件,作用?

--Driver :它執行main方法,生成sparkContext物件,是執行spark的入口

--Application:計算任務的應用程式,裡面包括執行的程式碼和執行所需要的資源(cpu,記憶體等)

--Cluster Manager:獲取外部資源的服務

      --standAlone:spark自帶的叢集模式,由master分配資源

      --yarn:resouceManager負責分配任務

      --mesos:Apache提供的

--master:spark叢集中的老大,負責資源分配

--worker:主要負責執行spark任務的

--executor:一個進行,裡面可以執行多個task

--Task:執行緒,每一個Task預設對應hdfs上一個block塊128M

3、說一下spark的底層原理?

RDD是spark的資料抽象,RDD叫彈性分散式資料集,他具有幾個特徵

   --一個RDD裡面是一個分割槽列表

   --一個RDD函式作用於分割槽列表的所有資料

  --RDD與RDD之間存在依賴關係

4、什麼是DAG?

有向無環圖,RDD經過一些列轉換就形成DAG,,根據RDD之間的依賴關係,根據寬依賴,將RDD分配到不同的Stage裡面,寬依賴只有父RDD處理完才能處理子依賴,所以寬依賴是劃分stage的依據

5、spark的是如何任務排程的?