Hive:
分區表有哪幾類
Hive中追加導入數據的4種方式是什么?
Hive中到處數據有幾種方式?如何導出數據
Canal
Canal通過配置就可以把數據傳到Kafka,如何配置?不用寫代碼
Canal對了數據怎么辦
數據庫
表的權限管理
數倉
日活、周活、月活比例
Java & Scala
JVM運行時數據區
JVM的GC機制
JVM調優
Scala于Java語言相比較,有什么優勢?
Spark
Spark的Shuffle于MR Shuffle有何區別
Spark程序的定時開啟與關閉
實時
SparkStreaming
Flink
watermark
狀態一致性
狀態計算
事務寫入(Transactional Writes)
事務(Transaction)
- 應用程序中一系列嚴密的操作,所有操作必須成功完成;否則在每個操作中所作的所有更改都會被撤消
- 具有原子性:一個事務中的一系列的操作要么全部成功,要么一個都不做
實現思想
構建的事務對應著 checkpoint,等到 checkpoint 真正完成的時候,才把所有對應的結果寫入 sink 系統中
面試題:
Atlas
Atlas是什么?
Apache Atlas為組織提供開放式元數據管理和治理功能,用以構建其數據資產目錄,對這些資產進行分類和管理,并為數據分析師和數據治理團隊,提供圍繞這些數據資產的協作功能。
架構原理圖
Atlas的工作流程?哪一塊都提供了什么功能?
管理的元數據類型有哪些?
當需求不能被滿足時:官網提供源代碼,支持二次開發(提供REST AP,所有功能都會向用戶提供)
安裝及使用
安裝環境準備:
JDK8、Hadoop、Zookeeper、Kafka、HBase、Solr、Hive、
Azkaban(進行工作調度后,查看表、字段之間的血緣依賴關系)、
Atlas0.8.4
在/opt/module/atlas/路徑,將Hive元數據導入到Atlas
Oozie介紹
Oozie工作流是放置在控制依賴DAG(有向無環圖 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Reduce作業、Pig作業等),其中指定了動作執行的順序。我們會使用hPDL(一種XML流程定義語言)來描述這個圖。
hPDL是一種很簡潔的語言,只會使用少數流程控制和動作節點。控制節點會定義執行的流程,并包含工作流的起點和終點(start、end和fail節點)以及控制工作流執行路徑的機制(decision、fork和join節點)。動作節點是一些機制,通過它們工作流會觸發執行計算或者處理
Oozie和Azkaban的區別:
兩者在功能方面大致相同,只是Oozie底層在提交Hadoop Spark作業是通過org.apache.hadoop的封裝好的接口進行提交,而Azkaban可以直接操作shell語句。在安全性上可能Oozie會比較好。
工作流定義:Oozie是通過xml定義的而Azkaban為properties來定義。
部署過程:Oozie的部署相對困難些,同時它是從Yarn上拉任務日志。
Azkaban中如果有任務出現失敗,只要進程有效執行,那么任務就算執行成功,這是BUG,但是Oozie能有效的檢測任務的成功與失敗。
操作工作流:Azkaban使用Web操作。Oozie支持Web,RestApi,Java API操作。
權限控制:Oozie基本無權限控制,Azkaban有較完善的權限控制,供用戶對工作流讀寫執行操作。
Oozie的action主要運行在hadoop中而Azkaban的actions運行在Azkaban的服務器中。
記錄workflow的狀態:Azkaban將正在執行的workflow狀態保存在內存中,Oozie將其保存在Mysql中。
出現失敗的情況:Azkaban會丟失所有的工作流,但是Oozie可以在繼續失敗的工作流運行
調度工具性能對比:
Apache Oozie,其配置工作流的過程是編寫大量的XML配置,而且代碼復雜度比較高,不易于二次開發。ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。
如果可以不在意某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。
Azkaban和Oozie的具體調度
Azkaban的工作流的創建特別方便,直接通過web界面創建工程,然后提交任務。(創建job的的文件必須是以.job的文件,并且上傳的文件是以zip壓縮包的形式進行上傳)。
在hue當中操作ooize的操作:
Hue是一個可快速開發和調試Hadoop生態系統各種應用的一個基于瀏覽器的圖形化用戶接口。
Hue可實現對oozie任務的開發,監控,和工作流協調調度 。使的oozie的操作變得更加的簡單快捷。
參考鏈接:
https://www.cnblogs.com/gxgd/p/8671271.html ----主要介紹了兩者的區別
https://blog.csdn.net/bingdianone/article/details/87908146#Azkaban_267 --詳細的介紹了常見配置使用
Azkaban是由Linkedin開源的一個批量工作流任務調度器。用于在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關系,并提供一個易于使用的web用戶界面維護和跟蹤你的工作流。 它有如下功能特點: 1.Web用戶界面 2.方便上傳工作流 3.方便設置任務之間的關系 4.調度工作流 5.認證/授權(權限的工作) 6.能夠殺死并重新啟動工作流 7.模塊化和可插拔的插件機制 8.項目工作區 9.工作流和任務的日志記錄和審計
Azkaban介紹
調度工具介紹:(azkaban 和oozie)
各任務單元之間存在時間先后及前后依賴關系。為了很好地組織起這樣的復雜執行計劃,需要一個工作流調度系統來調度執行
shell腳本程序
java程序
mapreduce程序
hive腳本等
工作流調度:一個完整的數據分析系統通常都是由大量任務單元組成:
工作流調度工具:(azkaban 和oozie的對比)
實際運行: 實際上,最優的解決方案應該是最符合實際設計需求的方案,在時間應用中,可能有足夠大的內存,那么直接將數據扔到內存中一次性處理即可,也可能機器有多個核,這樣可以采用多線程處理整個數據集。
第五種方法采用最小堆。首先讀入前10000個數來創建大小為10000的最小堆,建堆的時間復雜度為O(mlogm)(m為數組的大小即為10000),然后遍歷后續的數字,并于堆頂(最小)數字進行比較。如果比最小的數小,則繼續讀取后續數字;如果比堆頂數字大,則替換堆頂元素并重新調整堆為最小堆。整個過程直至1億個數全部遍歷完為止。然后按照中序遍歷的方式輸出當前堆中的所有10000個數字。該算法的時間復雜度為O(nmlogm),空間復雜度是10000(常數)。
第四種方法是Hash法。如果這1億個書里面有很多重復的數,先通過Hash法,把這1億個數字去重復,這樣如果重復率很高的話,會減少很大的內存用量,從而縮小運算空間,然后通過分治法或最小堆法查找最大的10000個數。
第三種方法是分治法,將1億個數據分成100份,每份100萬個數據,找到每份數據中最大的10000個,最后在剩下的10010000個數據里面找出最大的10000個。如果100萬數據選擇足夠理想,那么可以過濾掉1億數據里面99%的數據。100萬個數據里面查找最大的10000個數據的方法如下:用快速排序的方法,將數據分為2堆,如果大的那堆個數N大于10000個,繼續對大堆快速排序一次分成2堆,如果大的那堆個數N大于10000個,繼續對大堆快速排序一次分成2堆,如果大堆個數N小于10000個,就在小的那堆里面快速排序一次,找第10000-n大的數字;遞歸以上過程,就可以找到第1w大的數。參考上面的找出第1w大數字,就可以類似的方法找到前10000大數字了。此種方法需要每次的內存空間為10^64=4MB,一共需要101次這樣的比較。
第二種方法為局部淘汰法,該方法與排序方法類似,用一個容器保存前10000個數,然后將剩余的所有數字——與容器內的最小數字相比,如果所有后續的元素都比容器內的10000個數還小,那么容器內這個10000個數就是最大10000個數。如果某一后續元素比容器內最小數字大,則刪掉容器內最小元素,并將該元素插入容器,最后遍歷完這1億個數,得到的結果容器中保存的數即為最終結果了。此時的時間復雜度為O(n+m^2),其中m為容器的大小,即10000。
最容易想到的方法是將數據全部排序,然后在排序后的集合中進行查找,最快的排序算法的時間復雜度一般為O(nlogn),如快速排序。但是在32位的機器上,每個float類型占4個字節,1億個浮點數就要占用400MB的存儲空間,對于一些可用內存小于400M的計算機而言,很顯然是不能一次將全部數據讀入內存進行排序的。其實即使內存能夠滿足要求(我機器內存都是8GB),該方法也并不高效,因為題目的目的是尋找出最大的10000個數即可,而排序卻是將所有的元素都排序了,做了很多的無用功。
有1億個浮點數,如果找出期中最大的10000個?
針對top K類問題,通常比較好的方案是分治+Trie樹/hash+小頂堆。即先將數據集按照Hash方法分解成多個小數據集,然后使用Trie樹活著Hash統計每個小數據集中的query詞頻,之后用小頂堆求出每個數據集中出現頻率最高的前K個數,最后在所有top K中求出最終的top K。
在大規模數據處理中,經常會遇到的一類問題:在海量數據中找出出現頻率最好的前k個數,或者從海量數據中找出最大的前k個數,這類問題通常被稱為top K問題。例如,在搜索引擎中,統計搜索最熱門的10個查詢詞;在歌曲庫中統計下載最高的前10首歌等。
1億條數據,10M內存,求TopN
怎么解決
Kafka中
Spark中
Hive中
數據傾斜
經典場景問題
如何配置定時的工作流調度任務和郵件通知
使用過什么ETL清洗工具?
集群
Web界面的端口號:21000