Hadoop面試題



親愛的讀者們,這些Hadoop面試題專為幫助您瞭解在Hadoop面試中可能遇到的問題型別而設計。根據我的經驗,優秀的面試官很少會預先計劃好要問哪些具體問題,通常問題會從該主題的一些基本概念開始,然後根據後續討論和您的回答繼續深入。

它顯示執行Hadoop叢集的守護程序的狀態。輸出會顯示namenode、datanode、secondary namenode、Jobtracker和Task tracker的狀態。

步驟1. 點選stop-all.sh,然後點選start-all.sh 或者

步驟2. 輸入sudo hdfs (按回車),su-hdfs (按回車),/etc/init.d/ha (按回車),然後/etc/init.d/hadoop-0.20-namenode start (按回車)。

Hadoop可以執行的三種模式是:

  1. 獨立(本地)模式
  2. 偽分散式模式
  3. 完全分散式模式

/etc/init.d指定了守護程序(服務)的存放位置,或檢視這些守護程序的狀態。這是非常Linux特有的,與Hadoop無關。

它無法成為Hadoop叢集的一部分。

當Namenode宕機時,您的叢集就會停止執行,這是因為Namenode是HDFS中的單點故障。

大資料只不過是如此龐大和複雜的資料集合,以至於使用現有的資料庫管理工具或傳統資料處理技術來捕獲、儲存、處理、檢索和分析它變得非常繁瑣。

大資料的三個特徵是:

 

體量(Volume) - Facebook每天生成500+TB的資料。

速度(Velocity) - 每天分析200萬條記錄以找出損失的原因。

多樣性(Variety) - 圖片、音訊、影片、感測器資料、日誌檔案等。真實性(Veracity):資料中的偏差、噪聲和異常。

有效的大資料分析提供了許多業務優勢,因為組織將瞭解哪些領域需要關注,哪些領域不那麼重要。大資料分析提供了一些早期關鍵指標,可以防止公司遭受巨大損失,或幫助抓住絕佳機會!精確的大資料分析有助於決策!例如,如今人們在購買任何產品或服務之前,都非常依賴Facebook和Twitter。這一切都歸功於大資料的爆發。

每天都有大量非結構化資料被匯入我們的機器中。主要的挑戰不是將大型資料集儲存在我們的系統中,而是在組織中檢索和分析大資料,這些資料分佈在不同位置的不同機器上。在這種情況下,就需要Hadoop。Hadoop能夠非常快速且經濟高效地分析不同位置不同機器上的資料。它使用MapReduce的概念,能夠將查詢分成小部分並並行處理它們。這也被稱為平行計算。為什麼Hadoop如此受歡迎這個連結詳細解釋了Hadoop為什麼如此受歡迎!

傳統RDBMS用於事務系統來報告和存檔資料,而Hadoop是一種將海量資料儲存在分散式檔案系統中並進行處理的方法。當您想從大資料中查詢一條記錄時,RDBMS很有用;而當您想一次性獲取大資料並在稍後對其進行分析時,Hadoop很有用。

假設您有一個儲存在系統中的檔案,由於某些技術問題,該檔案被破壞了。那麼就沒有機會找回該檔案中存在的資料。為了避免這種情況,Hadoop在HDFS中引入了容錯功能。在Hadoop中,當我們儲存檔案時,它會自動複製到另外兩個位置。因此,即使一兩個系統崩潰,檔案仍然可以在第三個系統上訪問。

HDFS使用商用硬體(具有平均配置的系統),這些系統隨時都可能發生崩潰。因此,為了使整個系統高度容錯,HDFS會將資料複製並存儲在不同位置。HDFS上的任何資料至少儲存在3個不同位置。因此,即使其中一個損壞,另一個由於某種原因暫時不可用,也可以從第三個位置訪問資料。因此,不會丟失資料。這個複製因子幫助我們實現Hadoop的容錯特性。

不會,計算只會在原始資料上進行。主節點會知道哪個節點準確地擁有該特定資料。如果其中一個節點沒有響應,則認為它已失敗。只有在這種情況下,才會在第二個副本上進行所需的計算。

Namenode是執行JobTracker的主節點,包含元資料。它維護和管理存在於datanode上的資料塊。它是一臺高可用性機器,也是HDFS中的單點故障。

不是。Namenode永遠不可能是商用硬體,因為整個HDFS都依賴於它。它是HDFS中的單點故障。Namenode必須是一臺高可用性機器。

Datanode是部署在每臺機器上的從節點,提供實際的儲存空間。它們負責為客戶端提供讀寫請求服務。

與跨多個檔案分散的小量資料相比,HDFS更適合於單個檔案中大量的資料集。這是因為Namenode是一個非常昂貴的高效能系統,因此不應透過為多個小檔案生成的過多元資料來佔用Namenode中的空間。因此,當單個檔案中存在大量資料時,namenode將佔用較少的空間。因此,為了獲得最佳化的效能,HDFS支援大型資料集而不是多個小檔案。

JobTracker是一個在namenode上執行的守護程序,用於提交和跟蹤Hadoop中的MapReduce作業。它將任務分配給不同的TaskTracker。在一個Hadoop叢集中,只有一個JobTracker,但有很多TaskTracker。它是Hadoop和MapReduce服務的單點故障。如果JobTracker宕機,所有正在執行的作業都將停止。它根據TaskTracker傳送的心跳來決定分配的任務是否已完成。

TaskTracker也是一個在datanode上執行的守護程序。TaskTracker管理從節點上單個任務的執行。當客戶端提交作業時,JobTracker將初始化作業,劃分工作並將其分配給不同的TaskTracker以執行MapReduce任務。在執行此操作時,TaskTracker將透過傳送心跳與JobTracker同時通訊。如果JobTracker在指定時間內沒有從TaskTracker收到心跳,則它將假設TaskTracker已崩潰,並將該任務分配給叢集中的另一個TaskTracker。

心跳是一個指示其處於活動狀態的訊號。Datanode向Namenode傳送心跳,TaskTracker向JobTracker傳送心跳。如果Namenode或JobTracker沒有收到心跳,它們將判斷Datanode出現問題或TaskTracker無法執行分配的任務。

“塊”是可以讀取或寫入的最小資料量。在HDFS中,預設塊大小為64 MB,而Unix/Linux中的塊大小為8192位元組。HDFS中的檔案被分解成塊大小的塊,這些塊作為獨立單元儲存。與磁碟塊相比,HDFS塊很大,特別是為了最大限度地減少查詢的成本。如果特定檔案為50 MB,HDFS塊是否仍然會消耗64 MB作為預設大小?不會!64 MB只是一個儲存資料的單元。在這種特定情況下,只有50 MB會被HDFS塊消耗,而14 MB將空閒以儲存其他內容。它是主節點以高效的方式進行資料分配。

一個檔案可以大於網路中任何單個磁碟的容量。沒有任何要求規定檔案的各個塊必須儲存在同一磁碟上,因此它們可以利用叢集中的任何磁碟。將抽象單元設為塊而不是檔案,簡化了儲存子系統。塊提供了容錯和可用性。為了防止塊損壞以及磁碟和機器故障,每個塊都會被複制到少量物理上分離的機器(通常是三臺)。如果一個塊不可用,則可以從另一個位置讀取副本,而客戶端對此是透明的。

Hadoop有自己的索引方式。根據塊大小,一旦資料儲存完畢,HDFS將繼續儲存資料的最後一部分,這部分資料會指明資料的下一部分儲存位置。

是的,JobTracker和TaskTracker位於不同的機器上。原因是JobTracker是Hadoop MapReduce服務的單點故障。如果它宕機,所有正在執行的作業都將停止。

通訊方式是SSH。

機架是一個儲存區域,所有DataNode都放在一起。這些DataNode可以物理上位於不同的位置。機架是儲存在單個位置的DataNode的物理集合。單個位置可以有多個機架。

Secondary NameNode不斷地從NameNode的RAM中讀取資料並將其寫入硬碟或檔案系統。它不是NameNode的替代品,因此如果NameNode發生故障,整個Hadoop系統將崩潰。

NameNode接收輸入並將其分成幾部分,並將它們分配給DataNode。這些DataNode處理分配給它們的task,並生成鍵值對,並將中間輸出返回給Reducer。Reducer收集所有DataNode的這些鍵值對,並將它們組合起來,生成最終輸出。

透過MapReduce程式,讀取檔案時可以透過分割其塊來讀取。但在寫入時,由於系統還不知道傳入的值,因此無法應用MapReduce,也不可能進行並行寫入。

使用“-distcp”命令進行復制。

hadoop fs -setrep -w 2 apache_hadoop/sample.txt

機架感知是指NameNode如何根據機架定義來決定放置塊的方式。Hadoop將嘗試最小化同一機架內DataNode之間的網路流量,只有在必要時才會聯絡遠端機架。NameNode能夠透過機架感知來控制這一點。

core-default.xml

hadoop dfsadmin -report

在這種情況下,您不需要關閉和/或重啟整個叢集。

首先,將新節點的DNS名稱新增到主節點上的conf/slaves檔案。

然後登入到新的從節點並執行:

$ cd path/to/hadoop

$ bin/hadoop-daemon.sh start datanode

$ bin/hadoop-daemon.sh start tasktracker

然後發出hadoop dfsadmin -refreshNodes和hadoop mradmin -refreshNodes命令,以便NameNode和JobTracker知道已添加了附加節點。

Hadoop job –kill jobid

不會。在安全模式下,塊的複製是被禁止的。NameNode等待所有或大部分DataNode報告其塊。

檔案一旦建立就會出現在名稱空間中。如果一個寫入器正在向檔案寫入資料,而另一個客戶端重新命名檔案本身或其任何路徑元件,那麼原始寫入器將在寫入當前塊完成時或關閉檔案時收到IOException。

Hadoop提供“下線”功能來停用一組現有的DataNode。要停用的節點應包含在*排除檔案*中,排除檔案的名稱應指定為配置引數**dfs.hosts.exclude**。

可以透過隨時編輯配置或排除檔案並重復**-refreshNodes**命令來終止下線過程。

可以。例如,要列出所有以字母a開頭的檔案,可以使用帶*萬用字元的ls命令:

hdfs dfs –ls a*

HDFS只支援獨佔寫入。

當第一個客戶端聯絡NameNode開啟檔案進行寫入時,NameNode會授予該客戶端建立此檔案的租約。當第二個客戶端嘗試開啟同一個檔案進行寫入時,NameNode將看到該檔案的租約已授予另一個客戶端,並將拒絕第二個客戶端的開啟請求。

NameNode沒有任何可用的DataNode。

Combiner是一個“迷你reduce”過程,它只對Mapper生成的資料進行操作。Combiner將接收作為輸入由給定節點上的Mapper例項發出的所有資料。然後將Combiner的輸出傳送到Reducer,而不是Mapper的輸出。

Hadoop將生成5個分片,如下所示:

  • - 64K檔案1個分片
  • - 65MB檔案2個分片
  • - 127MB檔案2個分片

它將在另一個TaskTracker上重新啟動該任務,並且只有當任務失敗超過四次(預設設定,可以更改)時,它才會終止該作業。

HDFS不擅長處理大量的小檔案。因為HDFS中的每個檔案、目錄和塊都在NameNode的記憶體中表示為一個物件,每個物件大約佔用150位元組,所以1000萬個檔案(每個檔案使用一個塊)將佔用大約3GB的記憶體。當我們處理10億個檔案時,NameNode的記憶體需求將無法滿足。

如果一個節點執行速度似乎很慢,主節點可以冗餘地執行同一任務的另一個例項,並採用第一個輸出。這個過程稱為推測執行。

可以,透過Apache Kafka、Apache Flume和Apache Spark等技術,可以進行大規模流處理。

隨著越來越多的檔案被新增,NameNode會建立大型的編輯日誌,這可能會大大延遲NameNode的啟動,因為NameNode會重新應用所有編輯。檢查點是一個將fsimage和編輯日誌壓縮成新的fsimage的過程。這樣,NameNode就可以直接從fsimage載入最終的記憶體狀態,而不是重放潛在的無限編輯日誌。這是一個更高效的操作,可以減少NameNode的啟動時間。

下一步是什麼?

接下來,您可以回顧一下您之前完成的與該主題相關的作業,並確保您可以自信地談論它們。如果您是應屆畢業生,面試官並不期望您能回答非常複雜的問題,而是要確保您的基礎概念非常紮實。

其次,如果您無法回答一些問題,這並不重要,重要的是,無論您回答了什麼,都必須充滿自信地回答。所以在面試中要有自信。我們在tutorialspoint祝您面試順利,並祝您未來的事業一切順利。乾杯 :-)

hadoop_questions_answers.htm
廣告
© . All rights reserved.