基礎類
Java
- Java中抽象類
抽象類不能實例化,繼承的關鍵字仍然是extends,而且繼承過後可以不覆蓋方法,只是使用繼承而來的方法;
抽象類和抽象方法必須用abstract關鍵字修飾;抽象類中不一定有抽象方法,但是有抽象方法的類必須定義爲抽象類;
抽象類不能直接實例化;通過子類重寫方法多態方式實例化:它不是具體的;抽象類有構造方法,用於子類訪問父類數據的初始化;
抽象類的子類: 如果不想重寫抽象方法,該子類必須是抽象類;成爲具體類則必須重寫所有的抽象方法;
平臺類
HDFS
- 分佈式文件系統, 主:namenode,secondarynamenode; 從:datanode
- NameNode
管理元數據信息,給子節點分配任務(FSImage是主節點啓動時對整個文件系統的快照,Edits是修改記錄) - DataNode
負責數據存儲,實時上報心跳給主節點 - SecondaryNameNode
首先,它定時到NameNode去獲取edit logs,並更新到fsimage上。一旦它有了新的fsimage文件,它將其拷貝回NameNode中。
NameNode在下次重啓時會使用這個新的fsimage文件,從而減少重啓的時間。 - Hdfs和Yarn有什麼區別
Hdfs是分佈式文件存儲系統,是用來存儲文件的;
Yarn是一個資源管理系統,可爲上層應用提供統一的資源管理和調度,它的引入爲集羣在利用率、資源統一管理和數據共享等方面帶來了巨大好處; - Hdfs的塊的大小多少能不能改成10M
不能,假如數據塊設置過少,那需要讀取的數據塊就比較多,由於數據塊在硬盤上非連續存儲,普通硬盤因爲需要移動磁頭,所以隨機尋址較慢,讀越多的數據塊就增大了總的硬盤尋道時間。
當硬盤尋道時間比io時間還要長的多時,那硬盤尋道時間就成了系統的一個瓶頸. - Hive中的內表和外表的區別
在刪除內部表的時候,Hive將會把屬於表的元數據和數據全部刪掉;
而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的; - hdfs 讀寫流程
YARN
- 分佈式資源管理系統,用於同一管理集羣中的資源
- 主:ResourceManager, 從:NodeManager
MapReduce
- MapReduce的shuffle過程
- 從Map產生輸出開始到Reduce取得數據作爲輸入之前的過程稱作shuffle。
- Collect階段: 將MapTask的結果輸出到默認大小爲100M的環形緩衝區,保存的是key/value,Partition分區信息等
- Spill階段: 當內存中的數據量達到一定的閥值的時候,就會將數據寫入本地磁盤,在將數據寫入磁盤之前需要對數據進行一次排序的操作,如果配置了combiner,還會將有相同分區號和key的數據進行排序。
- Merge階段: 把所有溢出的臨時文件進行一次合併操作,以確保一個MapTask最終只產生一箇中間數據文件.
- Copy階段: ReduceTask啓動Fetcher線程到已經完成MapTask的節點上覆制一份屬於自己的數據,這些數據默認會保存在內存的緩衝區中,當內存的緩衝區達到一定的閥值的時候,就會將數據寫到磁盤之上。
- Merge階段: 在ReduceTask遠程複製數據的同時,會在後臺開啓兩個線程對內存到本地的數據文件進行合併操作。
- MapReduce的Partition和Combine有什麼區別
- combine: 分爲map端和reduce端,作用是把同一個key的鍵值對合並在一起,可以自定義,該類的主要功能是合併相同的key鍵
- partition: 是分割map每個節點的結果,按照key分別映射給不同的reduce,也是可以自定義的,partition的作用就是把這些數據歸類
Zookeeper
- Zookeeper是開源的分佈式應用協調系統;官方定義: ZooKeeper: A Distributed Coordination Service for Distributed Applications
- 主:QuorumPeerMain
Hive
Hbase
- 主:HMaster,HRegionserver 從: Region
- 分佈式數據倉庫,本質是數據分析工具,把Hive SQL 解釋成 MapReduce來執行.
- Hive中的表爲純邏輯表,僅僅對錶的元數據進行定義。Hive沒有物理存儲的功能,它完全依賴HDFS和MapReduce。HBase表則是物理表,適合存放非結構化的數據。
- Hive是在MapReduce的基礎上對數據進行處理;而HBase爲列模式,這樣使得對海量數據的隨機訪問變得可行。
- HBase的存儲表存儲密度小,因而用戶可以對行定義成不同的列;而Hive是邏輯表,屬於稠密型,即定義列數,每一行對列數都有固定的數據。
- Hive使用Hadoop來分析處理數據,而Hadoop系統是批處理系統,所以數據處理存在延時的問題;而HBase是準實時系統,可以實現數據的實時查詢。
- Hive沒有row-level的更新,它適用於大量append-only數據集(如日誌)的批任務處理。而基於HBase的查詢,支持和row-level的更新。
- Hive全面支持SQL,一般可以用來進行基於歷史數據的挖掘、分析。而HBase不適用於有join,多級索引,表關係 複雜的應用場景。
Sqoop
- Sqoop的底層原理
是用來實現結構型數據(如關係數據庫)和Hadoop之間進行數據遷移的工具。使用MapReduce來提高併發和容錯能力.
Spark
- 主:Master, 從:Worker
Kafka
- Topic : 消息根據Topic進行歸類
- Producer: 發送消息者
- Consumer: 消息接受者
- Broker: 每個kafka實例(server)
- Zookeeper: 依賴集羣保存meta信息
Flume
- Agent, Source, Channel, Sink
數倉類
-
order by ,sort by ,destribute by,cluster by 區別
- order by會對輸入做全局排序,因此只有一個Reducer(多個Reducer無法保證全局有序),然而只有一個Reducer,會導致當輸入規模較大時,消耗較長的計算時間
- sort by不是全局排序,其在數據進入reducer前完成排序,sort by只會保證每個reducer的輸出有序,並不保證全局有序。sort by的數據只能保證在同一個reduce中的數據可以按指定字段排序。
- distribute by是控制在map端如何拆分數據給reduce端的。hive會根據distribute by後面列,對應reduce的個數進行分發,默認是採用hash算法。sort by爲每個reduce產生一個排序文件。在有些情況下,你需要控制某個特定行應該到哪個reducer,這通常是爲了進行後續的聚集操作。distribute by剛好可以做這件事。因此,distribute by經常和sort by配合使 用
- cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是倒敘排序,不能指定排序規則爲ASC或者DESC。
-
where和having的區別
- Where是一個約束聲明,使用Where來約束來自數據庫的數據,Where是在結果返回之前起作用的,且Where中不能使用聚合函數。
- Having是一個過濾聲明,是在查詢返回結果集以後對查詢結果進行的過濾操作,在Having中可以使用聚合函數。
-
Hive中的內表和外表的區別
在刪除內部表的時候,Hive將會把屬於表的元數據和數據全部刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的. -
分區表和分桶表有什麼區別
- 分區就是分文件夾,在表文件夾下多一個文件夾,分區字段是虛擬的,用於標識文件,分區字段一定不是表中存 在的字段,否則會便宜報錯;
- 分桶功能默認不開啓,需要手動開啓,分桶個數自定義,是相對於分區更細粒度的劃分,是分文件;