天天看點

hadoop、hive、spark、hbase綜述hadoop綜述spark綜述habase綜述

hadoop綜述

1    namenode

    一般在master節點上,用來存儲檔案和目錄的所有中繼資料資訊    

    常見面試問題:"namenode和datanode可以在同一個節點嗎?"

    -- 原理上可以在一個節點,但是這樣做有很多弊端,比如datanode是資料的實際執行節點,對資源的占用會影響namenode節點的性能;

2    datanode

    一般在slave節點上,用來存儲實際資料    

3    secondary namenode

    namenode的副本節點,定期通過editlog合并namenode的變化。

    常見面試問題:namenode的主從節點,以什麼形式合并變化?

    -- 通過editlog,即是編輯日志

4    jobtracker

    運作在namenode上,是負責送出和運作mapreduce job的守護程式,會向tasktracker配置設定任務

    一句話總結,即是jobtracker存在于namenode上,向tasktracker配置設定任務

    常見面試問題:jobtracker類似spark裡面的什麼?

    -- 類似driver,tasktracker類似spark裡面的worker,spark也是driver向worker配置設定具體任務,然後任務執行在worker的executor上

5    tasktracker

    運作在datanode上,是具體的執行計算的節點    

6    resourcemanager

    yarn上負責資源配置設定和排程    

    常見面試問題:RM、NM 和 NN、DN比較

    -- RM和NM是針對yarn而言的資源配置設定和節點管理,NN和DN是相對于hadoop而言,不是一種體系的概念,不好一起比較;

7    nodemanager

    slave節點,顧名思義,是用來管理節點的,檢測啟動了應用程式的容器,向resourcemanager報告    

8    jobhistoryserver        

    維護有關的mapreduce工作中的應用終止後的資訊    也即是MR應用終止後,應用終止後的資訊會儲存在jobhistoryserver中;

9    什麼是主動和被動的namenodes    

    既是主備namenode的另一種叫法,namenodes的主動被動,既是主備的意思

10    hadoop叢集可以删除或者添加節點嘛,怎麼添加    

    這都是針對資料節點而言,資料節點崩潰可以删除或者新增    

    添加的方法參見hadoop官網

11    兩個用戶端嘗試通路相同的HDFS檔案,會發生什麼    

    HDFS隻支援獨占寫入,是以會接受一個拒絕一個    

    -- HDFS的獨占寫入特性,但可以并發的讀

12    解釋報錯:檔案隻能被複制到0節點,而不是1    

    這是0節點沒有任何可用的datanode    

    檔案不能被複制到某節點的報錯:一般說明某節點沒有任何可用的datanode

13    hdfs關閉安全模式    

    hadoop dfsadmin -safemode        

    hdfs的系統操作指令,dfsadmin

14    如何定義hdfs的block    

    dfs.block.size    

    在HDFS-site.xml中    

    -- hdfs的block的作用:block是hdfs中最基本的存儲機關

15    hadoop2預設block大小    

    128M        

16    rack awareness    

    既是副本放置政策    

    若值為3:

    -- 政策既是資料的每個塊,兩個副本在一個機架中,第三個副本存在于不同的機架;

    -- 副本放置政策:若副本為3,兩個同機架,一個跨機架

17    為什麼hadoop适用于大型資料集,而不是适用具有大量的小檔案的應用程式?    

    因為namenode很昂貴,如果大量的小檔案過多的消耗了namenode,肯定不如一個單獨檔案中有大量資料        

    namenode是存儲檔案和目錄的所有中繼資料資訊的節點,如果檔案數量很多的話,那對namenode的消耗會很大,因為無論多小的檔案都要對應一個中繼資料資訊,多大的檔案也要對應一個中繼資料資訊;

18    speculative running    

    因為一個節點運作任務較慢,備援另一個節點讓兩個節點同時執行同一任務,這兩個程式先完成的被接受,後完成的被殺死    

    前面描述的這個過程稱為:specculative running,即是投機執行,如果一個節點執行緩慢,會複制一個同樣的節點來執行同一個任務,相同的被接受,不同的被殺死;

19    hadoop叢集中實作HA    

    使用QJM或者NFS共享存儲        

20    為什麼在HDFS,讀是并行的,但寫不是    

    HDFS的讀可以MR分割成塊讀取,但寫MR并不能并行;    

    -- 導緻spark的讀也是并行的(細粒度),但寫是粗粒度    

    -- HDFS的讀是并行的,寫是獨占寫入,前面的兩個檔案同時寫一個HDFS的原理即是來源于此

    -- 類似spark讀是細粒度,寫是粗粒度;

21    報錯:通路hdfs報錯:連接配接被拒絕,java異常    namenode不工作了    

    可能是namenode是在安全模式

    或者namenodeIP位址改變了

    hdfs連接配接異常報錯:一般是namenode報錯,是以namenode和hdfs的聯系較為緊密;

22    zookeeper在叢集中的作用    

    管理叢集、hadoop節點之間的協調、中繼資料的同步        

23    什麼是hive中的serdr    

    一種序列化和一個反序列化的組合    

    -- hive使用serdr來讀取和寫入表行    

    SerDr說明hive如何去處理一條記錄,包括Serialize/Deserilize兩個功能

    Serialize把hive使用的java object轉換成能寫入hdfs的位元組序列,或者其他系統能識别的流檔案

    Deserilize把字元串或者二進制流轉換成hive能識别的java object對象

24    hive存儲表中資料的預設位置是    

    HDFS://NameNode/使用者/hive/warehouse        

    hive,hdfs的中繼資料資訊都存在hdfs的namenode檔案夾對應使用者下面;

25    hbase中的WAL和Hlog    

    WAL:預寫日志    

    記錄資料發生的所有更改,在伺服器發生故障時,WAL作為生命線檢索丢失的資料;    

    -- WAL是hbase的生命線

spark綜述

1    spark怎麼實作HA

    spark master使用zookeePer做HA    

    并且把中繼資料在ZK中儲存    

    -- hadoop用NFS做HA,spark master使用ZK做HA    

2    spark master HA主從切換不會影響叢集已有作業運作,為什麼?    

    因為不需要再和master通訊    

    程式的資源申請的過程先于程式排程的過程,程式在運作之前,已經申請過資源了,driver和Executors通訊,不需要和master進行通訊的

    -- 是以master節點換了,也不會影響現有節點,隻要excutor的節點沒挂就可以;    

3    什麼是粗粒度配置設定,什麼是細粒度配置設定    

    粗粒度,啟動時就配置設定好資源,後續就使用這個配置設定好的資源,我稱之為大方配置設定

    細粒度    用資源的時候配置設定,用完就立即收回,我稱之為小氣配置設定

4    spark有哪些常見的穩定版本    

    1.6或者2.0        

5    driver的功能(有點像jobtracker)    

    作業的主程序,具有main函數,并且有sparkcontext,是程式的入口    

    作用:

    負責向叢集申請資源

    向master注冊資訊

    作業排程

    作業解析

    生成stage

    排程task到executor上

    包括DAGScheduler,TaskScheduler"    

6    work的主要工作(有點像jobtracker)        

    管理目前節點記憶體、CPU使用情況;

    接受master配置設定過來的資源指令

    通過executorrunner啟動程式;

    不會彙報目前資訊給master,這是driver的工作;

    不會運作程式的代碼,那是excutor的工作;"    

7    什麼是rdd的寬依賴和窄依賴    

    寬依賴    多個子RDD依賴同一個父RDD    

    窄依賴    一個子RDD依賴一個父RDD    

8    cache後面不能接其他算子    

    可以,但接了算子之後,起不到緩存應有的效果

    因為其他算子相當于讀了cache的内容,重新觸發了cache;        

9    reducebykey 和 reduce兩個算子    

    reduceByKey不是action,reduce是action        

10    資料本地化是在哪個環節确定的    

    是由具體的task在哪台機器上運作确定的        

11    RDD的彈性表現在哪幾點    

    自動進行記憶體和磁盤的存儲切換 -- 記憶體和磁盤的彈性

    容錯重試 -- 容錯的彈性

    分片的彈性 -- 分片的彈性

12    RDD有哪些缺陷    

    不支援細粒度的寫和更新操作,spark寫資料是粗粒度的,但讀資料是細粒度的;

    不支援增量疊代計算,flink支援;-- flink相比于spark的優勢:支援增量疊代        

13    spark的shuffle過程    

    比如groupByKey就會有一個shuffle過程,通過鍵的哈希值shuffle;        

14    如何從kafka中擷取資料    

    基于receiver的方式:是kafka的高層次Consumer API;

    基于Direct方式:周期性的查詢kafka來獲得每個topic+partition最新的offset,當處理資料的job啟動時,就會使用kafka的簡單的consumer api來擷取kafka指定的offset範圍的資料;"    offset: 消息序列号,一個連續的用于定位被追加到分區的每一個消息的序列号,最大值為64位的long大小,19位數字字元長度    kafka中各關鍵詞的解釋:https://blog.csdn.net/sand_clock/article/details/68486599

15    kafka中資料傾斜解決方案    "首先是定位資料傾斜:OOM或者是任務執行緩慢,看日志或者看WebUI

    解決:

    1)、廣播小表

    2)、分拆資料傾斜部分為幾個部分

    3)、增大并行度

    4)、自定義partitioner,分散key的分布"        

16    spark中資料的位置是誰管理的    

    是由blockmanager進行管理        

17    spark如何處理不能被序列化的對象    

    将不能序列化的對象封裝成object即可        

18    spark程式執行,有時候預設為什麼産生很多task,怎麼修改task執行個數?    

    task和partion是一一對應的,隻要設定partition個數即可;    

    -- 注意:task和partition是一一對應的    

19    為什麼spark application沒有獲得足夠的資源,job就開始執行了    

    因為task的excutor申請資源和程式執行是兩個過程,一般是先資源申請,然後程式執行,此時有可能是這兩個過程異步了;    

20    什麼叫spark持久化    

    通俗解釋既是落了記憶體        

21    為什麼要進行序列化    

    序列化可以減少資料的體積,減少存儲空間

    但壞處是還要反序列化

habase綜述

1    hbase讀寫    

    github pysaprk+hbase 工具類:https://github.com/zenyud/Pyspark_ETL    

    主要原理:

        hbase-client用來連接配接用戶端

        hbase-server用來進行hbase的各種操作"

2    hbase查詢            

    還可以使用上面的程式查詢

3    hbase和mysql(等其他關系資料庫的寫入寫出)的實作

    https://segmentfault.com/a/1190000013928073

    https://blog.csdn.net/thinkpadshi/article/details/77628346

    1)、除了直接用程式對hbase進行讀取操作之外,也可以先把資料寫入關系型資料庫,然後用sqoop實作讀取;

    2)、一般,mysql的表名對應hbase的column-family,mysql的主鍵對應hbase的rowkey

        mysql表名 -- 類似hbase的列簇名

        mysql的主鍵 -- 類似hbase的rowkey

        -- 上面兩點可以從mysql資料導入hbase看出來;

    3)、可以使用sqoop完成hbase和關系型資料庫的互相傳導;

繼續閱讀