天天看點

大資料相關面試題整理-帶答案-簡單

1、hadoop:

  1)hadoop是大資料分析的完整生态系統,從資料采集,存儲,分析,轉運,再到頁面展示,構成了整個流程  

  2)采集可以用flume,

  3)存儲用hbase,hdfs,mangodb就相當于hbase,

  4)分析用Mapreduce自己寫算法,

  5)還有hive做資料倉庫,

  6)pig做資料流處理,

  7)轉儲方面有sqoop,可以将hdfs中的資料轉換存儲到mysql,oracle等傳統資料庫,

這就構成了一整套大資料分析的整個流程

2、Hadoop 叢集可以運作的 3 個模式分别是什麼, 都有哪些注意點?  

  單機模式、僞分布式模式、全分布式模式;

3、Hadoop 的核心配置檔案? 

  1)以前是hadoop-default.xml、hadoop-site.xml

  2)現在是core-site.xml、hdfs-site.xml、mapred-site.xml;都在conf目錄下;

4、hdfs-site.xml 的 3 個主要屬性? 

  1)dfs.name.dir 決定的是中繼資料存儲的路徑以及 DFS 的存儲方式(磁盤或是遠端)

  2)dfs.data.dir 決定的是資料存儲的路徑

  3)fs.checkpoint.dir 用于第二 Namenode

5、簡述HDFS的原理? 

  1)用戶端向 nameNode 發送要上傳檔案的請求

  2)nameNode 傳回給使用者是否能上傳資料的狀态

  3)加入使用者端需要上傳一個 1024M 的檔案,用戶端會通過 Rpc 請求 NameNode,并傳回需要上傳給那些 DataNode(配置設定機器的距離以及空間的大小等),namonode會選擇就近原則配置設定機器。

  4)用戶端請求建立 block 傳輸管道 chnnel 上傳資料

  5)在上傳時 datanode 會與其他的機器建立連接配接并把資料塊傳送到其他的機器上

  6)dataNode 向 namenode 彙報自己的儲存情況以及自己的資訊

  7)當第一個快上傳完後再去執行其他的複制的傳送

6、簡述MR(MapReduce)的原理? 

  1)當執行mr程式時,會執行一個Job

  2)用戶端的jobClick會請求namenode的jobTracker要執行任務

  3)jobClick會去HDFS端複制作業的資源檔案

  4)用戶端的jobClick會向namenode送出作業,讓namenode做準備

  5)Namenode的jobTracker會去初始化建立的對象

  6)Namenode會擷取hdfs的劃分的分區

  7)Namenode去檢查TaskTracker的心跳資訊,檢視存活的機器

  8)當執行的datenode執行任務時Datenode會去HDFS擷取作業的資源的檔案

  9)TaskTracker會去執行代碼,并登陸JVM的執行管道

  10)JVM或執行MapTask或者ReduceTask

  11)執行終結

7、談談資料傾斜,如何發生的,并給出優化方案

     資料的傾斜主要是兩個的資料相差的數量不在一個級别上,在執行任務時就造成了資料的傾斜,可以通過分區的方法減少reduce資料傾斜性能的方法,例如:抽樣和範圍的分區、自定義分區、資料大小傾斜的自定義政策;

8、簡單概括安裝hadoop的步驟

  1)建立 hadoop 帳戶。

  2)setup.改 IP。

  3)安裝 java,并修改/etc/profile 檔案,配置 java 的環境變量。

  4)修改 Host 檔案域名。

  5)安裝 SSH,配置無密鑰通信。

  6)解壓 hadoop。

  7)配置 conf 檔案下 hadoop-env.sh、core-site.sh、mapre-site.sh、hdfs-site.sh。

  8)配置 hadoop 的環境變量。

  9)Hadoop namenode -format

  10)start-all.sh

9、怎樣快速的殺死一個job

  1)執行hadoop  job -list  拿到job-id

  2)Hadoop job kill hadoop-id

10、簡單概述hadoop的combinet與partition的差別

  1)combine和partition都是函數,中間的步驟應該隻有shuffle! 

  2)combine分為map端和reduce端,作用是把同一個key的鍵值對合并在一起,可以自定義的;

  3)partition是分割map每個節點的結果,按照key分别映射給不同的reduce,也是可以自定義的。這裡其實可以了解歸類。

11、hadoop的shuffer的概念

  1)Shuffer是一個過程,實在map端到reduce在調reduce資料之前都叫shuffer,主要是分區與排序,也就是内部的緩存分分區以及分發(是reduce來拉資料的)和傳輸;

12、3 個 datanode 中有一個 個datanode 出現錯誤會怎樣?

    這個 datanode 的資料會在其他的 datanode 上重新做備份。

13、簡單概述一下hadoop1與hadoop2的差別

  1)Hadoop2與hadoop1最大的差別在于HDFS的架構與mapreduce的很大的差別,而且速度上有很大的提升;

  2)hadoop2最主要的兩個變化是:namenode可以叢集的部署了,hadoop2中的mapreduce中的jobTracker中的資源排程器與生命周期管理拆分成兩個獨立的元件,并命名為YARN

14、hadoop的二次排序

  1)Hadoop預設的是HashPartitioner排序,當map端一個檔案非常大另外一個檔案非常小時就會産生資源的配置設定不均勻,既可以使用setPartitionerClass來設定分區,即形成了二次分區。

15、mapreduce的combiner的作用是什麼,什麼時候不應該使用?

  1)Mapreduce中的Combiner就是為了避免map任務和reduce任務之間的資料傳輸而設定的,Hadoop允許使用者針對map task的輸出指定一個合并函數。即為了減少傳輸到Reduce中的資料量。它主要是為了削減Mapper的輸出進而減少網絡帶寬和Reducer之上的負載。

  2)在資料量較少時不宜使用。

16、你對zookeeper的了解?

  1)随着大資料的快速發展,多機器的協調工作,避免主要機器單點故障的問題,于是就引入管理機器的一個軟體,他就是zookeeper來協助機器正常的運作。

  2)Zookeeper有兩個角色分别是leader與follower ,其中leader是主節點,其他的是副節點,在安裝配置上一定要注意配置奇數個的機器上,便于zookeeper快速切換選舉其他的機器。

  3)在其他的軟體執行任務時在zookeeper注冊時會在zookeeper下生成相對應的目錄,以便zookeeper去管理機器。

17、hive是怎樣儲存中繼資料的?

  1)儲存中繼資料的方式有:記憶體資料庫rerdy,本地mysql資料庫,遠端mysql資料庫;

  2)但是本地的mysql資料用的比較多,因為本地讀寫速度都比較快

18、Hive中外部表與内部表的差別

  1)Hive 建立内部表時,會将資料移動到資料倉庫指向的路徑;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。

  2)在删除表的時候,内部表的中繼資料和資料會被一起删除,而外部表隻删除中繼資料,不删除資料。這樣外部表相對來說更加安全些,資料組織也更加靈活,友善共享源資料。

19、對于 hive,你寫過哪些 UDF 函數,作用是什麼?

  1)UDF: user  defined  function  的縮寫,

  1)編寫hive udf的兩種方式extends UDF 重寫evaluate第二種extends GenericUDF重寫initialize、getDisplayString、evaluate方法

20、Hive 的 sort by 和 order by 的差別

  1)order by 會對輸入做全局排序,是以隻有一個reducer(多個reducer無法保證全局有序)隻有一個reducer,會導緻當輸入規模較大時,需要較長的計算時間。

  2)sort by不是全局排序,其在資料進入reducer前完成排序.是以,如果用sort by進行排序,并且設定mapred.reduce.tasks>1, 則sort by隻保證每個reducer的輸出有序,不保證全局有序。

21、Hbase 的 rowkey 怎麼建立比較好?列族怎麼建立比較好?

  1)Rowkey是一個二進制碼流,Rowkey的長度被很多開發者建議說設計在10~100個位元組,不過建議是越短越好,不要超過16個位元組。在查找時有索引會加快速度。

  2)Rowkey散列原則 、 Rowkey唯一原則 、 針對事務資料Rowkey設計 、 針對統計資料的Rowkey設計 、 針對通用資料的Rowkey設計、 支援多3)總結設計列族:

    a、一般不建議設計多個列族

    b、資料塊的緩存的設計

    c、激進緩存設計

    d、布隆過濾器的設計(可以提高随機讀取的速度)

    e、生産日期的設計

    f、列族壓縮

    g、單元時間版本

22、hive 如何調優?

  1)在優化時要注意資料的問題,盡量減少資料傾斜的問題,減少job的數量,同僚對小的檔案進行成大的檔案,

  2)如果優化的設計那就更好了,因為hive的運算就是mapReduce是以調節mapreduce的參數也會使性能提高,如調節task的數目。

23、hbase 寫資料的原理

  1)首先,Client通過通路ZK來請求目标資料的位址。

  2)ZK中儲存了-ROOT-表的位址,是以ZK通過通路-ROOT-表來請求資料位址。

  3)同樣,-ROOT-表中儲存的是.META.的資訊,通過通路.META.表來擷取具體的RS。

  4).META.表查詢到具體RS資訊後傳回具體RS位址給Client。

  5)Client端擷取到目标位址後,然後直接向該位址發送資料請求

24、hbase當機了如何處理?

  1)HBase的RegionServer當機超過一定時間後,HMaster會将其所管理的region重新分布到其他活動的RegionServer上,由于資料和日志都持久在HDFS中,該操作不會導緻資料丢失。是以資料的一緻性和安全性是有保障的。

  2)但是重新配置設定的region需要根據日志恢複原RegionServer中的記憶體MemoryStore表,這會導緻當機的region在這段時間内無法對外提供服務。

  3)而一旦重分布,當機的節點重新啟動後就相當于一個新的RegionServer加入叢集,為了平衡,需要再次将某些region分布到該server。 

  4)是以,Region Server的記憶體表memstore如何在節點間做到更高的可用,是HBase的一個較大的挑戰。

25、Hbase 中的 metastore 用來做什麼的?

  1)Hbase的metastore是用來儲存資料的,

  2)其中儲存資料的方式有有三種第一種于第二種是本地儲存,第二種是遠端儲存這一種企業用的比較多

26、hbase是怎樣預分區的?

  如何去進行預分區,可以采用下面三步:

  1)取樣,先随機生成一定數量的rowkey,将取樣資料按升序排序放到一個集合裡

  2)根據預分區的region個數,對整個集合平均分割,即是相關的splitKeys.

  3)HBaseAdmin.createTable(HTableDescriptor tableDescriptor,byte[][] splitkeys)可以指定預分區的splitKey,即是指定region間的rowkey臨界值

27、怎樣将 mysql 的資料導入到 hbase 中?

  1)不能使用 sqoop,速度太慢了,提示如下:

    A、一種可以加快批量寫入速度的方法是通過預先建立一些空的 regions,這樣當資料寫入 HBase 時,會按照 region 分區情況,在叢集内做資料的負載均衡。

    B、hbase 裡面有這樣一個 hfileoutputformat 類,他的實作可以将資料轉換成 hfile格式,通過 new 一個這個類,進行相關配置,這樣會在 hdfs 下面産生一個檔案,這個時候利用 hbase 提供的 jruby 的 loadtable.rb 腳本就可以進行批量導入。

28、Redis, 傳統資料庫,hbase,hive  每個之間的差別?

  1)Redis 是基于記憶體的資料庫,注重實用記憶體的計算,

  2)hbase是列式資料庫,無法建立主鍵,地從是基于HDFS的,每一行可以儲存很多的列,

  3)hive是資料的倉庫,是為了減輕mapreduce而設計的,不是資料庫,是用來與hadoop做互動的。

29、HBase scan setBatch和setCaching的差別

  1)scan可以通過setCaching與setBatch方法提高速度(以空間換時間),

  2)setCaching設定的值為每次rpc的請求記錄數,預設是1;cache大可以優化性能,但是太大了會花費很長的時間進行一次傳輸。

  3)setBatch設定每次取的column size;有些row特别大,是以需要分開傳給client,就是一次傳一個row的幾個column。

30、flume 不采集 Nginx 日志,通過 Logger4j 采集日志,優缺點是什麼?

  1)在nginx采集日志時無法擷取session的資訊,然而logger4j則可以擷取session的資訊,

  2)logger4j的方式比較穩定,不會當機。缺點:不夠靈活,logger4j的方式和項目結合過濾緊密,而flume的方式就比較靈活,便于插拔式比較好,不會影響項目的性能。

31、flume 和 kafka 采集日志差別,采集日志時中間停了,怎麼記錄之前的日志。

  1)Flume 采集日志是通過流的方式直接将日志收集到存儲層,而 kafka 将日志緩存在 kafka叢集,待後期可以采集到存儲層。

  2)Flume 采集中間停了,可以采用檔案的方式記錄之前的日志,而 kafka 是采用 offset(偏移量) 的方式記錄之前的日志。

32、kafka 中怎樣儲存資料結構的,data.....目錄下有多少個分區,每個分區的存儲格式是什麼樣的?

  1)topic 是按照“主題名-分區”存儲的

  2)分區個數由配置檔案決定

  3)每個分區下最重要的兩個檔案是 0000000000.log 和 000000.index,0000000.log,以預設 1G 大小復原。

33、mr 和 spark 差別,怎麼了解 spark-rdd

  1)Mr 是檔案方式的分布式計算架構,是将中間結果和最終結果記錄在檔案中,map 和 reduce的資料分發也是在檔案中。

  2)spark 是記憶體疊代式的計算架構,計算的中間結果可以緩存記憶體,也可以緩存硬碟,但是不是每一步計算都需要緩存的。

  3)spark-rdd 是一個資料的分區記錄集合,是利用記憶體來計算的,spark之是以快是因為有記憶體的模式

34、你們的叢集規模?

  1)這個得看個人在公司的規模,下面介紹一下我們公司的一些配置:

    聯想System x3750  伺服器,價格3.5萬,記憶體容量32G,産品類型機架式,硬碟接口SSD,CPU頻率2.6GH,CPU數量2顆,三級緩存15MB,cpu核心6核,cpu線程數12線程,最大記憶體支援1.5T,網絡是千兆網卡,可插拔時硬碟接口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

資料就是每天通路的Log日志不是很大,有的時候大有的時候小的可憐

35、你在項目中遇到了哪些難題,是怎麼解決的?

  1)在執行任務時發現副本的個數不對,經過一番的查找發現是逾時的原因,修改了配置檔案hdfs-site.xml:中修改了逾時時間。

  2)由于當時在配置設定各個目錄空間大小時,沒有很好的配置設定導緻有的目錄的空間浪費,于是整體商量後把儲存的空間調大了一些。

繼續閱讀