1. 程式人生 > 其它 >python中的深淺copy

python中的深淺copy

1. Hadoop叢集需要哪些守護程序?

DataNode,NameNode,TaskTracker和JobTracker都是執行Hadoop叢集需要的守護程序.

2. Hadoop常見輸入輸出格式是什麼?

Hadoop中的Map Reduce框架依賴InputFormat提供資料,依賴OutputFormat輸出資料.

TextInputFormat:

作為預設的檔案輸入格式,用於讀取純文字檔案,檔案被分為一系列以LF或者CR結束的行,key是每一行的位置偏移量,是LongWritable型別的,value是每一行的內容,為Text型別。

KeyValueTextInputFormat:

同樣用於讀取檔案,如果行被分隔符(預設是tab)分割為兩部分,第一部分為key,剩下的部分為value;如果沒有分隔符,整行作為 key,value為空。

SequenceFileInputFormat:
用於讀取sequence file。 sequence file是Hadoop用於儲存資料自定義格式的binary檔案。它有兩個子類:SequenceFileAsBinaryInputFormat,將 key和value以BytesWritable的型別讀出;SequenceFileAsTextInputFormat,將key和value以Text型別讀出。
CompositeInputFormat: 用於多個數據源的join。

TextOutputFormat,輸出到純文字檔案,格式為 key + " " + value。
NullOutputFormat,hadoop中的/dev/null,將輸出送進黑洞。
SequenceFileOutputFormat, 輸出到sequence file格式檔案。
MultipleSequenceFileOutputFormat, MultipleTextOutputFormat,根據key將記錄輸出到不同的檔案。
DBInputFormat和DBOutputFormat,從DB讀取,輸出到DB。

3. 新增新datanode後,作為Hadoop管理員需要做什麼?

需要啟動平衡器才能在所有節點之間重新平均分配資料,以便Hadoop叢集自動查詢新的datanode。

要優化叢集效能,應該重新啟動平衡器以在資料節點之間重新分配資料。

4. 如何在生產環境中部署Hadoop的不同元件?

需要在主節點上部署jobtracker和namenode,然後在多個從節點上部署datanode。

namenonde負責管理hdfs中檔案塊的元資料,響應客戶端請求,管理datanode上檔案block的均衡,維持副本數量。如果NameNode關閉,檔案系統將離線。

Datanode:儲存資料塊,負責客戶端對資料塊的io請求。

Jobtracker :管理任務,並將任務分配給 tasktracker。

Tasktracker: 執行JobTracker分配的任務。

5、是否可以在不同叢集之間複製檔案?如果是的話,怎麼能做到這一點?

是的,可以在多個Hadoop叢集之間複製檔案,這可以使用分散式複製來完成。

6. distcp

Distcp是一個Hadoop複製工具,主要用於執行MapReduce作業來複制資料.

7.什麼是投機性執行?

如果一個節點正在執行任務比較慢。那麼就需要在另一個節點上冗餘地執行同一個任務的一個例項。所以首先完成的任務會被接受,另一個可能會被殺死。這個過程被稱為“投機執行”。

8.Hadoop Streaming和Pipes原理和實現

Hadoop提供了Streaming和Pipes程式設計框架和介面。

Streaming的原理:通過標準的輸入/輸出管道讓使用者的程式和Hadoop框架進行資料傳輸以及通訊。

在Streaming中通過封裝使用者的可執行程式作為一個Java類充當相應的Mapper和Reducer類,其特殊之處在於使用者的可執行程式可以作為獨立的程序啟動,Hadoop Streaming框架會將讀取檔案的<key,vlaue>鍵值對通過標準輸入/輸出傳遞給使用者的可執行程式進行處理。

Hadoop系統和使用者編寫的可執行程式並不在一個程序空間,而是相互獨立的。

Pipes原理和實現:

Hadoop Pipes介面則針對C/C++語言通過Socket讓使用者的C/C++程式程序空間和Hadoop的Java 框架進行互動,也就是Pipes框架使用Socket作為媒介實現使用者的C++程序空間和Hadoop Java程序空間進行資料互動。

  • 資料切分。在預設情況下Pipes作業和基於Java介面以及基於Streaming介面的MapReduce作業一樣,都是根據使用者指定的InputFormat類對資料進行切分的,每一個分塊對應一個Mapper任務。
  • Pipes框架會將使用者的使用的Pipes介面編寫的C++ Mapper程式封裝形成一個Mapper任務。這個任務其實是由兩個部分組成:一部分是Hadoop Java程序空間的MapTask;另一部分你是在使用者C++程序空間的Mapper可執行程式類。
  • Java空間的MapTask:通過呼叫MapReduce Java API獲取每一個split的 <key,vlaue>鍵值對,然後通過DownwardProtocol協議將 <key,vlaue>以Socket形式傳送到使用者C++程序的Mapper類。
  • 使用者空間的C++ Mapper:以Pipes提供的Protocol類來接收資料的,然後接收的資料傳輸給使用者的C++ Mapper,終端使用者C++ 程序空間 Mapper通過Pipes框架提供的UpwardProtocol協議,以Scoket的形式傳輸給Hadoop框架。
  • Hadoop Java框架會啟動一個接收資料的執行緒,接收來自使用者C++程序空間UpwardProtocol傳來的Mapper輸出資料,然後寫入本地磁碟,之後直接進入Hadoop框架本身的Shuffle和sort階段到達Reducer端。

9. mapreduce中的combine和partition的作用

combiner是發生在map的最後一個階段,其原理也是一個小型的reducer,主要作用是減少輸出到reduce的資料量,緩解網路傳輸瓶頸,提高reducer的執行效率。
partition的主要作用將map階段產生的所有kv對分配給不同的reducer task處理,可以將reduce階段的處理負載進行分攤。

10. mapreduce怎麼處理資料傾斜問題

本質:讓各分割槽的資料分佈均勻

可以根據業務特點,設定合適的partition策略

如果事先根本不知道資料的分佈規律,利用隨機抽樣器抽樣後生成partition策略再處理

11. YARN和hdfs

HDFS處理分散式儲存,YARN處理分散式計算資源排程。

HDFSH= 本身是完整的分散式系統,叢集間通過 HDFS 的 Hadoop RPC 協議通訊。 YARN 只是跑在這些 HDFS 節點上。

YARN在排程資源時,能夠根據HDFS中資料的位置來採取不同的策略。最大的應用是在mapredcue中,如果yarn把mapper放在資料所在的節點,那麼省去了網路傳輸資料的開銷,直接讀本地資料就可以。

YARN 是獨立存在的,具有通用性,不僅可以排程 MapReduce 作業,還可以作為其他計算框架的資源管理框架,如 Spark、Storm 等可以跑在 YARN 上,它們通過 YARN 來管理計算資源,計算任務有了穩定的平臺支撐,可以保證效能和穩定性,同時,這些計算框架可以方便地讀取 HDFS 上的資料;

12.Hive

Hive的查詢功能是由hdfs + mapreduce結合起來實現的。

Hive與mysql的關係:只是借用mysql來儲存hive中的表的元資料資訊,稱為metastore

13.三個datanode中當有一個datanode出現錯誤時會怎樣?

Namenode會通過心跳機制感知到datanode下線

會將這個datanode上的block塊在叢集中重新複製一份,恢復檔案的副本數量。

14.
hadoop
-file :本地分發,不需先上傳到叢集。(屬於臨時上傳到叢集,任務結束時問從叢集中消失)
-cacheFile :由叢集上的檔案分發到各個節點。(需人為先上傳到叢集)
-cacheArchive :與cacheFile類似,差別在於cacheArchive的方式的檔案為壓縮檔案