1. 程式人生 > >大資料 hadoop 經典面試題 | 三

大資料 hadoop 經典面試題 | 三

1、MapReduced的工作流程

輸入分片(inputsplit):在進行map計算之前,mapreduce會根據輸入檔案計算輸入分片(input split),每個輸入分片(input split)針對一個map任務;儲存的並非資料本身,而是一個分片長度和一個記錄資料的位置的陣列,輸入分片(input split)往往和hdfs的block(塊)關係很密切

map階段:程式設計師編寫好的map函數了,因此map函式效率相對好控制,而且一般map操作都是本地化操作也就是在資料儲存節點上進行;

combiner階段:combiner階段是程式設計師可以選擇的,combiner其實也是一種reduce操作,因此我們看見WordCount類裡是用reduce進行載入的

shuffle階段:將map的輸出作為reduce的輸入的過程就是shuffle了

reduce階段:和map函式一樣也是程式設計師編寫的,最終結果是儲存在hdfs上的。

2、MR的架構

1、簡介:

MapReduce是一個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠執行在由上千個商用機器組成的大叢集上,並以一種可靠的,具有容錯能力的方式並行地處理上TB級別的海量資料集  

2、4個物件:

客戶端:編寫mapreduce程式,配置作業,提交作業,這就是程式設計師完成的工作;

JobTracker:初始化作業,分配作業,與TaskTracker通訊,協調整個作業的執行;

TaskTracker:保持與JobTracker的通訊,在分配的資料片段上執行Map或Reduce任務,TaskTracker和JobTracker的不同有個     很重要的方面,就是在執行任務時候TaskTracker可以有n多個,JobTracker則只會有一個

Hdfs:儲存作業的資料、配置資訊等等,最後的結果也是儲存在hdfs上面

3、mysql和mongodb的區別

mongodb與mysql命令對比 傳統的關係資料庫一般由資料庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB是由資料庫(database)、集合(collection)、文件物件(document)三個層次組成。MongoDB對於關係型資料庫裡的表,但是集合中沒有列、行和關係概念,這體現了模式自由的特點。

二者最大的區別就是MongoDB是非關係型資料庫,mySQL是關係型資料庫,那麼在選型的時候,很大程度上就需要由業務來決定傾向性。MongoDB沒有表、行、列等等的概念,相對更靈活,限制更少一些。 MongoDB可以更方便的處理流式資料。 MongoDB的索引放在記憶體中,能夠提升隨機讀寫的效能。 MongoDB對資料間的事務關係支援比較弱。 MongoDB自帶一個分散式檔案系統,可以很方便地部署到伺服器機群上。 MongoDB支援單集合分片,可以很好的解決單表過大的問題。

4、Secondary NameNode:它究竟有什麼作用?

5、什麼是負載均衡

負載均衡 建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴充套件網路裝置伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。

負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web伺服器FTP伺服器企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。

6、Kafka 使用 Zookeeper 做什麼?

kafka使用ZooKeeper用於管理、協調代理。每個Kafka代理通過Zookeeper協調其他Kafka代理。當Kafka系統中新增了代理或某個代理失效時,Zookeeper服務將通知生產者和消費者。生產者與消費者據此開始與其他代理協調工作。Zookeeper在Kakfa中扮演的角色:Kafka將元資料資訊儲存在Zookeeper中,但是傳送給Topic本身的資料是不會發到Zk上的

kafka使用zookeeper來實現動態的叢集擴充套件,不需要更改客戶端(producer和consumer)的配置。broker會在zookeeper註冊並保持相關的元資料(topic,partition資訊等)更新。

而客戶端會在zookeeper上註冊相關的watcher。一旦zookeeper發生變化,客戶端能及時感知並作出相應調整。這樣就保證了新增或去除broker時,各broker間仍能自動實現負載均衡。這裡的客戶端指的是Kafka的訊息生產端(Producer)和訊息消費端(Consumer)

Broker端使用zookeeper來註冊broker資訊,以及監測partitionleader存活性.

Consumer端使用zookeeper用來註冊consumer資訊,其中包括consumer消費的partition列表等,同時也用來發現broker列表,並和partitionleader建立socket連線,並獲取訊息.

Zookeer和Producer沒有建立關係,只和Brokers、Consumers建立關係以實現負載均衡,即同一個ConsumerGroup中的Consumers可以實現負載均衡(因為Producer是瞬態的,可以傳送後關閉,無需直接等待)

7、Zookeeper可以幹什麼

Zookeeper是一個分散式協調服務。這樣我們就可以利用Zookeeper來協調多個分散式程序之間的活動。比如在一個分散式環境中,為了提高可靠性,我們的叢集的每臺伺服器上都部署著同樣的服務。但是,一件事情如果叢集中的每個伺服器都進行的話,那相互之間就要協調,程式設計起來將非常複雜。而如果我們只讓一個服務進行操作,那又存在單點。通常還有一種做法就是使用分散式鎖,在某個時刻只讓一個服務去幹活,當這臺服務出問題的時候鎖釋放,立即fail over到另外的服務。這在很多分散式系統中都是這麼做,這種設計有一個更好聽的名字叫Leader Election(leader選舉)。比如HBase的Master就是採用這種機制。但要注意的是分散式鎖跟同一個程序的鎖還是有區別的,所以使用的時候要比同一個程序裡的鎖更謹慎的使用。

8、SQL事物

8.1、事務概念

事務是一種機制、是一種操作序列,它包含了一組資料庫操作命令,這組命令要麼全部執行,要麼全部不執行。因此事務是一個不可分割的工作邏輯單元。在資料庫系統上執行併發操作時事務是作為最小的控制單元來使用的。這特別適用於多使用者同時操作的資料通訊系統。例如:訂票、銀行、保險公司以及證券交易系統等。

8.2、事務屬性

事務4大屬性: 1   原子性(Atomicity):事務是一個完整的操作。 2   一致性(Consistency):當事務完成時,資料必須處於一致狀態。 3   隔離性(Isolation):對資料進行修改的所有併發事務是彼此隔離的。 4   永續性(Durability):事務完成後,它對於系統的影響是永久性的。xin_35353187/article/details/82351970

9、Hbase 讀寫流程?

9.1、讀資料流程:

1、客戶端首先會根據配置檔案中zookeeper地址連線zookeeper,並讀取/<hbase-rootdir>/meta-region-server節點資訊,該節點資訊儲存HBase元資料(hbase:meta)表所在的RegionServer地址以及訪問埠等資訊。使用者可以通過zookeeper命令(get /<hbase-rootdir>/meta-region-server)檢視該節點資訊。

2、根據hbase:meta所在RegionServer的訪問資訊,客戶端會將該元資料表載入到本地並進行快取。然後在表中確定待檢索rowkey所在的RegionServer資訊。

3、根據資料所在RegionServer的訪問資訊,客戶端會向該RegionServer傳送真正的資料讀取請求。

9.2、寫入資料流程較複雜,參考連結:

http://bbs.edu360.cn/thread-5530-1-1.html

10、Hive 資料傾斜問題?

資料傾斜 解決原則就是將資料量大key打散,分到不同的分割槽再重新 處理一遍

Hive group的時候 指定組合 key,

11、Spark執行的四種模式是什麼? 都有什麼特點,你們用哪一種??

本地單機模式: 本地單機模式下,所有的Spark程序均運行於同一個JVM中,並行處理則通過多執行緒來實現。在預設情況下,單機模式啟動與本地系統的CPU核心數目相同的執行緒。如果要設定並行的級別,則以local[N]的格式來指定一個master變數,N表示要使用的執行緒數目。

叢集單機模式(Standalone): Spark叢集由兩類程式構成:一個驅動程式(Driver)和多個執行程式(Excutor)。本地模式時所有的處理都執行在同一個JVM內,在叢集模式時通常執行在多個不同的節點上。

基於Mesos: Mesos是一個開源叢集計算框架。

基於YARN:Hadoop關聯形成叢集計算和資源排程框架。(使用較多)

我們使用的是Spark On Yarn。