hadoop面試問題

hadoop面試問題,不定期更新

0x00 什么是hadoop

我們通常說的hadoop有兩種意思,一種是hadoop生態(tài)圈,包含hadoop、hive、hbase等組件,另一種單純指hadoop,包含hdfs、mapreduce,另外hadoop2之后添加的yarn

hdfs

hdfs是一個(gè)分布式文件系統(tǒng),設(shè)計(jì)目的就是用低廉的商業(yè)硬件存儲大數(shù)據(jù)量的文件,所以具有以下特點(diǎn)

  • 處理超大文件
  • 高容錯(cuò)性,運(yùn)行在廉價(jià)機(jī)器上
  • 橫向擴(kuò)展
  • 流式數(shù)據(jù)處理,而不是隨機(jī)讀寫(所謂流式數(shù)據(jù)讀取就是指一個(gè)文件只能寫一次,后面一直追加,所以每次讀取只需要從頭開始一直向后讀就行了,而不是像其他文件系統(tǒng)可以對文件多次修改)
  • 不支持文件修改,只能追加寫入
  • 對大量小文件性能不好

1、主從架構(gòu),有兩種角色namenode和datanode
namenode負(fù)責(zé)管理存儲元數(shù)據(jù),處理客戶端讀寫請求
datanode存儲真正的數(shù)據(jù),執(zhí)行讀寫操作

2、讀流程
客戶端訪問namenode,驗(yàn)證權(quán)限,返回?cái)?shù)據(jù)具體的datanode地址,客戶端訪問datanode讀取數(shù)據(jù)

3、寫流程
客戶端訪問namenode,驗(yàn)證權(quán)限并確定文件是否存在,然后先記錄到editLog(WAL)返回輸出流對象,客戶端向最近的一個(gè)datanode寫數(shù)據(jù),每寫一個(gè)數(shù)據(jù)塊,其余的datanode自己同步

mapreduce

mapreduce是一種編程模式,主要思想是將數(shù)據(jù)處理分為map和reduce兩個(gè)階段,這兩個(gè)階段也可以任意組合,屏蔽了底層分布式、并行的計(jì)算方式
map讀取數(shù)據(jù)片段,輸出<key,value>集合,reducce階段將相同的key一起處理,合并這些value,計(jì)算得到結(jié)果
大體可以分為input、split、map、shuffle、reduce、output六個(gè)步驟

輸入input:輸入數(shù)據(jù),一般是hdfs上的文件或目錄
拆分split:切割文件,將大文件切割成塊,供多個(gè)map task處理
映射map:將拆分的內(nèi)容轉(zhuǎn)換成key-value形式
派發(fā)shuffle:將key相同的放到一起value是一個(gè)序列,這步涉及數(shù)據(jù)移動(dòng),會將key相同的數(shù)據(jù)移動(dòng)到一臺機(jī)器上
縮減reduce:將同樣key的value序列進(jìn)行計(jì)算
輸出output:輸出結(jié)果

0x01 shuffle過程

參考mapreduce shuffle深入理解

從map的輸出到reduce的輸入,中間的過程叫shuffle

1、環(huán)形緩存區(qū)溢出寫,每個(gè)map任務(wù)輸出會先寫到一個(gè)緩存區(qū),默認(rèn)是100M,當(dāng)超過80%時(shí)會溢寫到磁盤

2、在內(nèi)存中時(shí)會經(jīng)過分區(qū)和排序,分區(qū)默認(rèn)是按照key的hashcode來對reduce個(gè)數(shù)取模,可以將數(shù)據(jù)平均分配到reduce上

3、合并溢寫文件,將同分區(qū)的溢寫文件合并,合并過程中伴隨著排序,最后合并成一個(gè)分區(qū)、排序的大文件

4、reduce端接受不同map的傳來的有序數(shù)據(jù),也是先寫到內(nèi)存,然后溢寫,隨著文件增多,和map端一樣,不停的排序合并,最后一次的合并結(jié)果直接輸出到reduce函數(shù),計(jì)算結(jié)果,然后每個(gè)reduce函數(shù)對應(yīng)一個(gè)輸出結(jié)果

0x02 yarn的工作原理

yarn全稱yet anthor resource negotiator(另一種資源調(diào)度器),在hadoop1.0時(shí),資源調(diào)度和任務(wù)管理都由jobtrack管理,hadoop2將任務(wù)管理分離出來由每個(gè)程序自己的ApplicationMaster完成,yarn只負(fù)責(zé)資源調(diào)度和監(jiān)控

ResourceManager

rm主要由兩部分組成schedule和ApplicationManager

  • schedule

通過container來分配資源,container是yarn中的抽象概念,封裝了磁盤、內(nèi)存、cpu等資源,yarn提供的是插件式的策略來實(shí)現(xiàn)隊(duì)列、分區(qū),目前實(shí)現(xiàn)的schedule有FIFO、CapacityScheduler、FairScheduler

  • ApplicationManager

ApplicationManager負(fù)責(zé)接收作業(yè)的提交,并申請第一個(gè)container來執(zhí)行作業(yè)的ApplicationMaster,并提供失敗時(shí)重啟ApplicationMaster的container,接下來作業(yè)的ApplicationMaster向schedule申請資源

NodeManager

NodeManager是yarn在每臺機(jī)器上的代理,nm負(fù)責(zé)啟動(dòng)并管理節(jié)點(diǎn)上的container,container執(zhí)行具體的由ApplicationMaster劃分的任務(wù)

整體流程

1、客戶端向ResourceManager的ApplicationManager提交程序

2、ResourceManager的ApplicationManager在nodemanager上啟動(dòng)第一個(gè)container執(zhí)行ApplicationMaster

3、ApplicationMaster拆分程序,劃分成一個(gè)個(gè)的task,這些task可以在container上運(yùn)行,然后向ResourceManager申請資源執(zhí)行task,并向ResourceManager發(fā)送心跳

4、申請到container后,ApplicationMaster會和NodeManager通信,并將task發(fā)送到對應(yīng)的container執(zhí)行,task會向ApplicationMaster發(fā)送心跳

5、程序執(zhí)行完成,ApplicationMaster向ResourceManager注銷并釋放資源

0x03 列出yarn調(diào)度器,并簡述工作方法

yarn的調(diào)度是基于事件來處理的,共有六種事件,yarn會根據(jù)事件作出相應(yīng)處理

1、NODE_REMOVE 刪除計(jì)算節(jié)點(diǎn)或計(jì)算節(jié)點(diǎn)故障

2、NODE_ADDED 新增計(jì)算節(jié)點(diǎn)

3、APPLICATION_ADDED 啟動(dòng)一個(gè)新應(yīng)用

4、APPLICATION_REMOVED 一個(gè)應(yīng)用運(yùn)行結(jié)束

5、CONTAINER_EXPIRED containre回收在分配

6、NODE_UPDATE rm收到nm的心跳,更新container信息

yarn中自帶有三種調(diào)度器FIFO、Capacity Scheduler、Fair Scheduler

FIFO先進(jìn)先出調(diào)度器,單隊(duì)列,先提交的任務(wù)執(zhí)行完成后在執(zhí)行后續(xù)提交的任務(wù)

Capacity和Fair基本一致,fair具有capacity的所有功能,fair主要適用于同一隊(duì)列中所有應(yīng)用公平的使用資源

參考

0x04 mapreduce性能調(diào)優(yōu)

性能調(diào)優(yōu)可以從程序、系統(tǒng)配置等方面入手,其中程序優(yōu)化是最有效的手段,例如適當(dāng)應(yīng)用combiner,優(yōu)化分區(qū)方法,避免數(shù)據(jù)傾斜等

系統(tǒng)配置主要有以下參數(shù)


image
image

平時(shí)的調(diào)優(yōu)沒有固定步驟,主要是要找到性能瓶頸的地方,改變處理方式,或者通過參數(shù)調(diào)節(jié)資源

參考

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

相關(guān)閱讀更多精彩內(nèi)容

  • 一、系統(tǒng)參數(shù)配置優(yōu)化 1、系統(tǒng)內(nèi)核參數(shù)優(yōu)化配置 修改文件/etc/sysctl.conf,添加如下配置,然后執(zhí)行s...
    張偉科閱讀 3,923評論 0 14
  • Hadoop面試問題和回答3 [toc] 參考:Hadoop/Spark相關(guān)面試問題總結(jié) 1簡答說一下hadoop...
    小小少年Boy閱讀 968評論 0 10
  • 【什么是大數(shù)據(jù)、大數(shù)據(jù)技術(shù)】 大數(shù)據(jù),又稱巨量資料,指的是所涉及的數(shù)據(jù)資料量規(guī)模巨大到無法在合理時(shí)間內(nèi)通過傳統(tǒng)的應(yīng)...
    kimibob閱讀 2,901評論 0 51
  • 原文地址:http://pengtuo.tech/2018/09/22/yarn-architecture/ 一、...
    PeTu閱讀 26,468評論 0 8
  • 一、HDFS簡介 1.1Hadoop2介紹 hadoop1是由HDFS和MapReduce組成,hadoop2由H...
    ahzhaojj閱讀 1,168評論 0 0

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