Hive:
分區(qū)表有哪幾類
Hive中追加導入數(shù)據(jù)的4種方式是什么卿捎?
Hive中到處數(shù)據(jù)有幾種方式?如何導出數(shù)據(jù)
Canal
Canal通過配置就可以把數(shù)據(jù)傳到Kafka讶舰,如何配置?不用寫代碼
Canal對了數(shù)據(jù)怎么辦
數(shù)據(jù)庫
表的權限管理
數(shù)倉
日活、周活腊瑟、月活比例
Java & Scala
JVM運行時數(shù)據(jù)區(qū)
JVM的GC機制
JVM調優(yōu)
Scala于Java語言相比較,有什么優(yōu)勢块蚌?
Spark
Spark的Shuffle于MR Shuffle有何區(qū)別
Spark程序的定時開啟與關閉
實時
SparkStreaming
Flink
watermark
狀態(tài)一致性
狀態(tài)計算
事務寫入(Transactional Writes)
事務(Transaction)
- 應用程序中一系列嚴密的操作闰非,所有操作必須成功完成;否則在每個操作中所作的所有更改都會被撤消
- 具有原子性:一個事務中的一系列的操作要么全部成功峭范,要么一個都不做
實現(xiàn)思想
構建的事務對應著 checkpoint财松,等到 checkpoint 真正完成的時候,才把所有對應的結果寫入 sink 系統(tǒng)中
面試題:
1 Flink-Kafka端對端的狀態(tài)一致性問題,如何保持
Atlas
Atlas是什么辆毡?
Apache Atlas為組織提供開放式元數(shù)據(jù)管理和治理功能菜秦,用以構建其數(shù)據(jù)資產(chǎn)目錄,對這些資產(chǎn)進行分類和管理舶掖,并為數(shù)據(jù)分析師和數(shù)據(jù)治理團隊球昨,提供圍繞這些數(shù)據(jù)資產(chǎn)的協(xié)作功能。
架構原理圖
Atlas的工作流程眨攘?哪一塊都提供了什么功能主慰?
管理的元數(shù)據(jù)類型有哪些?
當需求不能被滿足時:官網(wǎng)提供源代碼鲫售,支持二次開發(fā)(提供REST AP共螺,所有功能都會向用戶提供)
安裝及使用
安裝環(huán)境準備:
JDK8、Hadoop情竹、Zookeeper藐不、Kafka、HBase秦效、Solr佳吞、Hive、
Azkaban(進行工作調度后棉安,查看表底扳、字段之間的血緣依賴關系)、
Atlas0.8.4
在/opt/module/atlas/路徑贡耽,將Hive元數(shù)據(jù)導入到Atlas
Oozie介紹
Oozie工作流是放置在控制依賴DAG(有向無環(huán)圖 Direct Acyclic Graph)中的一組動作(例如衷模,Hadoop的Map/Reduce作業(yè)、Pig作業(yè)等)蒲赂,其中指定了動作執(zhí)行的順序阱冶。我們會使用hPDL(一種XML流程定義語言)來描述這個圖。
hPDL是一種很簡潔的語言滥嘴,只會使用少數(shù)流程控制和動作節(jié)點木蹬。控制節(jié)點會定義執(zhí)行的流程若皱,并包含工作流的起點和終點(start镊叁、end和fail節(jié)點)以及控制工作流執(zhí)行路徑的機制(decision、fork和join節(jié)點)走触。動作節(jié)點是一些機制晦譬,通過它們工作流會觸發(fā)執(zhí)行計算或者處理
Oozie和Azkaban的區(qū)別:
兩者在功能方面大致相同,只是Oozie底層在提交Hadoop Spark作業(yè)是通過org.apache.hadoop的封裝好的接口進行提交互广,而Azkaban可以直接操作shell語句敛腌。在安全性上可能Oozie會比較好卧土。
工作流定義:Oozie是通過xml定義的而Azkaban為properties來定義。
部署過程:Oozie的部署相對困難些像樊,同時它是從Yarn上拉任務日志尤莺。
Azkaban中如果有任務出現(xiàn)失敗,只要進程有效執(zhí)行生棍,那么任務就算執(zhí)行成功颤霎,這是BUG,但是Oozie能有效的檢測任務的成功與失敗足绅。
操作工作流:Azkaban使用Web操作。Oozie支持Web韩脑,RestApi氢妈,Java API操作。
權限控制:Oozie基本無權限控制段多,Azkaban有較完善的權限控制,供用戶對工作流讀寫執(zhí)行操作。
Oozie的action主要運行在hadoop中而Azkaban的actions運行在Azkaban的服務器中蟆技。
記錄workflow的狀態(tài):Azkaban將正在執(zhí)行的workflow狀態(tài)保存在內存中熊楼,Oozie將其保存在Mysql中。
出現(xiàn)失敗的情況:Azkaban會丟失所有的工作流觉啊,但是Oozie可以在繼續(xù)失敗的工作流運行
調度工具性能對比:
Apache Oozie拣宏,其配置工作流的過程是編寫大量的XML配置,而且代碼復雜度比較高杠人,不易于二次開發(fā)勋乾。ooize相比azkaban是一個重量級的任務調度系統(tǒng),功能全面嗡善,但配置使用也更復雜辑莫。
如果可以不在意某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象罩引。
Azkaban和Oozie的具體調度
Azkaban的工作流的創(chuàng)建特別方便各吨,直接通過web界面創(chuàng)建工程,然后提交任務袁铐。(創(chuàng)建job的的文件必須是以.job的文件揭蜒,并且上傳的文件是以zip壓縮包的形式進行上傳)。
在hue當中操作ooize的操作:
Hue是一個可快速開發(fā)和調試Hadoop生態(tài)系統(tǒng)各種應用的一個基于瀏覽器的圖形化用戶接口剔桨。
Hue可實現(xiàn)對oozie任務的開發(fā)忌锯,監(jiān)控,和工作流協(xié)調調度 领炫。使的oozie的操作變得更加的簡單快捷偶垮。
參考鏈接:
https://www.cnblogs.com/gxgd/p/8671271.html ----主要介紹了兩者的區(qū)別
https://blog.csdn.net/bingdianone/article/details/87908146#Azkaban_267 --詳細的介紹了常見配置使用
Azkaban是由Linkedin開源的一個批量工作流任務調度器。用于在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關系似舵,并提供一個易于使用的web用戶界面維護和跟蹤你的工作流脚猾。 它有如下功能特點: 1.Web用戶界面 2.方便上傳工作流 3.方便設置任務之間的關系 4.調度工作流 5.認證/授權(權限的工作) 6.能夠殺死并重新啟動工作流 7.模塊化和可插拔的插件機制 8.項目工作區(qū) 9.工作流和任務的日志記錄和審計
Azkaban介紹
調度工具介紹:(azkaban 和oozie)
各任務單元之間存在時間先后及前后依賴關系。為了很好地組織起這樣的復雜執(zhí)行計劃砚哗,需要一個工作流調度系統(tǒng)來調度執(zhí)行
shell腳本程序
java程序
mapreduce程序
hive腳本等
工作流調度:一個完整的數(shù)據(jù)分析系統(tǒng)通常都是由大量任務單元組成:
工作流調度工具:(azkaban 和oozie的對比)
實際運行: 實際上龙助,最優(yōu)的解決方案應該是最符合實際設計需求的方案,在時間應用中蛛芥,可能有足夠大的內存提鸟,那么直接將數(shù)據(jù)扔到內存中一次性處理即可,也可能機器有多個核仅淑,這樣可以采用多線程處理整個數(shù)據(jù)集称勋。
第五種方法采用最小堆。首先讀入前10000個數(shù)來創(chuàng)建大小為10000的最小堆涯竟,建堆的時間復雜度為O(mlogm)(m為數(shù)組的大小即為10000)赡鲜,然后遍歷后續(xù)的數(shù)字,并于堆頂(最新)數(shù)字進行比較银酬。如果比最小的數(shù)小,則繼續(xù)讀取后續(xù)數(shù)字筐钟;如果比堆頂數(shù)字大揩瞪,則替換堆頂元素并重新調整堆為最小堆。整個過程直至1億個數(shù)全部遍歷完為止篓冲。然后按照中序遍歷的方式輸出當前堆中的所有10000個數(shù)字壮韭。該算法的時間復雜度為O(nmlogm),空間復雜度是10000(常數(shù))纹因。
第四種方法是Hash法喷屋。如果這1億個書里面有很多重復的數(shù),先通過Hash法瞭恰,把這1億個數(shù)字去重復屯曹,這樣如果重復率很高的話,會減少很大的內存用量惊畏,從而縮小運算空間恶耽,然后通過分治法或最小堆法查找最大的10000個數(shù)。
第三種方法是分治法颜启,將1億個數(shù)據(jù)分成100份偷俭,每份100萬個數(shù)據(jù),找到每份數(shù)據(jù)中最大的10000個缰盏,最后在剩下的10010000個數(shù)據(jù)里面找出最大的10000個涌萤。如果100萬數(shù)據(jù)選擇足夠理想淹遵,那么可以過濾掉1億數(shù)據(jù)里面99%的數(shù)據(jù)。100萬個數(shù)據(jù)里面查找最大的10000個數(shù)據(jù)的方法如下:用快速排序的方法负溪,將數(shù)據(jù)分為2堆透揣,如果大的那堆個數(shù)N大于10000個,繼續(xù)對大堆快速排序一次分成2堆川抡,如果大的那堆個數(shù)N大于10000個辐真,繼續(xù)對大堆快速排序一次分成2堆,如果大堆個數(shù)N小于10000個崖堤,就在小的那堆里面快速排序一次侍咱,找第10000-n大的數(shù)字;遞歸以上過程密幔,就可以找到第1w大的數(shù)楔脯。參考上面的找出第1w大數(shù)字,就可以類似的方法找到前10000大數(shù)字了老玛。此種方法需要每次的內存空間為10^64=4MB淤年,一共需要101次這樣的比較钧敞。
第二種方法為局部淘汰法蜡豹,該方法與排序方法類似,用一個容器保存前10000個數(shù)溉苛,然后將剩余的所有數(shù)字——與容器內的最小數(shù)字相比镜廉,如果所有后續(xù)的元素都比容器內的10000個數(shù)還小,那么容器內這個10000個數(shù)就是最大10000個數(shù)愚战。如果某一后續(xù)元素比容器內最小數(shù)字大娇唯,則刪掉容器內最小元素,并將該元素插入容器寂玲,最后遍歷完這1億個數(shù)塔插,得到的結果容器中保存的數(shù)即為最終結果了。此時的時間復雜度為O(n+m^2)拓哟,其中m為容器的大小想许,即10000。
最容易想到的方法是將數(shù)據(jù)全部排序断序,然后在排序后的集合中進行查找流纹,最快的排序算法的時間復雜度一般為O(nlogn),如快速排序违诗。但是在32位的機器上漱凝,每個float類型占4個字節(jié),1億個浮點數(shù)就要占用400MB的存儲空間诸迟,對于一些可用內存小于400M的計算機而言茸炒,很顯然是不能一次將全部數(shù)據(jù)讀入內存進行排序的愕乎。其實即使內存能夠滿足要求(我機器內存都是8GB),該方法也并不高效扣典,因為題目的目的是尋找出最大的10000個數(shù)即可妆毕,而排序卻是將所有的元素都排序了,做了很多的無用功贮尖。
有1億個浮點數(shù)笛粘,如果找出期中最大的10000個?
針對top K類問題湿硝,通常比較好的方案是分治+Trie樹/hash+小頂堆薪前。即先將數(shù)據(jù)集按照Hash方法分解成多個小數(shù)據(jù)集,然后使用Trie樹活著Hash統(tǒng)計每個小數(shù)據(jù)集中的query詞頻关斜,之后用小頂堆求出每個數(shù)據(jù)集中出現(xiàn)頻率最高的前K個數(shù)示括,最后在所有top K中求出最終的top K。
在大規(guī)模數(shù)據(jù)處理中痢畜,經(jīng)常會遇到的一類問題:在海量數(shù)據(jù)中找出出現(xiàn)頻率最好的前k個數(shù)垛膝,或者從海量數(shù)據(jù)中找出最大的前k個數(shù),這類問題通常被稱為top K問題丁稀。例如吼拥,在搜索引擎中,統(tǒng)計搜索最熱門的10個查詢詞线衫;在歌曲庫中統(tǒng)計下載最高的前10首歌等凿可。
1億條數(shù)據(jù),10M內存授账,求TopN
怎么解決
Kafka中
Spark中
Hive中
數(shù)據(jù)傾斜
經(jīng)典場景問題
如何配置定時的工作流調度任務和郵件通知
使用過什么ETL清洗工具枯跑?
集群
Web界面的端口號:21000