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和關系型資料庫的互相傳導;