大數(shù)據(jù)面試題

spark算子

https://blog.csdn.net/dream0352/article/details/62229977

hadoop相關(guān)

hadoop平臺

hadoop平臺

現(xiàn)在普遍認(rèn)為整個Apache Hadoop“平臺”包括Hadoop內(nèi)核疆导、MapReduce、Hadoop分布式文件系統(tǒng)(HDFS)以及一些相關(guān)項目,有Apache Hive和Apache HBase等等薯嗤。
Hadoop的框架最核心的設(shè)計就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲屡限,則MapReduce為海量的數(shù)據(jù)提供了計算皱碘。

如圖,最下面一層就是hadoop的核心代碼悠夯,核心代碼之上實現(xiàn)了兩個最核心的功能:MapReduce和HDFS,這是hadoop的兩大支柱躺坟!因為hadoop是Java寫的沦补,為了方便其他對Java語言不熟悉的程序員,在這之上又有Pig咪橙,這是一個輕量級的語言夕膀,用戶可以使用Pig用于數(shù)據(jù)分析和處理,系統(tǒng)會自動把它轉(zhuǎn)化為MapReduce程序美侦。

還有一個Hive产舞,這是一個傳統(tǒng)的SQL到MapReduce的映射器,面向傳統(tǒng)的數(shù)據(jù)庫工程師菠剩。但是不支持全部SQL易猫。還有一個子項目叫HBase,一個非關(guān)系數(shù)據(jù)庫具壮,NoSQL數(shù)據(jù)庫准颓,數(shù)據(jù)是列存儲的哈蝇,提高響應(yīng)速度,減少IO量攘已,可以做成分布式集群炮赦。

ZooKeeper負(fù)責(zé)服務(wù)器節(jié)點和進(jìn)程間的通信,是一個協(xié)調(diào)工具贯被,因為Hadoop的幾乎每個子項目都是用動物做logo眼五,故這個協(xié)調(diào)軟件叫動物園管理員。

  • hdfs:
  • zookeeper:
  • YARN(Yet Another Resource Nagotiator彤灶,又一資源定位器):用于作業(yè)調(diào)度和集群資源管理的框架看幼。

簡答說一下hadoop的map-reduce編程模型
MapReducer工作過程

  • 首先map task會從本地文件系統(tǒng)讀取數(shù)據(jù),轉(zhuǎn)換成key-value形式的鍵值對集合幌陕,使用的是hadoop內(nèi)置的數(shù)據(jù)類型诵姜,比如longwritable、text等搏熄;
  • 將鍵值對集合輸入mapper進(jìn)行業(yè)務(wù)處理過程棚唆,將其轉(zhuǎn)換成需要的key-value在輸出之后會進(jìn)行一個partition分區(qū)操作,默認(rèn)使用的是hashpartitioner心例,可以通過重寫hashpartitioner的getpartition方法來自定義分區(qū)規(guī)則宵凌;
  • 之后會對key進(jìn)行進(jìn)行sort排序,grouping分組操作將相同key的value合并分組輸出止后,在這里可以使用自定義的數(shù)據(jù)類型瞎惫,重寫WritableComparator的Comparator方法來自定義排序規(guī)則,重寫RawComparator的compara方法來自定義分組規(guī)則
  • 之后進(jìn)行一個combiner歸約操作译株,其實就是一個本地段的reduce預(yù)處理瓜喇,以減小后面shufle和reducer的工作量
  • reduce task會通過網(wǎng)絡(luò)將各個數(shù)據(jù)收集進(jìn)行reduce處理,最后將數(shù)據(jù)保存或者顯示歉糜,結(jié)束整個join

hadoop架構(gòu)

  • Namenode:也叫名稱節(jié)點乘寒,是HDFS的守護(hù)程序(一個核心程序),對整個分布式文件系統(tǒng)進(jìn)行總控制匪补,會紀(jì)錄所有的元數(shù)據(jù)分布存儲的狀態(tài)信息伞辛,比如文件是如何分割成數(shù)據(jù)塊的,以及這些數(shù)據(jù)塊被存儲到哪些節(jié)點上夯缺,還有對內(nèi)存和I/O進(jìn)行集中管理始锚,用戶首先會訪問Namenode,通過該總控節(jié)點獲取文件分布的狀態(tài)信息喳逛,找到文件分布到了哪些數(shù)據(jù)節(jié)點,然后在和這些節(jié)點打交道棵里,把文件拿到润文。故這是一個核心節(jié)點姐呐。
    不過這是個單點,發(fā)生故障將使集群崩潰典蝌。

  • Secondary Namenode:輔助名稱節(jié)點曙砂,或者檢查點節(jié)點,它是監(jiān)控HDFS狀態(tài)的輔助后臺程序骏掀,可以保存名稱節(jié)點的副本鸠澈,故每個集群都有一個,它與NameNode進(jìn)行通訊截驮,定期保存HDFS元數(shù)據(jù)快照笑陈。NameNode故障可以作為備用NameNode使用,目前還不能自動切換葵袭。但是功能絕不僅限于此涵妥。所謂后備也不是它的主要功能。后續(xù)詳細(xì)解釋坡锡。

  • DataNode:叫數(shù)據(jù)節(jié)點蓬网,每臺從服務(wù)器節(jié)點都運行一個,負(fù)責(zé)把HDFS數(shù)據(jù)塊讀鹉勒、寫到本地文件系統(tǒng)帆锋。這三個東西組成了Hadoop平臺其中一個支柱——HDFS體系。

  • JobTracker:叫作業(yè)跟蹤器禽额,運行到主節(jié)點(Namenode)上的一個很重要的進(jìn)程锯厢,是MapReduce體系的調(diào)度器。用于處理作業(yè)(用戶提交的代碼)的后臺程序绵疲,決定有哪些文件參與作業(yè)的處理哲鸳,然后把作業(yè)切割成為一個個的小task,并把它們分配到所需要的數(shù)據(jù)所在的子節(jié)點盔憨。
    Hadoop的原則就是就近運行徙菠,數(shù)據(jù)和程序要在同一個物理節(jié)點里,數(shù)據(jù)在哪里郁岩,程序就跑去哪里運行婿奔。這個工作是JobTracker做的,監(jiān)控task问慎,還會重啟失敗的task(于不同的節(jié)點)盐类,每個集群只有唯一一個JobTracker,類似單點的nn村生,位于Master節(jié)點(稍后解釋Master節(jié)點和slave節(jié)點)沿量。

  • TaskTracker:叫任務(wù)跟蹤器,MapReduce體系的最后一個后臺進(jìn)程,位于每個slave節(jié)點上踊沸,與datanode結(jié)合(代碼與數(shù)據(jù)一起的原則)歇终,管理各自節(jié)點上的task(由jobtracker分配),每個節(jié)點只有一個tasktracker逼龟,但一個tasktracker可以啟動多個JVM评凝,用于并行執(zhí)行map或reduce任務(wù),它與jobtracker交互通信腺律,可以告知jobtracker子任務(wù)完成情況奕短。

  • Master與Slave:
    Master節(jié)點:運行了Namenode、或者Secondary Namenode匀钧、或者Jobtracker的節(jié)點翎碑。還有瀏覽器(用于觀看管理界面),等其它Hadoop工具榴捡。Master不是唯一的杈女!
    Slave節(jié)點:運行Tasktracker、Datanode的機器吊圾。

hadoop的TextInputFormat作用是什么达椰,如何自定義實現(xiàn)
InputFormat會在map操作之前對數(shù)據(jù)進(jìn)行兩方面的預(yù)處理
1是getSplits,返回的是InputSplit數(shù)組项乒,對數(shù)據(jù)進(jìn)行split分片啰劲,每片交給map操作一次
2是getRecordReader,返回的是RecordReader對象檀何,對每個split分片進(jìn)行轉(zhuǎn)換為key-value鍵值對格式傳遞給map

常用的InputFormat是TextInputFormat蝇裤,使用的是LineRecordReader對每個分片進(jìn)行鍵值對的轉(zhuǎn)換,以行偏移量作為鍵频鉴,行內(nèi)容作為值

自定義類繼承InputFormat接口栓辜,重寫createRecordReader和isSplitable方法
在createRecordReader中可以自定義分隔符

hadoop和spark的都是并行計算,那么他們有什么相同和區(qū)別

兩者都是用mr模型來進(jìn)行并行計算垛孔,hadoop的一個作業(yè)稱為job藕甩,job里面分為map task和reduce task,每個task都是在自己的進(jìn)程中運行的周荐,當(dāng)task結(jié)束時狭莱,進(jìn)程也會結(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)存進(jìn)行計算

hadoop的job只有map和reduce操作,表達(dá)能力比較欠缺而且在mr過程中會重復(fù)的讀寫hdfs规辱,造成大量的io操作,多個job需要自己管理關(guān)系

spark的迭代計算都是在內(nèi)存中進(jìn)行的栽燕,API中提供了大量的RDD操作如join罕袋,groupby等,而且通過DAG圖可以實現(xiàn)良好的容錯碍岔。

為什么要用flume導(dǎo)入hdfs浴讯,hdfs的構(gòu)架是怎樣的

flume可以實時的導(dǎo)入數(shù)據(jù)到hdfs中,當(dāng)hdfs上的文件達(dá)到一個指定大小的時候會形成一個文件蔼啦,或者超過指定時間的話也形成一個文件

文件都是存儲在datanode上面的榆纽,namenode記錄著datanode的元數(shù)據(jù)信息,而namenode的元數(shù)據(jù)信息是存在內(nèi)存中的捏肢,所以當(dāng)文件切片很小或者很多的時候會卡死

map-reduce程序運行的時候會有什么比較常見的問題

比如說作業(yè)中大部分都完成了奈籽,但是總有幾個reduce一直在運行

這是因為這幾個reduce中的處理的數(shù)據(jù)要遠(yuǎn)遠(yuǎn)大于其他的reduce,可能是因為對鍵值對任務(wù)劃分的不均勻造成的數(shù)據(jù)傾斜

解決的方法可以在分區(qū)的時候重新定義分區(qū)規(guī)則對于value數(shù)據(jù)很多的key可以進(jìn)行拆分鸵赫、均勻打散等處理衣屏,或者是在map端的combiner中進(jìn)行數(shù)據(jù)預(yù)處理的操作

簡單說一下hadoop和spark的shuffle過程

hadoop:map端保存分片數(shù)據(jù),通過網(wǎng)絡(luò)收集到reduce端
spark:spark的shuffle是在DAGSchedular劃分Stage的時候產(chǎn)生的辩棒,TaskSchedule要分發(fā)Stage到各個worker的executor

減少shuffle可以提高性能

——-補充更新———

1狼忱、Hive中存放是什么?
表一睁。
存的是和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ù)庫一樣進(jìn)行實時的CURD操作染坯。
是一次寫入多次讀取的操作均芽,可以看成是ETL工具。

3单鹿、Flume工作機制是什么掀宋?
核心概念是agent,里面包括source、chanel和sink三個組件劲妙。
source運行在日志收集節(jié)點進(jìn)行日志采集湃鹊,之后臨時存儲在chanel中,sink負(fù)責(zé)將chanel中的數(shù)據(jù)發(fā)送到目的地镣奋。
只有成功發(fā)送之后chanel中的數(shù)據(jù)才會被刪除币呵。
首先書寫flume配置文件,定義agent侨颈、source余赢、chanel和sink然后將其組裝,執(zhí)行flume-ng命令哈垢。

4妻柒、Sqoop工作原理是什么?
hadoop生態(tài)圈上的數(shù)據(jù)傳輸工具耘分。
可以將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入非結(jié)構(gòu)化的hdfs举塔、hive或者bbase中,也可以將hdfs中的數(shù)據(jù)導(dǎo)出到關(guān)系型數(shù)據(jù)庫或者文本文件中求泰。
使用的是mr程序來執(zhí)行任務(wù)央渣,使用jdbc和關(guān)系型數(shù)據(jù)庫進(jìn)行交互。
import原理:通過指定的分隔符進(jìn)行數(shù)據(jù)切分拜秧,將分片傳入各個map中痹屹,在map任務(wù)中在每行數(shù)據(jù)進(jìn)行寫入處理沒有reduce。
export原理:根據(jù)要操作的表名生成一個java類枉氮,并讀取其元數(shù)據(jù)信息和分隔符對非結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行匹配志衍,多個map作業(yè)同時執(zhí)行寫入關(guān)系型數(shù)據(jù)庫

5、Hbase行健列族的概念聊替,物理模型楼肪,表的設(shè)計原則?
行饺乔摹:是hbase表自帶的春叫,每個行健對應(yīng)一條數(shù)據(jù)。
列族:是創(chuàng)建表時指定的泣港,為列的集合暂殖,每個列族作為一個文件單獨存儲,存儲的數(shù)據(jù)都是字節(jié)數(shù)組当纱,其中的數(shù)據(jù)可以有很多呛每,通過時間戳來區(qū)分。
物理模型:整個hbase表會拆分為多個region坡氯,每個region記錄著行健的起始點保存在不同的節(jié)點上晨横,查詢時就是對各個節(jié)點的并行查詢洋腮,當(dāng)region很大時使用.META表存儲各個region的起始點,-ROOT又可以存儲.META的起始點手形。
rowkey的設(shè)計原則:各個列簇數(shù)據(jù)平衡啥供,長度原則、相鄰原則库糠,創(chuàng)建表的時候設(shè)置表放入regionserver緩存中伙狐,避免自動增長和時間,使用字節(jié)數(shù)組代替string曼玩,最大長度64kb鳞骤,最好16字節(jié)以內(nèi),按天分表黍判,兩個字節(jié)散列,四個字節(jié)存儲時分毫秒篙梢。
列族的設(shè)計原則:盡可能少(按照列族進(jìn)行存儲顷帖,按照region進(jìn)行讀取,不必要的io操作)渤滞,經(jīng)常和不經(jīng)常使用的兩類數(shù)據(jù)放入不同列族中贬墩,列族名字盡可能短。

6妄呕、Spark Streaming和Storm有何區(qū)別陶舞?
一個實時毫秒一個準(zhǔn)實時亞秒,不過storm的吞吐率比較低绪励。

7肿孵、mllib支持的算法?
大體分為四大類疏魏,分類停做、聚類、回歸大莫、協(xié)同過濾蛉腌。

8、簡答說一下hadoop的map-reduce編程模型只厘?
首先map task會從本地文件系統(tǒng)讀取數(shù)據(jù)烙丛,轉(zhuǎn)換成key-value形式的鍵值對集合。
將鍵值對集合輸入mapper進(jìn)行業(yè)務(wù)處理過程羔味,將其轉(zhuǎn)換成需要的key-value在輸出河咽。
之后會進(jìn)行一個partition分區(qū)操作,默認(rèn)使用的是hashpartitioner介评,可以通過重寫hashpartitioner的getpartition方法來自定義分區(qū)規(guī)則库北。
之后會對key進(jìn)行進(jìn)行sort排序爬舰,grouping分組操作將相同key的value合并分組輸出。
在這里可以使用自定義的數(shù)據(jù)類型寒瓦,重寫WritableComparator的Comparator方法來自定義排序規(guī)則情屹,重寫RawComparator的compara方法來自定義分組規(guī)則。
之后進(jìn)行一個combiner歸約操作杂腰,其實就是一個本地段的reduce預(yù)處理垃你,以減小后面shufle和reducer的工作量。
reduce task會通過網(wǎng)絡(luò)將各個數(shù)據(jù)收集進(jìn)行reduce處理喂很,最后將數(shù)據(jù)保存或者顯示惜颇,結(jié)束整個job。

9少辣、Hadoop平臺集群配置凌摄、環(huán)境變量設(shè)置?
zookeeper:修改zoo.cfg文件漓帅,配置dataDir锨亏,和各個zk節(jié)點的server地址端口,tickTime心跳時間默認(rèn)是2000ms忙干,其他超時的時間都是以這個為基礎(chǔ)的整數(shù)倍器予,之后再dataDir對應(yīng)目錄下寫入myid文件和zoo.cfg中的server相對應(yīng)。

hadoop:修改
hadoop-env.sh配置java環(huán)境變量
core-site.xml配置zk地址捐迫,臨時目錄等
hdfs-site.xml配置nn信息乾翔,rpc和http通信地址,nn自動切換施戴、zk連接超時時間等
yarn-site.xml配置resourcemanager地址
mapred-site.xml配置使用yarn
slaves配置節(jié)點信息
格式化nn和zk反浓。

hbase:修改
hbase-env.sh配置java環(huán)境變量和是否使用自帶的zk
hbase-site.xml配置hdfs上數(shù)據(jù)存放路徑,zk地址和通訊超時時間暇韧、master節(jié)點
regionservers配置各個region節(jié)點
zoo.cfg拷貝到conf目錄下

spark:
安裝Scala
修改spark-env.sh配置環(huán)境變量和master和worker節(jié)點配置信息

環(huán)境變量的設(shè)置:直接在/etc/profile中配置安裝的路徑即可勾习,或者在當(dāng)前用戶的宿主目錄下,配置在.bashrc文件中懈玻,該文件不用source重新打開shell窗口即可巧婶,配置在.bash_profile的話只對當(dāng)前用戶有效。

10涂乌、Hadoop性能調(diào)優(yōu)艺栈?

調(diào)優(yōu)可以通過系統(tǒng)配置、程序編寫和作業(yè)調(diào)度算法來進(jìn)行湾盒。
hdfs的block.size可以調(diào)到128/256(網(wǎng)絡(luò)很好的情況下湿右,默認(rèn)為64)
調(diào)優(yōu)的大頭:mapred.map.tasks、mapred.reduce.tasks設(shè)置mr任務(wù)數(shù)(默認(rèn)都是1)
mapred.tasktracker.map.tasks.maximum每臺機器上的最大map任務(wù)數(shù)
mapred.tasktracker.reduce.tasks.maximum每臺機器上的最大reduce任務(wù)數(shù)
mapred.reduce.slowstart.completed.maps配置reduce任務(wù)在map任務(wù)完成到百分之幾的時候開始進(jìn)入
這個幾個參數(shù)要看實際節(jié)點的情況進(jìn)行配置罚勾,reduce任務(wù)是在33%的時候完成copy毅人,要在這之前完成map任務(wù)吭狡,(map可以提前完成)
mapred.compress.map.output,mapred.output.compress配置壓縮項,消耗cpu提升網(wǎng)絡(luò)和磁盤io
合理利用combiner
注意重用writable對象

11丈莺、Hadoop高并發(fā)划煮?
首先肯定要保證集群的高可靠性,在高并發(fā)的情況下不會掛掉缔俄,支撐不住可以通過橫向擴展弛秋。
datanode掛掉了使用hadoop腳本重新啟動。

12俐载、hadoop的TextInputFormat作用是什么蟹略,如何自定義實現(xiàn)?
InputFormat會在map操作之前對數(shù)據(jù)進(jìn)行兩方面的預(yù)處理遏佣。
1是getSplits挖炬,返回的是InputSplit數(shù)組,對數(shù)據(jù)進(jìn)行split分片状婶,每片交給map操作一次 茅茂。
2是getRecordReader,返回的是RecordReader對象太抓,對每個split分片進(jìn)行轉(zhuǎn)換為key-value鍵值對格式傳遞給map。
常用的InputFormat是TextInputFormat令杈,使用的是LineRecordReader對每個分片進(jìn)行鍵值對的轉(zhuǎn)換走敌,以行偏移量作為鍵,行內(nèi)容作為值逗噩。
自定義類繼承InputFormat接口掉丽,重寫createRecordReader和isSplitable方法 。
在createRecordReader中可以自定義分隔符异雁。

13捶障、hadoop和spark的都是并行計算,那么他們有什么相同和區(qū)別纲刀?
兩者都是用mr模型來進(jìn)行并行計算项炼,hadoop的一個作業(yè)稱為job,job里面分為map task和reduce task示绊,每個task都是在自己的進(jìn)程中運行的锭部,當(dāng)task結(jié)束時,進(jìn)程也會結(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)存進(jìn)行計算。
hadoop的job只有map和reduce操作泽篮,表達(dá)能力比較欠缺而且在mr過程中會重復(fù)的讀寫hdfs盗尸,造成大量的io操作,多個job需要自己管理關(guān)系帽撑。
spark的迭代計算都是在內(nèi)存中進(jìn)行的泼各,API中提供了大量的RDD操作如join,groupby等亏拉,而且通過DAG圖可以實現(xiàn)良好的容錯扣蜻。

14、為什么要用flume導(dǎo)入hdfs及塘,hdfs的構(gòu)架是怎樣的莽使?
flume可以實時的導(dǎo)入數(shù)據(jù)到hdfs中,當(dāng)hdfs上的文件達(dá)到一個指定大小的時候會形成一個文件笙僚,或者超過指定時間的話也形成一個文件芳肌。
文件都是存儲在datanode上面的,namenode記錄著datanode的元數(shù)據(jù)信息肋层,而namenode的元數(shù)據(jù)信息是存在內(nèi)存中的亿笤,所以當(dāng)文件切片很小或者很多的時候會卡死。

15栋猖、map-reduce程序運行的時候會有什么比較常見的問題净薛?
比如說作業(yè)中大部分都完成了,但是總有幾個reduce一直在運行蒲拉。
這是因為這幾個reduce中的處理的數(shù)據(jù)要遠(yuǎn)遠(yuǎn)大于其他的reduce肃拜,可能是因為對鍵值對任務(wù)劃分的不均勻造成的數(shù)據(jù)傾斜。
解決的方法可以在分區(qū)的時候重新定義分區(qū)規(guī)則對于value數(shù)據(jù)很多的key可以進(jìn)行拆分全陨、均勻打散等處理爆班,或者是在map端的combiner中進(jìn)行數(shù)據(jù)預(yù)處理的操作。

16辱姨、簡單說一下hadoop和spark的shuffle過程柿菩?
hadoop:map端保存分片數(shù)據(jù),通過網(wǎng)絡(luò)收集到reduce端雨涛。
spark:spark的shuffle是在DAGSchedular劃分Stage的時候產(chǎn)生的枢舶,TaskSchedule要分發(fā)Stage到各個worker的executor懦胞。
減少shuffle可以提高性能。

17凉泄、RDD機制躏尉?
rdd分布式彈性數(shù)據(jù)集,簡單的理解成一種數(shù)據(jù)結(jié)構(gòu)后众,是spark框架上的通用貨幣胀糜。
所有算子都是基于rdd來執(zhí)行的,不同的場景會有不同的rdd實現(xiàn)類蒂誉,但是都可以進(jìn)行互相轉(zhuǎn)換教藻。
rdd執(zhí)行過程中會形成dag圖,然后形成lineage保證容錯性等右锨。
從物理的角度來看rdd存儲的是block和node之間的映射括堤。

18、spark有哪些組件绍移?
(1)master:管理集群和節(jié)點悄窃,不參與計算。
(2)worker:計算節(jié)點蹂窖,進(jìn)程本身不參與計算轧抗,和master匯報。
(3)Driver:運行程序的main方法瞬测,創(chuàng)建spark context對象鸦致。
(4)spark context:控制整個application的生命周期,包括dagsheduler和task scheduler等組件涣楷。
(5)client:用戶提交程序的入口。

19抗碰、spark工作機制狮斗?
用戶在client端提交作業(yè)后,會由Driver運行main方法并創(chuàng)建spark context上下文弧蝇。
執(zhí)行add算子碳褒,形成dag圖輸入dagscheduler,按照add之間的依賴關(guān)系劃分stage輸入task scheduler看疗。
task scheduler會將stage劃分為task set分發(fā)到各個節(jié)點的executor中執(zhí)行沙峻。

20、spark的優(yōu)化怎么做两芳?
通過spark-env文件摔寨、程序中sparkconf和set property設(shè)置。
(1)計算量大怖辆,形成的lineage過大應(yīng)該給已經(jīng)緩存了的rdd添加checkpoint是复,以減少容錯帶來的開銷删顶。
(2)小分區(qū)合并,過小的分區(qū)造成過多的切換任務(wù)開銷淑廊,使用repartition逗余。

21、kafka工作原理季惩?
producer向broker發(fā)送事件录粱,consumer從broker消費事件。
事件由topic區(qū)分開画拾,每個consumer都會屬于一個group啥繁。
相同group中的consumer不能重復(fù)消費事件,而同一事件將會發(fā)送給每個不同group的consumer碾阁。

22输虱、ALS算法原理?
答:對于user-product-rating數(shù)據(jù)脂凶,als會建立一個稀疏的評分矩陣宪睹,其目的就是通過一定的規(guī)則填滿這個稀疏矩陣。
als會對稀疏矩陣進(jìn)行分解蚕钦,分為用戶-特征值亭病,產(chǎn)品-特征值,一個用戶對一個產(chǎn)品的評分可以由這兩個矩陣相乘得到嘶居。
通過固定一個未知的特征值罪帖,計算另外一個特征值,然后交替反復(fù)進(jìn)行最小二乘法邮屁,直至差平方和最小整袁,即可得想要的矩陣。

23佑吝、kmeans算法原理坐昙?
隨機初始化中心點范圍,計算各個類別的平均值得到新的中心點芋忿。
重新計算各個點到中心值的距離劃分炸客,再次計算平均值得到新的中心點,直至各個類別數(shù)據(jù)平均值無變化戈钢。

24痹仙、canopy算法原理?
根據(jù)兩個閾值來劃分?jǐn)?shù)據(jù)殉了,以隨機的一個數(shù)據(jù)點作為canopy中心开仰。
計算其他數(shù)據(jù)點到其的距離,劃入t1、t2中抖所,劃入t2的從數(shù)據(jù)集中刪除梨州,劃入t1的其他數(shù)據(jù)點繼續(xù)計算,直至數(shù)據(jù)集中無數(shù)據(jù)田轧。

25暴匠、樸素貝葉斯分類算法原理?
對于待分類的數(shù)據(jù)和分類項傻粘,根據(jù)待分類數(shù)據(jù)的各個特征屬性每窖,出現(xiàn)在各個分類項中的概率判斷該數(shù)據(jù)是屬于哪個類別的。

26弦悉、關(guān)聯(lián)規(guī)則挖掘算法apriori原理窒典?
一個頻繁項集的子集也是頻繁項集,針對數(shù)據(jù)得出每個產(chǎn)品的支持?jǐn)?shù)列表稽莉,過濾支持?jǐn)?shù)小于預(yù)設(shè)值的項瀑志,對剩下的項進(jìn)行全排列,重新計算支持?jǐn)?shù)污秆,再次過濾劈猪,重復(fù)至全排列結(jié)束,可得到頻繁項和對應(yīng)的支持?jǐn)?shù)良拼。

作者:@小黑

以下是自己的理解战得,如果有不對的地方希望各位大俠可以幫我指出來~:

1、簡答說一下hadoop的map-reduce編程模型

首先map task會從本地文件系統(tǒng)讀取數(shù)據(jù)庸推,轉(zhuǎn)換成key-value形式的鍵值對集合

使用的是hadoop內(nèi)置的數(shù)據(jù)類型常侦,比如longwritable、text等

將鍵值對集合輸入mapper進(jìn)行業(yè)務(wù)處理過程贬媒,將其轉(zhuǎn)換成需要的key-value在輸出

之后會進(jìn)行一個partition分區(qū)操作聋亡,默認(rèn)使用的是hashpartitioner,可以通過重寫hashpartitioner的getpartition方法來自定義分區(qū)規(guī)則

之后會對key進(jìn)行進(jìn)行sort排序际乘,grouping分組操作將相同key的value合并分組輸出杀捻,在這里可以使用自定義的數(shù)據(jù)類型,重寫WritableComparator的Comparator方法來自定義排序規(guī)則蚓庭,重寫RawComparator的compara方法來自定義分組規(guī)則

之后進(jìn)行一個combiner歸約操作,其實就是一個本地段的reduce預(yù)處理仅仆,以減小后面shufle和reducer的工作量

reduce task會通過網(wǎng)絡(luò)將各個數(shù)據(jù)收集進(jìn)行reduce處理器赞,最后將數(shù)據(jù)保存或者顯示,結(jié)束整個job

2墓拜、hadoop的TextInputFormat作用是什么港柜,如何自定義實現(xiàn)

InputFormat會在map操作之前對數(shù)據(jù)進(jìn)行兩方面的預(yù)處理
1是getSplits,返回的是InputSplit數(shù)組,對數(shù)據(jù)進(jìn)行split分片夏醉,每片交給map操作一次
2是getRecordReader爽锥,返回的是RecordReader對象,對每個split分片進(jìn)行轉(zhuǎn)換為key-value鍵值對格式傳遞給map

常用的InputFormat是TextInputFormat畔柔,使用的是LineRecordReader對每個分片進(jìn)行鍵值對的轉(zhuǎn)換氯夷,以行偏移量作為鍵,行內(nèi)容作為值

自定義類繼承InputFormat接口靶擦,重寫createRecordReader和isSplitable方法
在createRecordReader中可以自定義分隔符

3腮考、hadoop和spark的都是并行計算,那么他們有什么相同和區(qū)別

兩者都是用mr模型來進(jìn)行并行計算玄捕,hadoop的一個作業(yè)稱為job踩蔚,job里面分為map task和reduce task,每個task都是在自己的進(jìn)程中運行的枚粘,當(dāng)task結(jié)束時馅闽,進(jìn)程也會結(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)存進(jìn)行計算

hadoop的job只有map和reduce操作撕捍,表達(dá)能力比較欠缺而且在mr過程中會重復(fù)的讀寫hdfs拿穴,造成大量的io操作,多個job需要自己管理關(guān)系

spark的迭代計算都是在內(nèi)存中進(jìn)行的忧风,API中提供了大量的RDD操作如join默色,groupby等,而且通過DAG圖可以實現(xiàn)良好的容錯

4狮腿、為什么要用flume導(dǎo)入hdfs腿宰,hdfs的構(gòu)架是怎樣的

flume可以實時的導(dǎo)入數(shù)據(jù)到hdfs中,當(dāng)hdfs上的文件達(dá)到一個指定大小的時候會形成一個文件缘厢,或者超過指定時間的話也形成一個文件

文件都是存儲在datanode上面的吃度,namenode記錄著datanode的元數(shù)據(jù)信息,而namenode的元數(shù)據(jù)信息是存在內(nèi)存中的贴硫,所以當(dāng)文件切片很小或者很多的時候會卡死

5椿每、map-reduce程序運行的時候會有什么比較常見的問題

比如說作業(yè)中大部分都完成了伊者,但是總有幾個reduce一直在運行

這是因為這幾個reduce中的處理的數(shù)據(jù)要遠(yuǎn)遠(yuǎn)大于其他的reduce,可能是因為對鍵值對任務(wù)劃分的不均勻造成的數(shù)據(jù)傾斜

解決的方法可以在分區(qū)的時候重新定義分區(qū)規(guī)則對于value數(shù)據(jù)很多的key可以進(jìn)行拆分间护、均勻打散等處理亦渗,或者是在map端的combiner中進(jìn)行數(shù)據(jù)預(yù)處理的操作

6、簡單說一下hadoop和spark的shuffle過程

hadoop:map端保存分片數(shù)據(jù)汁尺,通過網(wǎng)絡(luò)收集到reduce端
spark:spark的shuffle是在DAGSchedular劃分Stage的時候產(chǎn)生的法精,TaskSchedule要分發(fā)Stage到各個worker的executor

減少shuffle可以提高性能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市均函,隨后出現(xiàn)的幾起案子亿虽,更是在濱河造成了極大的恐慌,老刑警劉巖苞也,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洛勉,死亡現(xiàn)場離奇詭異,居然都是意外死亡如迟,警方通過查閱死者的電腦和手機收毫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來殷勘,“玉大人此再,你說我怎么就攤上這事×嵯” “怎么了输拇?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贤斜。 經(jīng)常有香客問我策吠,道長,這世上最難降的妖魔是什么瘩绒? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任猴抹,我火速辦了婚禮,結(jié)果婚禮上锁荔,老公的妹妹穿的比我還像新娘蟀给。我一直安慰自己,他們只是感情好阳堕,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布跋理。 她就那樣靜靜地躺著,像睡著了一般恬总。 火紅的嫁衣襯著肌膚如雪前普。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天越驻,我揣著相機與錄音,去河邊找鬼。 笑死缀旁,一個胖子當(dāng)著我的面吹牛记劈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播并巍,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼目木,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了懊渡?” 一聲冷哼從身側(cè)響起刽射,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剃执,沒想到半個月后誓禁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡肾档,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年摹恰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怒见。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡俗慈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遣耍,到底是詐尸還是另有隱情闺阱,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布舵变,位于F島的核電站酣溃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棋傍。R本人自食惡果不足惜救拉,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘫拣。 院中可真熱鬧亿絮,春花似錦、人聲如沸麸拄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拢切。三九已至蒂萎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淮椰,已是汗流浹背五慈。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工纳寂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泻拦。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓毙芜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親争拐。 傳聞我的和親對象是個殘疾皇子腋粥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容