大數(shù)據(jù)相關(guān)常見面試題與答案整理

1、hadoop:
1)hadoop是大數(shù)據(jù)分析的完整生態(tài)系統(tǒng),從數(shù)據(jù)采集,存儲,分析,轉(zhuǎn)運,再到頁面展示,構(gòu)成了整個流程
2)采集可以用flume,
3)存儲用hbase,hdfs,mangodb就相當于hbase,
4)分析用Mapreduce自己寫算法,
5)還有hive做數(shù)據(jù)倉庫,
6)pig做數(shù)據(jù)流處理,
7)轉(zhuǎn)儲方面有sqoop,可以將hdfs中的數(shù)據(jù)轉(zhuǎn)換存儲到mysql,oracle等傳統(tǒng)數(shù)據(jù)庫,
這就構(gòu)成了一整套大數(shù)據(jù)分析的整個流程
2、Hadoop 集群可以運行的 3 個模式分別是什么, 都有哪些注意點?
單機模式、偽分布式模式、全分布式模式;
3、Hadoop 的核心配置文件?
1)以前是hadoop-default.xml、hadoop-site.xml
2)現(xiàn)在是core-site.xml、hdfs-site.xml、mapred-site.xml;都在conf目錄下;
4、hdfs-site.xml 的 3 個主要屬性?
1)dfs.name.dir 決定的是元數(shù)據(jù)存儲的路徑以及 DFS 的存儲方式(磁盤或是遠端)
2)dfs.data.dir 決定的是數(shù)據(jù)存儲的路徑
3)fs.checkpoint.dir 用于第二 Namenode
5、簡述HDFS的原理?
1)客戶端向 nameNode 發(fā)送要上傳文件的請求
2)nameNode 返回給用戶是否能上傳數(shù)據(jù)的狀態(tài)
3)加入用戶端需要上傳一個 1024M 的文件,客戶端會通過 Rpc 請求 NameNode,并返回需要上傳給那些 DataNode(分配機器的距離以及空間的大小等),namonode會選擇就近原則分配機器。
4)客戶端請求建立 block 傳輸管道 chnnel 上傳數(shù)據(jù)
5)在上傳時 datanode 會與其他的機器建立連接并把數(shù)據(jù)塊傳送到其他的機器上
6)dataNode 向 namenode 匯報自己的儲存情況以及自己的信息
7)當?shù)谝粋€快上傳完后再去執(zhí)行其他的復制的傳送
6、簡述MR(MapReduce)的原理?
1)當執(zhí)行mr程序時,會執(zhí)行一個Job
2)客戶端的jobClick會請求namenode的jobTracker要執(zhí)行任務(wù)
3)jobClick會去HDFS端復制作業(yè)的資源文件
4)客戶端的jobClick會向namenode提交作業(yè),讓namenode做準備
5)Namenode的jobTracker會去初始化創(chuàng)建的對象
6)Namenode會獲取hdfs的劃分的分區(qū)
7)Namenode去檢查TaskTracker的心跳信息,查看存活的機器
8)當執(zhí)行的datenode執(zhí)行任務(wù)時Datenode會去HDFS獲取作業(yè)的資源的文件
9)TaskTracker會去執(zhí)行代碼,并登陸JVM的執(zhí)行渠道
10)JVM或執(zhí)行MapTask或者ReduceTask
11)執(zhí)行終結(jié)
7、談?wù)剶?shù)據(jù)傾斜,如何發(fā)生的,并給出優(yōu)化方案
數(shù)據(jù)的傾斜主要是兩個的數(shù)據(jù)相差的數(shù)量不在一個級別上,在執(zhí)行任務(wù)時就造成了數(shù)據(jù)的傾斜,可以通過分區(qū)的方法減少reduce數(shù)據(jù)傾斜性能的方法,例如:抽樣和范圍的分區(qū)、自定義分區(qū)、數(shù)據(jù)大小傾斜的自定義策略;
8、簡單概括安裝hadoop的步驟
1)創(chuàng)建 hadoop 帳戶。
2)setup.改 IP。
3)安裝 java,并修改/etc/profile 文件,配置 java 的環(huán)境變量。
4)修改 Host 文件域名。
5)安裝 SSH,配置無密鑰通信。
6)解壓 hadoop。
7)配置 conf 文件下 hadoop-env.sh、core-site.sh、mapre-site.sh、hdfs-site.sh。
8)配置 hadoop 的環(huán)境變量。
9)Hadoop namenode -format
10)start-all.sh
9、怎樣快速的殺死一個job
1)執(zhí)行hadoop job -list 拿到j(luò)ob-id
2)Hadoop job kill hadoop-id
10、簡單概述hadoop的combinet與partition的區(qū)別
1)combine和partition都是函數(shù),中間的步驟應(yīng)該只有shuffle!
2)combine分為map端和reduce端,作用是把同一個key的鍵值對合并在一起,可以自定義的;
3)partition是分割map每個節(jié)點的結(jié)果,按照key分別映射給不同的reduce,也是可以自定義的。這里其實可以理解歸類。
11、hadoop的shuffer的概念
1)Shuffer是一個過程,實在map端到reduce在調(diào)reduce數(shù)據(jù)之前都叫shuffer,主要是分區(qū)與排序,也就是內(nèi)部的緩存分分區(qū)以及分發(fā)(是reduce來拉數(shù)據(jù)的)和傳輸;
12、3 個 datanode 中有一個 個datanode 出現(xiàn)錯誤會怎樣?
這個 datanode 的數(shù)據(jù)會在其他的 datanode 上重新做備份。
13、簡單概述一下hadoop1與hadoop2的區(qū)別
1)Hadoop2與hadoop1最大的區(qū)別在于HDFS的架構(gòu)與mapreduce的很大的區(qū)別,而且速度上有很大的提升;
2)hadoop2最主要的兩個變化是:namenode可以集群的部署了,hadoop2中的mapreduce中的jobTracker中的資源調(diào)度器與生命周期管理拆分成兩個獨立的組件,并命名為YARN
14、hadoop的二次排序
1)Hadoop默認的是HashPartitioner排序,當map端一個文件非常大另外一個文件非常小時就會產(chǎn)生資源的分配不均勻,既可以使用setPartitionerClass來設(shè)置分區(qū),即形成了二次分區(qū)。
15、mapreduce的combiner的作用是什么,什么時候不應(yīng)該使用?
1)Mapreduce中的Combiner就是為了避免map任務(wù)和reduce任務(wù)之間的數(shù)據(jù)傳輸而設(shè)置的,Hadoop允許用戶針對map task的輸出指定一個合并函數(shù)。即為了減少傳輸?shù)絉educe中的數(shù)據(jù)量。它主要是為了削減Mapper的輸出從而減少網(wǎng)絡(luò)帶寬和Reducer之上的負載。
2)在數(shù)據(jù)量較少時不宜使用。
16、你對zookeeper的理解?
1)隨著大數(shù)據(jù)的快速發(fā)展,多機器的協(xié)調(diào)工作,避免主要機器單點故障的問題,于是就引入管理機器的一個軟件,他就是zookeeper來協(xié)助機器正常的運行。
2)Zookeeper有兩個角色分別是leader與follower ,其中l(wèi)eader是主節(jié)點,其他的是副節(jié)點,在安裝配置上一定要注意配置奇數(shù)個的機器上,便于zookeeper快速切換選舉其他的機器。
3)在其他的軟件執(zhí)行任務(wù)時在zookeeper注冊時會在zookeeper下生成相對應(yīng)的目錄,以便zookeeper去管理機器。
17、hive是怎樣保存元數(shù)據(jù)的?
1)保存元數(shù)據(jù)的方式有:內(nèi)存數(shù)據(jù)庫rerdy,本地mysql數(shù)據(jù)庫,遠程mysql數(shù)據(jù)庫;
2)但是本地的mysql數(shù)據(jù)用的比較多,因為本地讀寫速度都比較快
18、Hive中外部表與內(nèi)部表的區(qū)別
1)Hive 創(chuàng)建內(nèi)部表時,會將數(shù)據(jù)移動到數(shù)據(jù)倉庫指向的路徑;若創(chuàng)建外部表,僅記錄數(shù)據(jù)所在的路徑,不對數(shù)據(jù)的位置做任何改變。
2)在刪除表的時候,內(nèi)部表的元數(shù)據(jù)和數(shù)據(jù)會被一起刪除,而外部表只刪除元數(shù)據(jù),不刪除數(shù)據(jù)。這樣外部表相對來說更加安全些,數(shù)據(jù)組織也更加靈活,方便共享源數(shù)據(jù)。
19、對于 hive,你寫過哪些 UDF 函數(shù),作用是什么?
1)UDF: user defined function 的縮寫,
1)編寫hive udf的兩種方式extends UDF 重寫evaluate第二種extends GenericUDF重寫initialize、getDisplayString、evaluate方法
20、Hive 的 sort by 和 order by 的區(qū)別
1)order by 會對輸入做全局排序,因此只有一個reducer(多個reducer無法保證全局有序)只有一個reducer,會導致當輸入規(guī)模較大時,需要較長的計算時間。
2)sort by不是全局排序,其在數(shù)據(jù)進入reducer前完成排序.因此,如果用sort by進行排序,并且設(shè)置mapred.reduce.tasks>1, 則sort by只保證每個reducer的輸出有序,不保證全局有序。
21、Hbase 的 rowkey 怎么創(chuàng)建比較好?列族怎么創(chuàng)建比較好?
1)Rowkey是一個二進制碼流,Rowkey的長度被很多開發(fā)者建議說設(shè)計在10~100個字節(jié),不過建議是越短越好,不要超過16個字節(jié)。在查找時有索引會加快速度。
2)Rowkey散列原則 、 Rowkey唯一原則 、 針對事務(wù)數(shù)據(jù)Rowkey設(shè)計 、 針對統(tǒng)計數(shù)據(jù)的Rowkey設(shè)計 、 針對通用數(shù)據(jù)的Rowkey設(shè)計、 支持多3)總結(jié)設(shè)計列族:
a、一般不建議設(shè)計多個列族
b、數(shù)據(jù)塊的緩存的設(shè)計
c、激進緩存設(shè)計
d、布隆過濾器的設(shè)計(可以提高隨機讀取的速度)
e、生產(chǎn)日期的設(shè)計
f、列族壓縮
g、單元時間版本
22、hive 如何調(diào)優(yōu)?
1)在優(yōu)化時要注意數(shù)據(jù)的問題,盡量減少數(shù)據(jù)傾斜的問題,減少job的數(shù)量,同事對小的文件進行成大的文件,
2)如果優(yōu)化的設(shè)計那就更好了,因為hive的運算就是mapReduce所以調(diào)節(jié)mapreduce的參數(shù)也會使性能提高,如調(diào)節(jié)task的數(shù)目。
23、hbase 寫數(shù)據(jù)的原理
1)首先,Client通過訪問ZK來請求目標數(shù)據(jù)的地址。
2)ZK中保存了-ROOT-表的地址,所以ZK通過訪問-ROOT-表來請求數(shù)據(jù)地址。
3)同樣,-ROOT-表中保存的是.META.的信息,通過訪問.META.表來獲取具體的RS。
4).META.表查詢到具體RS信息后返回具體RS地址給Client。
5)Client端獲取到目標地址后,然后直接向該地址發(fā)送數(shù)據(jù)請求
24、hbase宕機了如何處理?
1)HBase的RegionServer宕機超過一定時間后,HMaster會將其所管理的region重新分布到其他活動的RegionServer上,由于數(shù)據(jù)和日志都持久在HDFS中,該操作不會導致數(shù)據(jù)丟失。所以數(shù)據(jù)的一致性和安全性是有保障的。
2)但是重新分配的region需要根據(jù)日志恢復原RegionServer中的內(nèi)存MemoryStore表,這會導致宕機的region在這段時間內(nèi)無法對外提供服務(wù)。
3)而一旦重分布,宕機的節(jié)點重新啟動后就相當于一個新的RegionServer加入集群,為了平衡,需要再次將某些region分布到該server。
4)因此,Region Server的內(nèi)存表memstore如何在節(jié)點間做到更高的可用,是HBase的一個較大的挑戰(zhàn)。
25、Hbase 中的 metastore 用來做什么的?
1)Hbase的metastore是用來保存數(shù)據(jù)的,
2)其中保存數(shù)據(jù)的方式有有三種第一種于第二種是本地儲存,第二種是遠程儲存這一種企業(yè)用的比較多
26、hbase是怎樣預分區(qū)的?
如何去進行預分區(qū),可以采用下面三步:
1)取樣,先隨機生成一定數(shù)量的rowkey,將取樣數(shù)據(jù)按升序排序放到一個集合里
2)根據(jù)預分區(qū)的region個數(shù),對整個集合平均分割,即是相關(guān)的splitKeys.
3)HBaseAdmin.createTable(HTableDescriptor tableDescriptor,byte[][] splitkeys)可以指定預分區(qū)的splitKey,即是指定region間的rowkey臨界值
27、怎樣將 mysql 的數(shù)據(jù)導入到 hbase 中?
1)不能使用 sqoop,速度太慢了,提示如下:
A、一種可以加快批量寫入速度的方法是通過預先創(chuàng)建一些空的 regions,這樣當數(shù)據(jù)寫入 HBase 時,會按照 region 分區(qū)情況,在集群內(nèi)做數(shù)據(jù)的負載均衡。
B、hbase 里面有這樣一個 hfileoutputformat 類,他的實現(xiàn)可以將數(shù)據(jù)轉(zhuǎn)換成 hfile格式,通過 new 一個這個類,進行相關(guān)配置,這樣會在 hdfs 下面產(chǎn)生一個文件,這個時候利用 hbase 提供的 jruby 的 loadtable.rb 腳本就可以進行批量導入。
28、Redis, 傳統(tǒng)數(shù)據(jù)庫,hbase,hive 每個之間的區(qū)別?
1)Redis 是基于內(nèi)存的數(shù)據(jù)庫,注重實用內(nèi)存的計算,
2)hbase是列式數(shù)據(jù)庫,無法創(chuàng)建主鍵,地從是基于HDFS的,每一行可以保存很多的列,
3)hive是數(shù)據(jù)的倉庫,是為了減輕mapreduce而設(shè)計的,不是數(shù)據(jù)庫,是用來與hadoop做交互的。
29、HBase scan setBatch和setCaching的區(qū)別
1)scan可以通過setCaching與setBatch方法提高速度(以空間換時間),
2)setCaching設(shè)置的值為每次rpc的請求記錄數(shù),默認是1;cache大可以優(yōu)化性能,但是太大了會花費很長的時間進行一次傳輸。
3)setBatch設(shè)置每次取的column size;有些row特別大,所以需要分開傳給client,就是一次傳一個row的幾個column。
30、flume 不采集 Nginx 日志,通過 Logger4j 采集日志,優(yōu)缺點是什么?
1)在nginx采集日志時無法獲取session的信息,然而logger4j則可以獲取session的信息,
2)logger4j的方式比較穩(wěn)定,不會宕機。缺點:不夠靈活,logger4j的方式和項目結(jié)合過濾緊密,而flume的方式就比較靈活,便于插拔式比較好,不會影響項目的性能。
31、flume 和 kafka 采集日志區(qū)別,采集日志時中間停了,怎么記錄之前的日志。
1)Flume 采集日志是通過流的方式直接將日志收集到存儲層,而 kafka 將日志緩存在 kafka集群,待后期可以采集到存儲層。
2)Flume 采集中間停了,可以采用文件的方式記錄之前的日志,而 kafka 是采用 offset(偏移量) 的方式記錄之前的日志。
32、kafka 中怎樣儲存數(shù)據(jù)結(jié)構(gòu)的,data.....目錄下有多少個分區(qū),每個分區(qū)的存儲格式是什么樣的?
1)topic 是按照“主題名-分區(qū)”存儲的
2)分區(qū)個數(shù)由配置文件決定
3)每個分區(qū)下最重要的兩個文件是 0000000000.log 和 000000.index,0000000.log,以默認 1G 大小回滾。
33、mr 和 spark 區(qū)別,怎么理解 spark-rdd
1)Mr 是文件方式的分布式計算框架,是將中間結(jié)果和最終結(jié)果記錄在文件中,map 和 reduce的數(shù)據(jù)分發(fā)也是在文件中。
2)spark 是內(nèi)存迭代式的計算框架,計算的中間結(jié)果可以緩存內(nèi)存,也可以緩存硬盤,但是不是每一步計算都需要緩存的。
3)spark-rdd 是一個數(shù)據(jù)的分區(qū)記錄集合,是利用內(nèi)存來計算的,spark之所以快是因為有內(nèi)存的模式
34、你們的集群規(guī)模?
1)這個得看個人在公司的規(guī)模,下面介紹一下我們公司的一些配置:
聯(lián)想System x3750 服務(wù)器,價格3.5萬,內(nèi)存容量32G,產(chǎn)品類型機架式,硬盤接口SSD,CPU頻率2.6GH,CPU數(shù)量2顆,三級緩存15MB,cpu核心6核,cpu線程數(shù)12線程,最大內(nèi)存支持1.5T,網(wǎng)絡(luò)是千兆網(wǎng)卡,可插拔時硬盤接口12個卡槽,配置1T的容量
詳細:http://detail.zol.com.cn/server/index1101243.shtml
名字 | 軟件 | 運行管理 |
Hadoop1 | JDK,hadoop | namenode |
Hadoop2 | JDK,hadoop | namenode |
Hadoop3 | JDK,hadoop | secondaryNamenode |
Hadoop4 | JDK,hadoop | secondaryNamenode |
Hadoop5 | JDK,hadoop | datanode |
Hadoop6 | JDK,hadoop | datanode |
Hadoop7 | JDK,hadoop | datanode |
Hadoop8 | JDK,hadoop | datanode |
Hadoop9 | JDK,hadoop | datanode |
Hadoop10 | JDK,zookeeper,tomcat,mvn,kafka | leader |
Hadoop11 | JDK,zookeeper,tomcat,mvn,kafka | follower |
Hadoop12 | JDK,zookeeper,tomcat,mvn,kafka | follower |
Hadoop13 | JDK,hive,mysql,svn,logstarh | hive,mysql,svn |
Hadoop14 | JDK,hbase,mysql備份 | datanode |
Hadoop15 | JDK,nginx,Log日志手機 | datanode |
數(shù)據(jù)就是每天訪問的Log日志不是很大,有的時候大有的時候小的可憐
35、你在項目中遇到了哪些難題,是怎么解決的?
1)在執(zhí)行任務(wù)時發(fā)現(xiàn)副本的個數(shù)不對,經(jīng)過一番的查找發(fā)現(xiàn)是超時的原因,修改了配置文件hdfs-site.xml:中修改了超時時間。
2)由于當時在分配各個目錄空間大小時,沒有很好的分配導致有的目錄的空間浪費,于是整體商量后把儲存的空間調(diào)大了一些。
相關(guān)文章
- 這篇文章主要介紹了大數(shù)據(jù)spark精華面試題與參考答案,整理總結(jié)了大數(shù)據(jù)spark面試中經(jīng)常遇到的各類問題、概念與知識點,需要的朋友可以參考下2019-10-15
- 這篇文章主要介紹了大數(shù)據(jù)工程師面試題與參考答案,總結(jié)整理了大數(shù)據(jù)相關(guān)的基本概念、原理、知識點與注意事項,需要的朋友可以參考下2019-09-16
大數(shù)據(jù)基礎(chǔ)面試題考點與知識點整理
這篇文章主要介紹了大數(shù)據(jù)基礎(chǔ)面試題考點與知識點,總結(jié)整理了大數(shù)據(jù)常見的各種知識點、難點、考點以及相關(guān)注意事項,需要的朋友可以參考下2019-09-09BAT面試中的大數(shù)據(jù)相關(guān)問題筆記
這篇文章主要介紹了BAT面試中的大數(shù)據(jù)相關(guān)問題,涉及大數(shù)據(jù)相關(guān)的概念、原理、知識點與算法等問題,需要的朋友可以參考下2019-08-30BAT大數(shù)據(jù)面試題與參考答案小結(jié)
這篇文章主要介紹了BAT大數(shù)據(jù)面試題與參考答案,總結(jié)分析了大數(shù)據(jù)常見的各種知識點、疑難問題與參考答案,需要的朋友可以參考下2019-08-16大數(shù)據(jù)專業(yè)的就業(yè)前景與薪酬待遇淺析
這篇文章主要介紹了大數(shù)據(jù)專業(yè)的就業(yè)前景與薪酬待遇,結(jié)合當前市場環(huán)境與科技發(fā)展趨勢分析總結(jié)了大數(shù)據(jù)專業(yè)的就業(yè)前景、就業(yè)方向、薪資待遇等,需要的朋友可以參考下2019-10-16大數(shù)據(jù)Hadoop未來五年發(fā)展走向分析
這篇文章主要介紹了大數(shù)據(jù)Hadoop未來五年發(fā)展走向,總結(jié)分析了當前大數(shù)據(jù)的發(fā)展狀況并分析了未來大數(shù)據(jù)Hadoop發(fā)展前景,需要的朋友可以參考下2019-08-08大數(shù)據(jù)相關(guān)熱門工作崗位、前景及就業(yè)方向淺析
這篇文章主要介紹了大數(shù)據(jù)相關(guān)工作崗位、前景及就業(yè)方向,簡單總結(jié)分析了當前大數(shù)據(jù)相關(guān)的熱門工作崗位、工作要求、職業(yè)前景,并給出了相應(yīng)的建議,需要的朋友可以參考下2019-08-07數(shù)據(jù)分析師、大數(shù)據(jù)開發(fā)、Hadoop開發(fā)工程師、數(shù)據(jù)挖掘、算法工程師的薪
這篇文章主要介紹了數(shù)據(jù)分析師、大數(shù)據(jù)開發(fā)、Hadoop開發(fā)工程師、數(shù)據(jù)挖掘、算法工程師的薪資水平,綜合大量數(shù)據(jù)分析了數(shù)據(jù)分析師、大數(shù)據(jù)開發(fā)、Hadoop開發(fā)工程師、數(shù)據(jù)挖掘2019-07-31在大數(shù)據(jù)學習中Hadoop和Spark哪個更好就業(yè)?大數(shù)據(jù)就業(yè)前景展望
這篇文章主要介紹了在大數(shù)據(jù)學習中Hadoop和Spark哪個更好就業(yè)?對比分析了Hadoop和Spark在大數(shù)據(jù)領(lǐng)域的優(yōu)勢與特點,并針對將來就業(yè)前景進行了展望與客觀分析,需要的朋友可以2019-07-30