大數(shù)據(jù)知識(shí)點(diǎn)總結(jié)

Hive:

分區(qū)表有哪幾類

Hive中追加導(dǎo)入數(shù)據(jù)的4種方式是什么?

Hive中到處數(shù)據(jù)有幾種方式?如何導(dǎo)出數(shù)據(jù)

Canal

Canal通過配置就可以把數(shù)據(jù)傳到Kafka,如何配置?不用寫代碼

Canal對(duì)了數(shù)據(jù)怎么辦

數(shù)據(jù)庫(kù)

表的權(quán)限管理

數(shù)倉(cāng)

日活、周活、月活比例

Java & Scala

JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)

JVM的GC機(jī)制

JVM調(diào)優(yōu)

Scala于Java語(yǔ)言相比較,有什么優(yōu)勢(shì)?

Spark

Spark的Shuffle于MR Shuffle有何區(qū)別

Spark程序的定時(shí)開啟與關(guān)閉

實(shí)時(shí)

SparkStreaming

Flink

  • watermark

  • 狀態(tài)一致性

  • 狀態(tài)計(jì)算

事務(wù)寫入(Transactional Writes)

事務(wù)(Transaction)

  • 應(yīng)用程序中一系列嚴(yán)密的操作,所有操作必須成功完成;否則在每個(gè)操作中所作的所有更改都會(huì)被撤消
  • 具有原子性:一個(gè)事務(wù)中的一系列的操作要么全部成功,要么一個(gè)都不做
實(shí)現(xiàn)思想

構(gòu)建的事務(wù)對(duì)應(yīng)著 checkpoint,等到 checkpoint 真正完成的時(shí)候,才把所有對(duì)應(yīng)的結(jié)果寫入 sink 系統(tǒng)中

面試題:

1 Flink-Kafka端對(duì)端的狀態(tài)一致性問題,如何保持

2 Kafka的事務(wù)性配置參考

Atlas

官網(wǎng)鏈接:http://atlas.apache.org/0.8.4/QuickStart.html

Atlas是什么?

Apache Atlas為組織提供開放式元數(shù)據(jù)管理和治理功能,用以構(gòu)建其數(shù)據(jù)資產(chǎn)目錄,對(duì)這些資產(chǎn)進(jìn)行分類和管理,并為數(shù)據(jù)分析師和數(shù)據(jù)治理團(tuán)隊(duì),提供圍繞這些數(shù)據(jù)資產(chǎn)的協(xié)作功能。

架構(gòu)原理圖

atlas_架構(gòu)原理圖.png

Atlas的工作流程?哪一塊都提供了什么功能?

管理的元數(shù)據(jù)類型有哪些?

當(dāng)需求不能被滿足時(shí):官網(wǎng)提供源代碼,支持二次開發(fā)(提供REST AP,所有功能都會(huì)向用戶提供)

安裝及使用

安裝環(huán)境準(zhǔn)備:

JDK8、Hadoop、Zookeeper、Kafka、HBase、Solr、Hive、

Azkaban(進(jìn)行工作調(diào)度后,查看表、字段之間的血緣依賴關(guān)系)、

Atlas0.8.4

在/opt/module/atlas/路徑,將Hive元數(shù)據(jù)導(dǎo)入到Atlas

Oozie介紹

Oozie工作流是放置在控制依賴DAG(有向無(wú)環(huán)圖 Direct Acyclic Graph)中的一組動(dòng)作(例如,Hadoop的Map/Reduce作業(yè)、Pig作業(yè)等),其中指定了動(dòng)作執(zhí)行的順序。我們會(huì)使用hPDL(一種XML流程定義語(yǔ)言)來(lái)描述這個(gè)圖。

hPDL是一種很簡(jiǎn)潔的語(yǔ)言,只會(huì)使用少數(shù)流程控制和動(dòng)作節(jié)點(diǎn)。控制節(jié)點(diǎn)會(huì)定義執(zhí)行的流程,并包含工作流的起點(diǎn)和終點(diǎn)(start、end和fail節(jié)點(diǎn))以及控制工作流執(zhí)行路徑的機(jī)制(decision、fork和join節(jié)點(diǎn))。動(dòng)作節(jié)點(diǎn)是一些機(jī)制,通過它們工作流會(huì)觸發(fā)執(zhí)行計(jì)算或者處理

Oozie和Azkaban的區(qū)別:

兩者在功能方面大致相同,只是Oozie底層在提交Hadoop Spark作業(yè)是通過org.apache.hadoop的封裝好的接口進(jìn)行提交,而Azkaban可以直接操作shell語(yǔ)句。在安全性上可能Oozie會(huì)比較好。

工作流定義:Oozie是通過xml定義的而Azkaban為properties來(lái)定義。

部署過程:Oozie的部署相對(duì)困難些,同時(shí)它是從Yarn上拉任務(wù)日志。

Azkaban中如果有任務(wù)出現(xiàn)失敗,只要進(jìn)程有效執(zhí)行,那么任務(wù)就算執(zhí)行成功,這是BUG,但是Oozie能有效的檢測(cè)任務(wù)的成功與失敗。

操作工作流:Azkaban使用Web操作。Oozie支持Web,RestApi,Java API操作。

權(quán)限控制:Oozie基本無(wú)權(quán)限控制,Azkaban有較完善的權(quán)限控制,供用戶對(duì)工作流讀寫執(zhí)行操作。

Oozie的action主要運(yùn)行在hadoop中而Azkaban的actions運(yùn)行在Azkaban的服務(wù)器中。

記錄workflow的狀態(tài):Azkaban將正在執(zhí)行的workflow狀態(tài)保存在內(nèi)存中,Oozie將其保存在Mysql中。

出現(xiàn)失敗的情況:Azkaban會(huì)丟失所有的工作流,但是Oozie可以在繼續(xù)失敗的工作流運(yùn)行

調(diào)度工具性能對(duì)比:

Apache Oozie,其配置工作流的過程是編寫大量的XML配置,而且代碼復(fù)雜度比較高,不易于二次開發(fā)。ooize相比azkaban是一個(gè)重量級(jí)的任務(wù)調(diào)度系統(tǒng),功能全面,但配置使用也更復(fù)雜。

如果可以不在意某些功能的缺失,輕量級(jí)調(diào)度器azkaban是很不錯(cuò)的候選對(duì)象。

Azkaban和Oozie的具體調(diào)度

Azkaban的工作流的創(chuàng)建特別方便,直接通過web界面創(chuàng)建工程,然后提交任務(wù)。(創(chuàng)建job的的文件必須是以.job的文件,并且上傳的文件是以zip壓縮包的形式進(jìn)行上傳)。

在hue當(dāng)中操作ooize的操作:

Hue是一個(gè)可快速開發(fā)和調(diào)試Hadoop生態(tài)系統(tǒng)各種應(yīng)用的一個(gè)基于瀏覽器的圖形化用戶接口。

Hue可實(shí)現(xiàn)對(duì)oozie任務(wù)的開發(fā),監(jiān)控,和工作流協(xié)調(diào)調(diào)度 。使的oozie的操作變得更加的簡(jiǎn)單快捷。

參考鏈接:

https://www.cnblogs.com/gxgd/p/8671271.html ----主要介紹了兩者的區(qū)別

https://blog.csdn.net/bingdianone/article/details/87908146#Azkaban_267 --詳細(xì)的介紹了常見配置使用

Azkaban是由Linkedin開源的一個(gè)批量工作流任務(wù)調(diào)度器。用于在一個(gè)工作流內(nèi)以一個(gè)特定的順序運(yùn)行一組工作和流程。Azkaban定義了一種KV文件格式來(lái)建立任務(wù)之間的依賴關(guān)系,并提供一個(gè)易于使用的web用戶界面維護(hù)和跟蹤你的工作流。 它有如下功能特點(diǎn): 1.Web用戶界面 2.方便上傳工作流 3.方便設(shè)置任務(wù)之間的關(guān)系 4.調(diào)度工作流 5.認(rèn)證/授權(quán)(權(quán)限的工作) 6.能夠殺死并重新啟動(dòng)工作流 7.模塊化可插拔的插件機(jī)制 8.項(xiàng)目工作區(qū) 9.工作流和任務(wù)的日志記錄和審計(jì)

Azkaban介紹

調(diào)度工具介紹:(azkaban 和oozie)

各任務(wù)單元之間存在時(shí)間先后及前后依賴關(guān)系。為了很好地組織起這樣的復(fù)雜執(zhí)行計(jì)劃,需要一個(gè)工作流調(diào)度系統(tǒng)來(lái)調(diào)度執(zhí)行

  • shell腳本程序

  • java程序

  • mapreduce程序

  • hive腳本等

工作流調(diào)度:一個(gè)完整的數(shù)據(jù)分析系統(tǒng)通常都是由大量任務(wù)單元組成:

工作流調(diào)度工具:(azkaban 和oozie的對(duì)比)

實(shí)際運(yùn)行: 實(shí)際上,最優(yōu)的解決方案應(yīng)該是最符合實(shí)際設(shè)計(jì)需求的方案,在時(shí)間應(yīng)用中,可能有足夠大的內(nèi)存,那么直接將數(shù)據(jù)扔到內(nèi)存中一次性處理即可,也可能機(jī)器有多個(gè)核,這樣可以采用多線程處理整個(gè)數(shù)據(jù)集。

第五種方法采用最小堆。首先讀入前10000個(gè)數(shù)來(lái)創(chuàng)建大小為10000的最小堆,建堆的時(shí)間復(fù)雜度為O(mlogm)(m為數(shù)組的大小即為10000),然后遍歷后續(xù)的數(shù)字,并于堆頂(最小)數(shù)字進(jìn)行比較。如果比最小的數(shù)小,則繼續(xù)讀取后續(xù)數(shù)字;如果比堆頂數(shù)字大,則替換堆頂元素并重新調(diào)整堆為最小堆。整個(gè)過程直至1億個(gè)數(shù)全部遍歷完為止。然后按照中序遍歷的方式輸出當(dāng)前堆中的所有10000個(gè)數(shù)字。該算法的時(shí)間復(fù)雜度為O(nmlogm),空間復(fù)雜度是10000(常數(shù))。

第四種方法是Hash法。如果這1億個(gè)書里面有很多重復(fù)的數(shù),先通過Hash法,把這1億個(gè)數(shù)字去重復(fù),這樣如果重復(fù)率很高的話,會(huì)減少很大的內(nèi)存用量,從而縮小運(yùn)算空間,然后通過分治法或最小堆法查找最大的10000個(gè)數(shù)。

第三種方法是分治法,將1億個(gè)數(shù)據(jù)分成100份,每份100萬(wàn)個(gè)數(shù)據(jù),找到每份數(shù)據(jù)中最大的10000個(gè),最后在剩下的10010000個(gè)數(shù)據(jù)里面找出最大的10000個(gè)。如果100萬(wàn)數(shù)據(jù)選擇足夠理想,那么可以過濾掉1億數(shù)據(jù)里面99%的數(shù)據(jù)。100萬(wàn)個(gè)數(shù)據(jù)里面查找最大的10000個(gè)數(shù)據(jù)的方法如下:用快速排序的方法,將數(shù)據(jù)分為2堆,如果大的那堆個(gè)數(shù)N大于10000個(gè),繼續(xù)對(duì)大堆快速排序一次分成2堆,如果大的那堆個(gè)數(shù)N大于10000個(gè),繼續(xù)對(duì)大堆快速排序一次分成2堆,如果大堆個(gè)數(shù)N小于10000個(gè),就在小的那堆里面快速排序一次,找第10000-n大的數(shù)字;遞歸以上過程,就可以找到第1w大的數(shù)。參考上面的找出第1w大數(shù)字,就可以類似的方法找到前10000大數(shù)字了。此種方法需要每次的內(nèi)存空間為10^64=4MB,一共需要101次這樣的比較。

第二種方法為局部淘汰法,該方法與排序方法類似,用一個(gè)容器保存前10000個(gè)數(shù),然后將剩余的所有數(shù)字——與容器內(nèi)的最小數(shù)字相比,如果所有后續(xù)的元素都比容器內(nèi)的10000個(gè)數(shù)還,那么容器內(nèi)這個(gè)10000個(gè)數(shù)就是最大10000個(gè)數(shù)。如果某一后續(xù)元素比容器內(nèi)最小數(shù)字,則刪掉容器內(nèi)最小元素,并將該元素插入容器,最后遍歷完這1億個(gè)數(shù),得到的結(jié)果容器中保存的數(shù)即為最終結(jié)果了。此時(shí)的時(shí)間復(fù)雜度為O(n+m^2),其中m為容器的大小,即10000。

最容易想到的方法是將數(shù)據(jù)全部排序,然后在排序后的集合中進(jìn)行查找,最快的排序算法的時(shí)間復(fù)雜度一般為O(nlogn),如快速排序。但是在32位的機(jī)器上,每個(gè)float類型占4個(gè)字節(jié),1億個(gè)浮點(diǎn)數(shù)就要占用400MB的存儲(chǔ)空間,對(duì)于一些可用內(nèi)存小于400M的計(jì)算機(jī)而言,很顯然是不能一次將全部數(shù)據(jù)讀入內(nèi)存進(jìn)行排序的。其實(shí)即使內(nèi)存能夠滿足要求(我機(jī)器內(nèi)存都是8GB),該方法也并不高效,因?yàn)轭}目的目的是尋找出最大的10000個(gè)數(shù)即可,而排序卻是將所有的元素都排序了,做了很多的無(wú)用功

有1億個(gè)浮點(diǎn)數(shù),如果找出期中最大的10000個(gè)?

針對(duì)top K類問題,通常比較好的方案是分治+Trie樹/hash+小頂堆。即先將數(shù)據(jù)集按照Hash方法分解成多個(gè)小數(shù)據(jù)集,然后使用Trie樹活著Hash統(tǒng)計(jì)每個(gè)小數(shù)據(jù)集中的query詞頻,之后用小頂堆求出每個(gè)數(shù)據(jù)集中出現(xiàn)頻率最高的前K個(gè)數(shù),最后在所有top K中求出最終的top K。

在大規(guī)模數(shù)據(jù)處理中,經(jīng)常會(huì)遇到的一類問題:在海量數(shù)據(jù)中找出出現(xiàn)頻率最好的前k個(gè)數(shù),或者從海量數(shù)據(jù)中找出最大的前k個(gè)數(shù),這類問題通常被稱為top K問題。例如,在搜索引擎中,統(tǒng)計(jì)搜索最熱門的10個(gè)查詢?cè)~;在歌曲庫(kù)中統(tǒng)計(jì)下載最高的前10首歌等。

1億條數(shù)據(jù),10M內(nèi)存,求TopN

怎么解決

Kafka中

Spark中

Hive中

數(shù)據(jù)傾斜

經(jīng)典場(chǎng)景問題

如何配置定時(shí)的工作流調(diào)度任務(wù)和郵件通知

使用過什么ETL清洗工具?

集群

Web界面的端口號(hào):21000

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容