国产精品色哟哟_男男激情3p互攻_色偷偷影院_和女同学厕所做了四次

當(dāng)前位置: 首頁 / 技術(shù)干貨 / 正文
好程序員大數(shù)據(jù)培訓(xùn)之大數(shù)據(jù)面試題整理

2020-09-28

大數(shù)據(jù)培訓(xùn) 大數(shù)據(jù)面試題

  今天好程序員大數(shù)據(jù)培訓(xùn)老師給大家分享一篇關(guān)于大數(shù)據(jù)面試題整理的詳細(xì)介紹,下面我們一起來看一下吧。

好程序員

  一、.hdfs寫文件的步驟

  答案:

  (1)client向NameNode申請(qǐng)上傳…/xxx.txt文件

  (2)NN向client響應(yīng)可以上傳文件

  (3)Client向NameNode申請(qǐng)DataNode

  (4)NN向Client返回DN1,DN2,DN3

  (5)Client向DN1,DN2,DN3申請(qǐng)建立文件傳輸通道

  (6)DN3,DN2,DN1依次響應(yīng)連接

  (7)Client向DN1上傳一個(gè)block,DN1向DN2,DN3冗余文件

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

  二、hdfs讀取文件步驟

  答案:

  (1)client向NN請(qǐng)求下載…/xxx.txt文件

  (2)NN向client返回文件的元數(shù)據(jù)

  (3)Client向DN1請(qǐng)求訪問讀數(shù)據(jù)blk_1

  (4)DN1向Client傳輸數(shù)據(jù)

  (5)Client向DN2請(qǐng)求訪問讀數(shù)據(jù)blk_2

  (6)DN2向Client傳輸數(shù)據(jù)

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

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

  三、hadoop的shuffle過程

  1.Map端的shuffle

  Map端會(huì)處理輸入數(shù)據(jù)并產(chǎn)生中間結(jié)果,這個(gè)中間結(jié)果會(huì)寫到本地磁盤,而不是HDFS。每個(gè)Map的輸出會(huì)先寫到內(nèi)存緩沖區(qū)中,當(dāng)寫入的數(shù)據(jù)達(dá)到設(shè)定的閾值時(shí),系統(tǒng)將會(huì)啟動(dòng)一個(gè)線程將緩沖區(qū)的數(shù)據(jù)寫到磁盤,這個(gè)過程叫做spill。

  在spill寫入之前,會(huì)先進(jìn)行二次排序,首先根據(jù)數(shù)據(jù)所屬的partition進(jìn)行排序,然后每個(gè)partition中的數(shù)據(jù)再按key來排序。partition的目是將記錄劃分到不同的Reducer上去,以期望能夠達(dá)到負(fù)載均衡,以后的Reducer就會(huì)根據(jù)partition來讀取自己對(duì)應(yīng)的數(shù)據(jù)。接著運(yùn)行combiner(如果設(shè)置了的話),combiner的本質(zhì)也是一個(gè)Reducer,其目的是對(duì)將要寫入到磁盤上的文件先進(jìn)行一次處理,這樣,寫入到磁盤的數(shù)據(jù)量就會(huì)減少。zui后將數(shù)據(jù)寫到本地磁盤產(chǎn)生spill文件(spill文件保存在{mapred.local.dir}指定的目錄中,Map任務(wù)結(jié)束后就會(huì)被刪除)。

  zui后,每個(gè)Map任務(wù)可能產(chǎn)生多個(gè)spill文件,在每個(gè)Map任務(wù)完成前,會(huì)通過多路歸并算法將這些spill文件歸并成一個(gè)文件。至此,Map的shuffle過程就結(jié)束了。

  2.Reduce端的shuffle

  Reduce端的shuffle主要包括三個(gè)階段,copy、sort(merge)和reduce。

  首先要將Map端產(chǎn)生的輸出文件拷貝到Reduce端,但每個(gè)Reducer如何知道自己應(yīng)該處理哪些數(shù)據(jù)呢?因?yàn)镸ap端進(jìn)行partition的時(shí)候,實(shí)際上就相當(dāng)于指定了每個(gè)Reducer要處理的數(shù)據(jù)(partition就對(duì)應(yīng)了Reducer),所以Reducer在拷貝數(shù)據(jù)的時(shí)候只需拷貝與自己對(duì)應(yīng)的partition中的數(shù)據(jù)即可。每個(gè)Reducer會(huì)處理一個(gè)或者多個(gè)partition,但需要先將自己對(duì)應(yīng)的partition中的數(shù)據(jù)從每個(gè)Map的輸出結(jié)果中拷貝過來。

  接下來就是sort階段,也成為merge階段,因?yàn)檫@個(gè)階段的主要工作是執(zhí)行了歸并排序。從Map端拷貝到Reduce端的數(shù)據(jù)都是有序的,所以很適合歸并排序。zui終在Reduce端生成一個(gè)較大的文件作為Reduce的輸入。

  zui后就是Reduce過程了,在這個(gè)過程中產(chǎn)生了zui終的輸出結(jié)果,并將其寫到HDFS上。

  四、fsimage和edit的區(qū)別?

  當(dāng)NN,SN要進(jìn)行數(shù)據(jù)同步時(shí)叫做checkpoint時(shí)就用到了fsimage與edit,fsimage是保存zui新的元數(shù)據(jù)的信息,當(dāng)fsimage數(shù)據(jù)到一定的大小事會(huì)去生成一個(gè)新的文件來保存元數(shù)據(jù)的信息,這個(gè)新的文件就是edit,edit會(huì)回滾zui新的數(shù)據(jù)。

  五、簡單說一下hadoop的map-reduce模型

  首先maptask會(huì)從本地文件系統(tǒng)讀取數(shù)據(jù),轉(zhuǎn)換成key-value形式的鍵值對(duì)集合,使用的是hadoop內(nèi)置的數(shù)據(jù)類型,如Text,Longwritable等。

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

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

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

  之后進(jìn)行一個(gè)combiner歸約操作,就是一個(gè)本地的reduce預(yù)處理,以減小shuffle,reducer的工作量。

  Reducetask會(huì)用過網(wǎng)絡(luò)將各個(gè)數(shù)據(jù)收集進(jìn)行reduce處理,zui后將數(shù)據(jù)保存或者顯示,結(jié)束整個(gè)job。

  六、運(yùn)行hadoop集群需要哪些守護(hù)進(jìn)程?

  DataNode,NameNode,TaskTracker和JobTracker都是運(yùn)行Hadoop集群需要的守護(hù)進(jìn)程。

  七、hadoop的TextInputFormat作用是什么,如何自定義實(shí)現(xiàn)?

  InputFormat會(huì)在map操作之前對(duì)數(shù)據(jù)進(jìn)行兩方面的預(yù)處理。

  1.是getSplits,返回的是InputSplit數(shù)組,對(duì)數(shù)據(jù)進(jìn)行Split分片,每片交給map操作一次。

  2.是getRecordReader,返回的是RecordReader對(duì)象,對(duì)每個(gè)Split分片進(jìn)行轉(zhuǎn)換為key-value鍵值對(duì)格式傳遞給map常用的InputFormat是TextInputFormat,使用的是LineRecordReader對(duì)每個(gè)分片進(jìn)行鍵值對(duì)的轉(zhuǎn)換,以行偏移量作為鍵,行內(nèi)容作為值。

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

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

  兩者都使用mr模型來進(jìn)行并行計(jì)算,hadoop的一個(gè)作業(yè)稱為job,job里面分為maptask和reducetask,每個(gè)task都是在自己的進(jìn)程中運(yùn)行的,當(dāng)task結(jié)束時(shí),進(jìn)程也會(huì)結(jié)束。

  Spark用戶提交的任務(wù)稱為application,一個(gè)application對(duì)應(yīng)一個(gè)SparkContext,app中存在多個(gè)job,沒觸發(fā)一個(gè)action操作就會(huì)產(chǎn)生一個(gè)job。

  這些job可以并行或者串行執(zhí)行,每個(gè)job有多個(gè)stage,stage是shuffle過程中DAGSchaduler通過RDD之間的依賴關(guān)系劃分job而來的,每個(gè)stage里面有多個(gè)task,組成taskset有TaskSchaduler分發(fā)到各個(gè)executor中執(zhí)行,executor的生命周期是和application一樣的,即使沒有job運(yùn)行也是存在的,所以task可以快速啟動(dòng)讀取內(nèi)存進(jìn)行計(jì)算的。

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

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

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

  Flume可以實(shí)時(shí)的導(dǎo)入數(shù)據(jù)到hdfs中,當(dāng)hdfs上的文件達(dá)到一個(gè)指定大小的時(shí)候會(huì)形成一個(gè)文件,或者超時(shí)所指定時(shí)間的話也形成一個(gè)文件。

  文件都是存儲(chǔ)在datanode上的,namenode存儲(chǔ)著datanode的元數(shù)據(jù)信息,而namenode的元數(shù)據(jù)信息是存在內(nèi)存中的,所以當(dāng)文件切片很小或者很多的時(shí)候會(huì)卡死。

  十、MR程序運(yùn)行的時(shí)候會(huì)有什么比較常見的問題?

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

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

  解決的方法可以在分區(qū)的時(shí)候重新定義分區(qū)規(guī)則對(duì)于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實(shí)在DAGSchedular劃分Stage的時(shí)候產(chǎn)生的,TaskSchedular要分發(fā)Stage到各個(gè)worker的executor。減少shuffle可以提高性能。

  十二、hive中存放的是什么?

  表。

  存的是和hdfs的映射關(guān)系,hive是邏輯上的數(shù)據(jù)倉庫,實(shí)際操作的都是hdfs上的文件,HQL就是用SQL語法來寫的MR程序。

  十三、Hive與關(guān)系型數(shù)據(jù)庫的關(guān)系?

  沒有關(guān)系,hive是數(shù)據(jù)倉庫,不能和數(shù)據(jù)庫一樣進(jìn)行實(shí)時(shí)的CRUD操作。

  是一次寫入多次讀取的操作,可以看成是ETL的工具。

  十四、Flume的工作及時(shí)是什么?

  核心概念是agent,里面包括source,channel和sink三個(gè)組件。

  Source運(yùn)行在日志收集節(jié)點(diǎn)進(jìn)行日志采集,之后臨時(shí)存儲(chǔ)在channel中,sink負(fù)責(zé)將channel中的數(shù)據(jù)發(fā)送到目的地。

  只有發(fā)送成功channel中的數(shù)據(jù)才會(huì)被刪除。

  首先書寫flume配置文件,定義agent、source、channel和sink然后將其組裝,執(zhí)行flume-ng命令。

  十五、Hbase行鍵列族的概念,物理模型,表的設(shè)計(jì)原則?

  行鍵:是hbase表自帶的,每個(gè)行鍵對(duì)應(yīng)一條數(shù)據(jù)。

  列族:是創(chuàng)建表時(shí)指定的,為列的集合,每個(gè)列族作為一個(gè)文件單獨(dú)存儲(chǔ),存儲(chǔ)的數(shù)據(jù)都是字節(jié)數(shù)組,其中數(shù)據(jù)可以有很多,通過時(shí)間戳來區(qū)分。

  物理模型:整個(gè)hbase表會(huì)拆分成多個(gè)region,每個(gè)region記錄著行鍵的起始點(diǎn)保存在不同的節(jié)點(diǎn)上,查詢時(shí)就是對(duì)各個(gè)節(jié)點(diǎn)的并行查詢,當(dāng)region很大時(shí)使用.META表存儲(chǔ)各個(gè)region的起始點(diǎn),-ROOT又可以存儲(chǔ).META的起始點(diǎn)。

  Rowkey的設(shè)計(jì)原則:各個(gè)列族數(shù)據(jù)平衡,長度原則、相鄰原則,創(chuàng)建表的時(shí)候設(shè)置表放入regionserver緩存中,避免自動(dòng)增長和時(shí)間,使用字節(jié)數(shù)組代替string,zui大長度64kb,zui好16字節(jié)以內(nèi),按天分表,兩個(gè)字節(jié)散列,四個(gè)字節(jié)存儲(chǔ)時(shí)分毫秒。

  列族的設(shè)計(jì)原則:盡可能少(按照列族進(jìn)行存儲(chǔ),按照region進(jìn)行讀取,不必要的io操作),經(jīng)常和不經(jīng)常使用的兩類數(shù)據(jù)放入不同列族中,列族名字盡可能短。

  十六、請(qǐng)列出正常的hadoop集群中hadoop都分別需要啟動(dòng)哪些進(jìn)程,他們的作用分別都是什么,請(qǐng)盡量列的詳細(xì)一些。

  namenode:負(fù)責(zé)管理hdfs中文件塊的元數(shù)據(jù),響應(yīng)客戶端請(qǐng)求,管理datanode上文件block的均衡,維持副本數(shù)量

  Secondname:主要負(fù)責(zé)做checkpoint操作;也可以做冷備,對(duì)一定范圍內(nèi)數(shù)據(jù)做快照性備份。

  Datanode:存儲(chǔ)數(shù)據(jù)塊,負(fù)責(zé)客戶端對(duì)數(shù)據(jù)塊的io請(qǐng)求

  Jobtracker:管理任務(wù),并將任務(wù)分配給tasktracker。

  Tasktracker:執(zhí)行JobTracker分配的任務(wù)。

  Resourcemanager、Nodemanager、Journalnode、Zookeeper、Zkfc

  十七、請(qǐng)說明hive中SortBy、OrderBy、ClusterBy,DistributeBy各代表什么意思?

  orderby:會(huì)對(duì)輸入做全局排序,因此只有一個(gè)reducer(多個(gè)reducer無法保證全局有序)。只有一個(gè)reducer,會(huì)導(dǎo)致當(dāng)輸入規(guī)模較大時(shí),需要較長的計(jì)算時(shí)間。

  sortby:不是全局排序,其在數(shù)據(jù)進(jìn)入reducer前完成排序。

  distributeby:按照指定的字段對(duì)數(shù)據(jù)進(jìn)行劃分輸出到不同的reduce中。

  clusterby:除了具有distributeby的功能外還兼具sortby的功能。

  十八、HBase簡單讀寫流程?

  讀:

  找到要讀數(shù)據(jù)的region所在的RegionServer,然后按照以下順序進(jìn)行讀取:先去BlockCache讀取,若BlockCache沒有,則到Memstore讀取,若Memstore中沒有,則到HFile中去讀。

  寫:

  找到要寫數(shù)據(jù)的region所在的RegionServer,然后先將數(shù)據(jù)寫到WAL(Write-AheadLogging,預(yù)寫日志系統(tǒng))中,然后再將數(shù)據(jù)寫到Memstore等待刷新,回復(fù)客戶端寫入完成。

  十九、HBase的特點(diǎn)是什么?

  (1)hbase是一個(gè)分布式的基于列式存儲(chǔ)的數(shù)據(jù)庫,基于hadoop的HDFS存儲(chǔ),zookeeper進(jìn)行管理。

  (2)hbase適合存儲(chǔ)半結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù),對(duì)于數(shù)據(jù)結(jié)構(gòu)字段不夠確定或者雜亂無章很難按一個(gè)概念去抽取的數(shù)據(jù)。

  (3)hbase為null的記錄不會(huì)被存儲(chǔ)。

  (4)基于的表包括rowkey,時(shí)間戳和列族。新寫入數(shù)據(jù)時(shí),時(shí)間戳更新,同時(shí)可以查詢到以前的版本。

  (5)hbase是主從結(jié)構(gòu)。Hmaster作為主節(jié)點(diǎn),hregionserver作為從節(jié)點(diǎn)。

  二十、請(qǐng)描述如何解決Hbase中region太小和region太大帶來的結(jié)果。

  Region過大會(huì)發(fā)生多次compaction,將數(shù)據(jù)讀一遍并寫一遍到hdfs上,占用io,region過小會(huì)造成多次split,region會(huì)下線,影響訪問服務(wù),調(diào)整hbase.heregion.max.filesize為256m。

  以上就是關(guān)于好程序員大數(shù)據(jù)培訓(xùn)之面試題整理的全部內(nèi)容,想要了解更多關(guān)于大數(shù)據(jù)開發(fā)方面內(nèi)容的小伙伴,請(qǐng)關(guān)注好程序員大數(shù)據(jù)培訓(xùn)官網(wǎng)、微信等平臺(tái),好程序員有專業(yè)的大數(shù)據(jù)講師為您指導(dǎo),

好程序員公眾號(hào)

  • · 剖析行業(yè)發(fā)展趨勢(shì)
  • · 匯聚企業(yè)項(xiàng)目源碼

好程序員開班動(dòng)態(tài)

More+
  • HTML5大前端 <高端班>

    開班時(shí)間:2021-04-12(深圳)

    開班盛況

    開班時(shí)間:2021-05-17(北京)

    開班盛況
  • 大數(shù)據(jù)+人工智能 <高端班>

    開班時(shí)間:2021-03-22(杭州)

    開班盛況

    開班時(shí)間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發(fā) <高端班>

    開班時(shí)間:2021-05-10(北京)

    開班盛況

    開班時(shí)間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數(shù)據(jù)分析 <高端班>

    開班時(shí)間:2021-07-12(北京)

    預(yù)約報(bào)名

    開班時(shí)間:2020-09-21(上海)

    開班盛況
  • 云計(jì)算開發(fā) <高端班>

    開班時(shí)間:2021-07-12(北京)

    預(yù)約報(bào)名

    開班時(shí)間:2019-07-22(北京)

    開班盛況
IT培訓(xùn)IT培訓(xùn)
在線咨詢
IT培訓(xùn)IT培訓(xùn)
試聽
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報(bào)名
IT培訓(xùn)

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)