1.1 描述一下checkpoint的流程?
Checkpoint其實就是全部任務的狀態,在某個時間點的一份拷貝(一份快照),這個時間點應該是全部任務都剛好處理完一個相同的輸入數據的時候。
1.2 描述一下兩階段提交?
對於每一個checkpoint,sink任務會啓動一個事務,並將接下來全部接收的數據添加到事務裏,而後將這些數據(流式的)寫入外部sink系統,但不提交他們 -- 這時只是預提交(一個個寫入),當它收到checkpoint完成的通知時,它才正式提交事務,實現結果的真正寫入(一次性確認),這種方式真正實現了exactly-once,它須要一個提供事務支持的外部sink系統,Flink提供了TwoPhaseCommitSinkFunction接口。
兩階段提交保證了flink段到sink段的精確一次語義(exactly-once)
1.3 描述一下Spark的DAG原理?
DAG(Directed Acyclic Graph)有向無環圖,Spark中使用DAG對RDD的關係進行建模,描述了RDD的依賴關係,這種關係也被稱之爲lineage"血統",RDD的依賴關係使用Dependency維護,Dependency分爲寬依賴(一個父RDD被多個子RDD分區使用,有shuffle)和窄依賴(一個父RDD只被一個子RDD分區使用),DAG在Spark中的對應的實現爲DAGScheduler。
flink使用的是一個Dataflow圖。
1.4 簡述一下spark和flink的區別
技術理念不一樣:spark使用微批來模擬流的計算,而flink是基於事件驅動的,也就是有狀態的流處理應用程序,是真正的流式計算。
1.5 flink如何處理延遲數據?
在處理事件時間時可使用水印機制處理延遲數據,水印(watermark)就是一個時間戳,Flink能夠給數據流添加水印,容許必定延遲的時間戳。
1.6 flink容錯機制如何保證?
checkpoint機制
1.7 flink支持哪些時間語義?
(1)處理時間(Processing Time):時間被處理時機器的系統時間。
(2)事件時間(Event Time):事件自身的時間。
(3)攝入時間(Ingestion Time):事件進入Flink的時間。
1.8 spark和flink的action操做有哪些?
Spark:
(1)獲取元素
collect(), first(), take(n), takeSample(withReplacement, num, [seed]), takeOrdered(n, [ordering])
(2)計數元素
count(), countByKey()
(3)迭代元素
reduce(func), foreach(func)
(4)保存元素
saveAsTextFile(path), saveAsSequenceFile(path), saveAsObjectFile(path)
Flink:
彷佛沒有action操做這概念,必定要說就是execute()執行方法。flink程序都是經過延遲計算(lazily execute)的方式執行,只有在調用execute()方法時,系統纔會觸發程序執行。
1.9 hadoop HA高可用?
hadoop高可用有ActiveNameNode和StandbyNameNode,使用zookeeper服務進行主備NN的切換。namenode主要是給子節點分配任務。
1.10 spark調優?
能夠經過運行時參數進行Executor個數、內存、核數等設置。
1.11 描述一下mapreduce計算模型?
1.12 flink checkpoint和savepoint的區別?
保存點和檢查點的工做原理一致,保存點是手動觸發的,檢查點是自動觸發的。
1.13簡述一下HDFS文件讀寫過程
1.14對HDP和CDH的瞭解
二者都是Hadoop的第三方發行版,Hortonworks版本(Hortonworks Data Platform,簡稱「HDP」),Cloudera版本(Cloudera Distribution Hadoop,簡稱「CDH」),提供了部署、安裝、配置工具,大大提升了集羣部署的效率,HDP使用開源工具Ambari安裝,CDH使用Cloudera Manager工具安裝。java
2.1 對jvm的理解?
在Java SE 7版中能夠將jvm分紅5個區域,分別是
(1)全部線程共享的數據區:方法區(編譯器編譯後的代碼等數據),堆(對象實例和數組)
(2)線程隔離的數據區:虛擬機棧,本地方法棧,程序計數器
Spark中的RDD其實是Java對象,因此它被存放在JVM中的堆中,由於堆中存放的是對象與數組實例,因此垃圾回收主要在堆中進行(也有可能在方法區中)
堆和方法區是全部線程共享的資源,其中堆是進程中最大的一塊內存,主要用於存放新建立的對象 (全部對象都在這裏分配內存),方法區主要用於存放已被加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。
2.2 反射能夠作到什麼?
JAVA反射機制是在運行狀態中,對於任意一個類,都可以知道這個類的全部屬性和方法;對於任意一個對象,都可以調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱爲java語言的反射機制。
2.3 多態的理解?
java多態存在的三個必要條件(1)繼承(2)重寫(3)父類引用指向子類對象node
3.1 Trait特徵的理解?
特徵至關於java的接口,與接口不一樣的是它能夠定義屬性和方法的實現(強大),經過trait能夠實現scala的多重繼承。子類繼承特徵能夠實現未被實現的方法。因此其實 Scala Trait(特徵)更像 Java 的抽象類。
3.2 scala和java的區別?
scala不支持接口,採用trait特徵;scala提供伴生對象來實現單例;scala支持以函數爲參數的方法Java不支持linux
4.1 描述一下動態規劃的基本思想?
動態規劃和分治法相似,都是構造子問題的解來求解原問題,不一樣的是動態規劃是解決重疊子問題的,將子問題求解結果記錄在表格中,以空間換取時間。
其次是最優子結構,最優解確定是有最優的子解轉移推導而來,子解一定也是子問題的最優解。
最後是無後效性,也就是求出來的子問題並不會由於後面求出來的改變。
典型動態規劃問題:揹包問題:01揹包問題,徹底揹包問題。
4.2 理解哪些數據結構?簡述一下鏈表、紅黑樹等數據結構
隊列:單隊列、循環隊列;集合:HashSet(哈希表結構)、TreeSet(紅黑樹結構);鏈表:單鏈表、雙鏈表、循環鏈表;樹:二叉樹、徹底二叉樹、堆、二叉查找樹、平衡二叉樹算法
5.1 大數據經常使用組件和功能?
hdfs是分佈式存儲系統;yarn是分佈式資源管理系統;mapreduce是hadoop的計算框架;zookeeper是分佈式協調服務;hbase是hadoop下的分佈式數據庫;hive是分佈式數據倉庫,是一個數據分析工具,底層使用mapreduce;Sqoop將傳統數據導入hdfs或hbase的一個工具;spark基於內存的分佈式處理框架;flink是分佈式流處理框架;kafka是一個分不熟流處理平臺;Avro是Hadoop的一個數據序列化系統;
5.2 深拷貝和淺拷貝的區別?
深拷貝和淺拷貝最根本的區別在因而否真正獲取一個對象的複製實體,而不是引用。深拷貝(實體)淺拷貝(引用)
5.3 隊列模型和kafka模型的區別?
隊列模型一條消息只能被一個消費者使用,kafka使用發佈訂閱模型,採用topic發佈消息給全部訂閱者,也就是能夠被多個消費者使用。
5.4 簡述一下序列化的做用
序列化(Serialization)是將數據結構或對象狀態轉換爲能夠存儲(例如,在文件或存儲器緩衝區中)或傳輸(例如,經過網絡鏈接)的格式的過程, 反序列化(Deserialization)則是從一系列字節中提取數據結構的相反操做.數據庫
6.1 linux進行大數據故障的排錯命令你用到哪些?
查看端口占用狀況:(1)lsof -i:端口號(2)netstat -tunlp |grep 端口號
查看內存使用狀況:(1)實時使用狀況"top"(2)free -m數組
7.1 死鎖產生的四個必要條件
(1)互斥(2)不可剝奪(3)部分分配(4)循環等待網絡
持續更新。。。數據結構