整理來源:《Spark面試2000題》
目錄
Spark section-0 基礎(chǔ) (3)
Spark section-1 Spark運行細節(jié) (13)
Spark section-2 Spark 與 Hadoop/MapReduce 比較 (7)
Spark section-3 RDD (4)
Spark section-4 RDD操作 (13)
Spark section-5 大數(shù)據(jù)問題 (7)
Spark section-6 機器學(xué)習(xí)算法 (4)
Spark section-7 Hive (2)
Spark section-0 基礎(chǔ)(3)
1. spark的有幾種部署模式僻他,每種模式特點兔院?
- 本地模式
- Spark不一定非要跑在hadoop集群崎场,可以在本地块促,起多個線程的方式來指定兜挨。方便調(diào)試替久,本地模式分三類
- local:只啟動一個executor
- local[k]: 啟動k個executor
- local:啟動跟cpu數(shù)目相同的 executor
- Spark不一定非要跑在hadoop集群崎场,可以在本地块促,起多個線程的方式來指定兜挨。方便調(diào)試替久,本地模式分三類
- standalone模式
- 分布式部署集群箱锐,自帶完整的服務(wù)研铆,資源管理和任務(wù)監(jiān)控是Spark自己監(jiān)控埋同,這個模式也是其他模式的基礎(chǔ)
- Spark on yarn模式
- 分布式部署集群,資源和任務(wù)監(jiān)控交給yarn管理
- 粗粒度資源分配方式逆甜,包含cluster和client運行模式
- cluster 適合生產(chǎn)虱肄,driver運行在集群子節(jié)點,具有容錯功能
- client 適合調(diào)試萝挤,dirver運行在客戶端
- Spark On Mesos模式
2. Spark技術(shù)棧有哪些組件绘面,每個組件都有什么功能亭罪,適合什么應(yīng)用場景燥筷?
- Spark core
- 是其它組件的基礎(chǔ)谢揪,spark的內(nèi)核
- 主要包含:有向循環(huán)圖、RDD、Lingage、Cache、broadcast等
- SparkStreaming
- 是一個對實時數(shù)據(jù)流進行高通量绞旅、容錯處理的流式處理系統(tǒng)
- 將流式計算分解成一系列短小的批處理作業(yè)
- Spark sql:
- 能夠統(tǒng)一處理關(guān)系表和RDD晃琳,使得開發(fā)人員可以輕松地使用SQL命令進行外部查詢
- MLBase
- 是Spark生態(tài)圈的一部分專注于機器學(xué)習(xí),讓機器學(xué)習(xí)的門檻更低
- MLBase分為四部分:MLlib、MLI、ML Optimizer和MLRuntime蛤肌。
- GraphX
- 是Spark中用于圖和圖并行計算
3. spark有哪些組件
- master:管理集群和節(jié)點琅锻,不參與計算。
- worker:計算節(jié)點僵芹,進程本身不參與計算处硬,和master匯報荷辕。
- Driver:運行程序的main方法惫谤,創(chuàng)建spark context對象。
- spark context:控制整個application的生命周期蛔糯,包括dagsheduler和task scheduler等組件拯腮。
- client:用戶提交程序的入口。
Spark section-1 Spark運行細節(jié)(13)
1. spark工作機制
- 用戶在client端提交作業(yè)后淮逻,會由Driver運行main方法并創(chuàng)建spark context上下文琼懊。
- 執(zhí)行add算子,形成dag圖輸入dagscheduler
- 按照add之間的依賴關(guān)系劃分stage輸入task scheduler
- task scheduler會將stage劃分為taskset分發(fā)到各個節(jié)點的executor中執(zhí)行
2. Spark應(yīng)用程序的執(zhí)行過程
- 構(gòu)建Spark Application的運行環(huán)境(啟動SparkContext)
- SparkContext向資源管理器(可以是Standalone爬早、Mesos或YARN)注冊并申請運行Executor資源哼丈;
- 資源管理器分配Executor資源,Executor運行情況將隨著心跳發(fā)送到資源管理器上筛严;
- SparkContext構(gòu)建成DAG圖醉旦,將DAG圖分解成Stage,并把Taskset發(fā)送給Task Scheduler
- Executor向SparkContext申請Task桨啃,Task Scheduler將Task發(fā)放給Executor運行车胡,SparkContext將應(yīng)用程序代碼發(fā)放給Executor。
- Task在Executor上運行照瘾,運行完畢釋放所有資源匈棘。
3. driver的功能是什么?
- 一個Spark作業(yè)運行時包括一個Driver進程析命,也是作業(yè)的主進程主卫,具有main函數(shù)逃默,并且有SparkContext的實例,是程序的人口點队秩;
- 功能:
- 向集群申請資源
- 負責了作業(yè)的調(diào)度和解析
- 生成Stage并調(diào)度Task到Executor上(包括DAGScheduler笑旺,TaskScheduler)
4. Spark中Work的主要工作是什么?
- 管理當前節(jié)點內(nèi)存馍资,CPU的使用狀況筒主,接收master分配過來的資源指令,通過ExecutorRunner啟動程序分配任務(wù)
- worker就類似于包工頭鸟蟹,管理分配新進程乌妙,做計算的服務(wù),相當于process服務(wù)
- worker不會運行代碼建钥,具體運行的是Executor是可以運行具體appliaction寫的業(yè)務(wù)邏輯代碼
5. task有幾種類型藤韵?2種
- resultTask類型,最后一個task
- shuffleMapTask類型熊经,除了最后一個task都是
6. 什么是shuffle泽艘,以及為什么需要shuffle?
- shuffle中文翻譯為洗牌镐依,需要shuffle的原因是:某種具有共同特征的數(shù)據(jù)匯聚到一個計算節(jié)點上進行計算
7. Spark master HA 主從切換過程不會影響集群已有的作業(yè)運行匹涮,為什么?
- 因為程序在運行之前槐壳,已經(jīng)申請過資源了然低,driver和Executors通訊,不需要和master進行通訊的务唐。
8. Spark并行度怎么設(shè)置比較合適
- spark并行度雳攘,每個core承載2~4個partition(并行度)
- 并行讀和數(shù)據(jù)規(guī)模無關(guān),只和內(nèi)存和cpu有關(guān)
9. Spaek程序執(zhí)行枫笛,有時候默認為什么會產(chǎn)生很多task吨灭,怎么修改默認task執(zhí)行個數(shù)?
- 有很多小文件的時候刑巧,有多少個輸入block就會有多少個task啟動
- spark中有partition的概念沃于,每個partition都會對應(yīng)一個task,task越多海诲,在處理大規(guī)模數(shù)據(jù)的時候繁莹,就會越有效率
10. Spark中數(shù)據(jù)的位置是被誰管理的?
- 每個數(shù)據(jù)分片都對應(yīng)具體物理位置特幔,數(shù)據(jù)的位置是被blockManager管理
11. 為什么要進行序列化
- 減少存儲空間咨演,高效存儲和傳輸數(shù)據(jù),缺點:使用時需要反序列化蚯斯,非常消耗CPU
12. Spark如何處理不能被序列化的對象薄风?
- 封裝成object
13. Spark提交你的jar包時所用的命令是什么饵较?
- spark-submit
Spark section-2 Spark 與 Hadoop/MapReduce 比較(7)
1. Mapreduce和Spark的相同和區(qū)別
- 兩者都是用mr模型來進行并行計算
- hadoop的一個作業(yè):job
- job分為map task和reduce task,每個task都是在自己的進程中運行的
- 當task結(jié)束時遭赂,進程也會結(jié)束
- spark用戶提交的任務(wù):application
- 一個application對應(yīng)一個sparkcontext循诉,app中存在多個job
- 每觸發(fā)一次action操作就會產(chǎn)生一個job
- 這些job可以并行或串行執(zhí)行
- 每個job中有多個stage,stage是shuffle過程中DAGSchaduler通過RDD之間的依賴關(guān)系劃分job而來的
- 每個stage里面有多個task撇他,組成taskset有TaskSchaduler分發(fā)到各個executor中執(zhí)行
- executor的生命周期是和app一樣的茄猫,即使沒有job運行也是存在的,所以task可以快速啟動讀取內(nèi)存進行計算困肩。
- hadoop的job只有map和reduce操作划纽,表達能力比較欠缺
- 在mr過程中會重復(fù)的讀寫hdfs,造成大量的io操作锌畸,多個job需要自己管理關(guān)系勇劣。
- spark的迭代計算都是在內(nèi)存中進行的
- API中提供了大量的RDD操作如join,groupby等
- 通過DAG圖可以實現(xiàn)良好的容錯
2. 簡答說一下hadoop的mapreduce編程模型
- 首先map task會從本地文件系統(tǒng)讀取數(shù)據(jù)潭枣,轉(zhuǎn)換成key-value形式的鍵值對集合比默,使用的是hadoop內(nèi)置的數(shù)據(jù)類型(longwritable、text)
- 將鍵值對集合輸入mapper進行業(yè)務(wù)處理過程盆犁,將其轉(zhuǎn)換成需要的key-value在輸出
- 之后會進行一個partition分區(qū)操作命咐,默認使用的是hashpartitioner,自定義分區(qū):重寫getpartition方法
- 之后會對key進行進行sort排序蚣抗,grouping分組操作將相同key的value合并分組輸出
- 之后進行一個combiner歸約操作侈百,其實就是一個本地段的reduce預(yù)處理瓮下,以減小后面shufle和reducer的工作量
- reduce task會通過網(wǎng)絡(luò)將各個數(shù)據(jù)收集進行reduce處理
- 最后將數(shù)據(jù)保存或者顯示翰铡,結(jié)束整個job
3. 簡單說一下hadoop和spark的shuffle相同和差異?
- high-level 角度:
- 兩者并沒有大的差別 都是將 mapper(Spark: ShuffleMapTask)的輸出進行 partition讽坏,不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是下一個 stage 里的 ShuffleMapTask锭魔,也可能是 ResultTask)
Reducer 以內(nèi)存作緩沖區(qū),邊 shuffle 邊 aggregate 數(shù)據(jù)路呜,等到數(shù)據(jù) aggregate 好以后進行 reduce()迷捧。
- 兩者并沒有大的差別 都是將 mapper(Spark: ShuffleMapTask)的輸出進行 partition讽坏,不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是下一個 stage 里的 ShuffleMapTask锭魔,也可能是 ResultTask)
- low-level 角度:
- Hadoop MapReduce 是 sort-based,進入 combine() 和 reduce() 的 records 必須先 sort胀葱。
- 好處:combine/reduce() 可以處理大規(guī)模的數(shù)據(jù)
- 因為其輸入數(shù)據(jù)可以通過外排得到
- mapper 對每段數(shù)據(jù)先做排序
- reducer 的 shuffle 對排好序的每段數(shù)據(jù)做歸并
- Spark 默認選擇的是 hash-based漠秋,通常使用 HashMap 來對 shuffle 來的數(shù)據(jù)進行 aggregate,不提前排序
- 如果用戶需要經(jīng)過排序的數(shù)據(jù):sortByKey()
- 實現(xiàn)角度:
- Hadoop MapReduce 將處理流程劃分出明顯的幾個階段:map(), spilt, merge, shuffle, sort, reduce()
- Spark 沒有這樣功能明確的階段抵屿,只有不同的 stage 和一系列的 transformation()庆锦,spill, merge, aggregate 等操作需要蘊含在 transformation() 中
4. 簡單說一下hadoop和spark的shuffle過程
- hadoop:map端保存分片數(shù)據(jù),通過網(wǎng)絡(luò)收集到reduce端
- spark:spark的shuffle是在DAGSchedular劃分Stage的時候產(chǎn)生的轧葛,TaskSchedule要分發(fā)Stage到各個worker的executor搂抒,減少shuffle可以提高性能
5. partition和block的關(guān)聯(lián)
- hdfs中的block是分布式存儲的最小單元艇搀,等分,可設(shè)置冗余求晶,這樣設(shè)計有一部分磁盤空間的浪費焰雕,但是整齊的block大小,便于快速找到芳杏、讀取對應(yīng)的內(nèi)容
- Spark中的partition是RDD的最小單元矩屁,RDD是由分布在各個節(jié)點上的partition組成的。
- partition是指的spark在計算過程中蚜锨,生成的數(shù)據(jù)在計算空間內(nèi)最小單元
- 同一份數(shù)據(jù)(RDD)的partion大小不一档插,數(shù)量不定,是根據(jù)application里的算子和最初讀入的數(shù)據(jù)分塊數(shù)量決定
- block位于存儲空間亚再;partion位于計算空間郭膛,block的大小是固定的、partion大小是不固定的氛悬,是從2個不同的角度去看數(shù)據(jù)则剃。
6. Spark為什么比mapreduce快?
- 基于內(nèi)存計算如捅,減少低效的磁盤交互
- 高效的調(diào)度算法棍现,基于DAG
- 容錯機制Linage
7. Mapreduce操作的mapper和reducer階段相當于spark中的哪幾個算子?
- 相當于spark中的map算子和reduceByKey算子镜遣,區(qū)別:MR會自動進行排序的己肮,spark要看具體partitioner
Spark section-3 RDD(4)
1. RDD機制
- 分布式彈性數(shù)據(jù)集,簡單的理解成一種數(shù)據(jù)結(jié)構(gòu)悲关,是spark框架上的通用貨幣
- 所有算子都是基于rdd來執(zhí)行的
- rdd執(zhí)行過程中會形成dag圖谎僻,然后形成lineage保證容錯性等
- 從物理的角度來看rdd存儲的是block和node之間的映射
2. RDD的彈性表現(xiàn)在哪幾點?
- 自動的進行內(nèi)存和磁盤的存儲切換寓辱;
- 基于Lingage的高效容錯艘绍;
- task如果失敗會自動進行特定次數(shù)的重試;
- stage如果失敗會自動進行特定次數(shù)的重試秫筏,而且只會計算失敗的分片诱鞠;
- checkpoint和persist,數(shù)據(jù)計算之后持久化緩存
- 數(shù)據(jù)調(diào)度彈性这敬,DAG TASK調(diào)度和資源無關(guān)
- 數(shù)據(jù)分片的高度彈性航夺,a.分片很多碎片可以合并成大的,b.par
3. RDD有哪些缺陷崔涂?
- 不支持細粒度的寫和更新操作(如網(wǎng)絡(luò)爬蟲)
- spark寫數(shù)據(jù)是粗粒度的阳掐,所謂粗粒度,就是批量寫入數(shù)據(jù) (批量寫)
- 但是讀數(shù)據(jù)是細粒度的也就是說可以一條條的讀 (一條條讀)
- 不支持增量迭代計算,F(xiàn)link支持
4. 什么是RDD寬依賴和窄依賴锚烦?
- RDD和它依賴的parent RDD(s)的關(guān)系有兩種不同的類型
- 窄依賴:每一個parent RDD的Partition最多被子RDD的一個Partition使用 (一父一子)
- 寬依賴:多個子RDD的Partition會依賴同一個parent RDD的Partition (一父多子)
Spark section-4 RDD操作(13)
**1. cache和pesist的區(qū)別 **
- cache和persist都是用于緩存RDD觅闽,避免重復(fù)計算
- .cache() == .persist(MEMORY_ONLY)
2. cache后面能不能接其他算子,它是不是action操作?
- 可以接其他算子涮俄,但是接了算子之后蛉拙,起不到緩存應(yīng)有的效果,因為會重新觸發(fā)cache
- cache不是action操作
3. 什么場景下要進行persist操作彻亲?
以下場景會使用persist
- 某個步驟計算非常耗時或計算鏈條非常長孕锄,需要進行persist持久化
- shuffle之后為什么要persist,shuffle要進性網(wǎng)絡(luò)傳輸苞尝,風險很大畸肆,數(shù)據(jù)丟失重來,恢復(fù)代價很大
- shuffle之前進行persist宙址,框架默認將數(shù)據(jù)持久化到磁盤轴脐,這個是框架自動做的。
4. rdd有幾種操作類型抡砂?三種4笤邸!
- transformation注益,rdd由一種轉(zhuǎn)為另一種rdd
- action
- cronroller碴巾,控制算子(cache/persist) 對性能和效率的有很好的支持
5. reduceByKey是不是action?
- 不是丑搔,很多人都會以為是action厦瓢,reduce rdd是action
6. collect功能是什么,其底層是怎么實現(xiàn)的啤月?
- driver通過collect把集群中各個節(jié)點的內(nèi)容收集過來匯總成結(jié)果
- collect返回結(jié)果是Array類型的煮仇,合并后Array中只有一個元素,是tuple類型(KV類型的)的顽冶。
7. map與flatMap的區(qū)別
- map:對RDD每個元素轉(zhuǎn)換欺抗,文件中的每一行數(shù)據(jù)返回一個數(shù)組對象
- flatMap:對RDD每個元素轉(zhuǎn)換售碳,然后再扁平化强重,將所有的對象合并為一個對象,會拋棄值為null的值
8. 列舉你常用的action贸人?
collect间景,reduce,take,count,saveAsTextFile等
9. union操作是產(chǎn)生寬依賴還是窄依賴?
- 窄依賴
10. Spark累加器有哪些特點艺智?
- 全局的倘要,只增不減,記錄全局集群的唯一狀態(tài)
- 在exe中修改它,在driver讀取
- executor級別共享的封拧,廣播變量是task級別的共享
- 兩個application不可以共享累加器志鹃,但是同一個app不同的job可以共享
11. spark hashParitioner的弊端
- 分區(qū)原理:對于給定的key,計算其hashCode
- 弊端是數(shù)據(jù)不均勻泽西,容易導(dǎo)致數(shù)據(jù)傾斜
12. RangePartitioner分區(qū)的原理
- 盡量保證每個分區(qū)中數(shù)據(jù)量的均勻曹铃,而且分區(qū)與分區(qū)之間是有序的,也就是說一個分區(qū)中的元素肯定都是比另一個分區(qū)內(nèi)的元素小或者大
- 分區(qū)內(nèi)的元素是不能保證順序的
- 簡單的說就是將一定范圍內(nèi)的數(shù)映射到某一個分區(qū)內(nèi)
13. Spark中的HashShufle的有哪些不足捧杉?
- shuffle產(chǎn)生海量的小文件在磁盤上陕见,此時會產(chǎn)生大量耗時的、低效的IO操作味抖;
- 容易導(dǎo)致內(nèi)存不夠用评甜,由于內(nèi)存需要保存海量的文件操作句柄和臨時緩存信息
- 容易出現(xiàn)數(shù)據(jù)傾斜,導(dǎo)致OOM
Spark section-5 大數(shù)據(jù)問題(7)
1. 如何使用Spark解決TopN問題仔涩?(互聯(lián)網(wǎng)公司常面)
https://blog.csdn.net/oopsoom/article/details/25815443
2. 如何使用Spark解決分組排序問題忍坷?(互聯(lián)網(wǎng)公司常面)
https://blog.csdn.net/huitoukest/article/details/51273143
3. 給定a、b兩個文件熔脂,各存放50億個url承匣,每個url各占64字節(jié),內(nèi)存限制是4G锤悄,讓你找出a韧骗、b文件共同的url?
- 方案1:可以估計每個文件安的大小為5G×64=320G,遠遠大于內(nèi)存限制的4G零聚。所以不可能將其完全加載到內(nèi)存中處理袍暴。考慮采取分而治之的方法隶症。
遍歷文件a政模,對每個url求取hash(url)%1000,然后根據(jù)所取得的值將url分別存儲到1000個小文件(記為a0,a1,…,a999)中蚂会。這樣每個小文件的大約為300M淋样。
遍歷文件b,采取和a相同的方式將url分別存儲到1000小文件(記為b0,b1,…,b999)胁住。這樣處理后趁猴,所有可能相同的url都在對應(yīng)的小文件(a0vsb0,a1vsb1,…,a999vsb999)中,不對應(yīng)的小文件不可能有相同的url彪见。然后我們只要求出1000對小文件中相同的url即可儡司。
求每對小文件中相同的url時,可以把其中一個小文件的url存儲到hash_set中余指。然后遍歷另一個小文件的每個url捕犬,看其是否在剛才構(gòu)建的hash_set中,如果是,那么就是共同的url碉碉,存到文件里面就可以了柴钻。 - 方案2:如果允許有一定的錯誤率,可以使用Bloomfilter垢粮,4G內(nèi)存大概可以表示340億bit顿颅。將其中一個文件中的url使用Bloomfilter映射為這340億bit,然后挨個讀取另外一個文件的url足丢,檢查是否與Bloomfilter粱腻,如果是,那么該url應(yīng)該是共同的url(注意會有一定的錯誤率)斩跌。
4. 有一個1G大小的一個文件朴摊,里面每一行是一個詞恭朗,詞的大小不超過16字節(jié),內(nèi)存限制大小是1M,要求返回頻數(shù)最高的100個詞引润。
- Step1:順序讀文件中吝镣,對于每個詞x烂叔,取hash(x)%5000隘截,然后按照該值存到5000個小文件(記為f0,f1,...,f4999)中,這樣每個文件大概是200k左右洛姑,如果其中的有的文件超過了1M大小上沐,還可以按照類似的方法繼續(xù)往下分,直到分解得到的小文件的大小都不超過1M;
- Step2:對每個小文件楞艾,統(tǒng)計每個文件中出現(xiàn)的詞以及相應(yīng)的頻率(可以采用trie樹/hash_map等)参咙,并取出出現(xiàn)頻率最大的100個詞(可以用含100個結(jié)點的最小堆),并把100詞及相應(yīng)的頻率存入文件硫眯,這樣又得到了5000個文件;
- Step3:把這5000個文件進行歸并(類似與歸并排序);
5. 現(xiàn)有海量日志數(shù)據(jù)保存在一個超級大的文件中蕴侧,該文件無法直接讀入內(nèi)存,要求從中提取某天出訪問百度次數(shù)最多的那個IP两入。
分而治之+Hash
1)IP地址最多有2^32=4G種取值情況净宵,所以不能完全加載到內(nèi)存中處理;
2)可以考慮采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值裹纳,把海量IP日志分別存儲到1024個小文件中择葡。這樣,每個小文件最多包含4MB個IP地址;
3)對于每一個小文件痊夭,可以構(gòu)建一個IP為key刁岸,出現(xiàn)次數(shù)為value的Hashmap脏里,同時記錄當前出現(xiàn)次數(shù)最多的那個IP地址;
4)可以得到1024個小文件中的出現(xiàn)次數(shù)最多的IP她我,再依據(jù)常規(guī)的排序算法得到總體上出現(xiàn)次數(shù)最多的IP;
6. 在2.5億個整數(shù)中找出不重復(fù)的整數(shù),注,內(nèi)存不足以容納這2.5億個整數(shù)番舆。
- 方案1:采用2-Bitmap(每個數(shù)分配2bit酝碳,00表示不存在,01表示出現(xiàn)一次恨狈,10表示多次疏哗,11無意義)進行,共需內(nèi)存2^32*2bit=1GB內(nèi)存禾怠,還可以接受返奉。然后掃描這2.5億個整數(shù),查看Bitmap中相對應(yīng)位吗氏,如果是00變01芽偏,01變10,10保持不變弦讽。所描完事后污尉,查看bitmap,把對應(yīng)位是01的整數(shù)輸出即可往产。
- 方案2:也可采用與第1題類似的方法被碗,進行劃分小文件的方法。然后在小文件中找出不重復(fù)的整數(shù)仿村,并排序锐朴。然后再進行歸并,注意去除重復(fù)的元素蔼囊。
7. 騰訊面試題:給40億個不重復(fù)的unsignedint的整數(shù)包颁,沒排過序的,然后再給一個數(shù)压真,如何快速判斷這個數(shù)是否在那40億個數(shù)當中?
- 申請512M的內(nèi)存娩嚼,一個bit位代表一個unsignedint值。讀入40億個數(shù)滴肿,設(shè)置相應(yīng)的bit位岳悟,讀入要查詢的數(shù),查看相應(yīng)bit位是否為1泼差,為1表示存在贵少,為0表示不存在。
Spark section-6 機器學(xué)習(xí)算法(4)
**1. mllib支持的算法堆缘? **
- 分類滔灶、聚類、回歸吼肥、協(xié)同過濾
2. kmeans算法原理
- 隨機初始化中心點范圍录平,計算各個類別的平均值得到新的中心點麻车。
- 重新計算各個點到中心值的距離劃分,再次計算平均值得到新的中心點斗这,直至各個類別數(shù)據(jù)平均值無變化动猬。
3. 樸素貝葉斯分類算法原理
對于待分類的數(shù)據(jù)和分類項,根據(jù)待分類數(shù)據(jù)的各個特征屬性表箭,出現(xiàn)在各個分類項中的概率判斷該數(shù)據(jù)是屬于哪個類別的赁咙。
4. 關(guān)聯(lián)規(guī)則挖掘算法apriori原理
- 一個頻繁項集的子集也是頻繁項集,針對數(shù)據(jù)得出每個產(chǎn)品的支持數(shù)列表免钻,過濾支持數(shù)小于預(yù)設(shè)值的項彼水,對剩下的項進行全排列,重新計算支持數(shù)极舔,再次過濾猿涨,重復(fù)至全排列結(jié)束,可得到頻繁項和對應(yīng)的支持數(shù)姆怪。
Spark section-7 Hive(2)
**1. Hive中存放是什么叛赚? **
- 表(數(shù)據(jù)+元數(shù)據(jù)) 存的是和hdfs的映射關(guān)系,hive是邏輯上的數(shù)據(jù)倉庫稽揭,實際操作的都是hdfs上的文件俺附,HQL就是用sql語法來寫的mr程序。
**2. Hive與關(guān)系型數(shù)據(jù)庫的關(guān)系溪掀? **
- 沒有關(guān)系事镣,hive是數(shù)據(jù)倉庫,不能和數(shù)據(jù)庫一樣進行實時的CURD操作揪胃。
- 是一次寫入多次讀取的操作璃哟,可以看成是ETL工具。
Spark服務(wù)端口
- 8080 spark集群web ui端口
- 4040 sparkjob監(jiān)控端口
- 18080 jobhistory端口
Spark Job 默認的調(diào)度模式 - FIFO
RDD 特點 - 可分區(qū)/可序列化/可持久化
Broadcast - 任何函數(shù)調(diào)用/是只讀的/存儲在各個節(jié)點
Accumulator - 支持加法/支持數(shù)值類型/可并行
Task 數(shù)量由 Partition 決定
Task 運行在 Workder node 中 Executor 上的工作單元
master 和 worker 通過 Akka 方式進行通信的
默認的存儲級別 - MEMORY_ONLY
hive 的元數(shù)據(jù)存儲在 derby 和 MySQL 中有什么區(qū)別 - 多會話
DataFrame 和 RDD 最大的區(qū)別 - 多了 schema