Pig面試問題

banq發表於2021-12-23

你能給我們舉一些例子來說明 Hadoop 在實時環境中是如何使用的嗎?
假設我們有一個由 10 道選擇題組成的考試,20 名學生參加了該考試。每個學生都會嘗試每個問題。對於每個問題和每個答案選項,都會生成一個金鑰。因此,我們為每個學生的所有問題和所有答案選項提供了一組鍵值對。根據學生選擇的選項,您必須分析並找出有多少學生回答正確。
這不是一件容易的事。在這裡 Hadoop 出現了!Hadoop 可以幫助您快速、輕鬆地解決這些問題。您還可以考慮有多少學生錯誤地嘗試了特定問題。
 

BloomMapFile 有什麼用?
BloomMapFile 是一個擴充套件 MapFile 的類。所以它的功能類似於 MapFile。
BloomMapFile 使用動態布隆過濾器為鍵提供快速的成員資格測試。它以 Hbase 表格式使用。

 
什麼是Pig?

PIG是一個用於分析大型資料集的平臺,它由用於表達資料分析程式的高階語言以及用於評估這些程式的基礎設施組成。PIG 的基礎設施層由生成 MapReduce 程式序列的編譯器組成。
 

邏輯計劃和物理計劃有什麼區別?
當Pig Latin Script轉換為 MapReduce 作業時,Pig 會經歷一些步驟。在執行基本的解析和語義檢查後,它會生成一個邏輯計劃。邏輯計劃描述了 Pig 在執行期間必須執行的邏輯運算子。在此之後,Pig 生成了一個物理計劃。物理計劃描述了執行指令碼所需的物理運算子。
 

'ILLUSTRATE' 是否執行 MR 作業?
不,圖解不會拉任何 MR,它會拉內部資料。在控制檯上,說明不會做任何工作。它只顯示每個階段的輸出,而不是最終輸出。
 

關鍵字“DEFINE”是否像函式名?
是的,關鍵字“DEFINE”就像一個函式名。註冊後,您必須定義它。無論您在 Java 程式中編寫了什麼邏輯,您都有一個匯出的 jar 和一個由您註冊的 jar。現在編譯器將檢查匯出的 jar 中的函式。當庫中不存在該函式時,它會檢視您的 jar。
 

關鍵字“FUNCTIONAL”是使用者定義函式 (UDF) 嗎?
不,關鍵字“FUNCTIONAL”不是使用者定義的函式 (UDF)。在使用 UDF 時,我們必須覆蓋一些函式。當然,您只能藉助這些功能來完成您的工作。但是關鍵字“FUNCTIONAL”是內建函式,即預定義函式,因此它不能作為 UDF 工作。
 

為什麼我們在 Pig 程式設計時需要 MapReduce?
Pig 是一個高階平臺,它使許多 Hadoop 資料分析問題更容易執行。我們在這個平臺上使用的語言是:Pig Latin。用 Pig Latin 編寫的程式就像用 SQL 編寫的查詢,我們需要一個執行引擎來執行查詢。所以,當一個程式用 Pig Latin 編寫時,Pig 編譯器會將程式轉換為 MapReduce 作業。在這裡,MapReduce 充當執行引擎。
 

有沒有什麼問題只能用MapReduce解決,PIG不能解決?在哪些場景中 MR 作業會比 PIG 更有用?
讓我們假設一個場景,我們要計算兩個城市的人口。我有不同城市的資料集和感測器列表。我想透過對兩個城市使用一個 mapreduce 來計算人口。讓我們假設一個是班加羅爾,另一個是諾伊達。所以我需要考慮類似於諾伊達的班加羅爾市的key,透過它我可以將這兩個城市的人口資料帶到一個reducer。這背後的想法是我必須如何指導 map reducer 程式——每當你找到名為“班加羅爾”的城市和名為“諾伊達”的城市時,你建立別名,這將是這兩個城市的通用名稱,所以您為兩個城市建立了一個公共金鑰,並將其傳遞給同一個減速器。為此,我們必須編寫自定義分割槽程式。
在 mapreduce 中,當您為城市建立“鍵”時,您必須將“城市”視為鍵。因此,每當框架遇到不同的城市時,它都會將其視為不同的金鑰。因此,我們需要使用自定義的分割槽器。僅在 mapreduce 中有一項規定,您可以在其中編寫自定義分割槽程式並提及 city = bangalore 或 noida,然後傳遞類似的雜湊碼。但是,我們無法在 Pig 中建立自定義分割槽器。由於 Pig 不是框架,我們無法直接執行引擎自定義分割槽器。在這種情況下,MapReduce 比 Pig 更有效。
 

當存在型別不匹配或缺少欄位時,Pig 是否會發出任何警告?
不,如果沒有匹配的欄位或不匹配,Pig 不會顯示任何警告。如果假設 Pig 給出了這樣的警告,那麼很難在日誌檔案中找到。如果發現任何不匹配,則在 Pig 中假定為空值。
 

Pig 中的什麼合作組?
Co-group 透過僅對一個特定資料集進行分組來加入資料集。它按元素的公共欄位對元素進行分組,然後返回一組包含兩個單獨包的記錄。第一個包由第一個資料集和公共資料集的記錄組成,第二個包由第二個資料集和公共資料集的記錄組成。
 

我們可以說 cogroup 是一組多於 1 個資料集嗎?
Cogroup 是一組一個資料集。但是對於多個資料集的情況,cogroup 會將所有資料集分組,並根據公共欄位將它們連線起來。因此,我們可以說 cogroup 是一組多個資料集以及該資料集的連線。
 

FOREACH 是做什麼的?
FOREACH 用於對資料應用轉換並生成新的資料項。名稱本身表明對於資料包的每個元素,將執行相應的操作。
語法: FOREACH bagname GENERATE expression1, expression2, .....
這條語句的意思是GENERATE後面提到的表示式會應用到資料包的當前記錄上。
 

什麼是包?
包是 Pig 中存在的資料模型之一。它是一個無序的元組集合,可能有重複。袋子用於在分組時存放收藏品。bag 的大小是本地磁碟的大小,這意味著 bag 的大小是有限的。當包已滿時,Pig 會將這個包溢位到本地磁碟中,並且只保留包的某些部分在記憶體中。沒有必要將完整的包放入記憶體中。我們用“{}”代表包。

相關文章