偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Hadoop大數(shù)據(jù)面試--Hadoop篇

企業(yè)動(dòng)態(tài) Hadoop
本篇大部分內(nèi)容參考網(wǎng)上,其中性能部分參考:http://blog.cloudera.com/blog/20 ... reduce-performance/、http://www.idryman.org/blog/2014 ... ing-best-practices/

[[179381]]

原理篇

1. Hadoop2.X的各個(gè)模塊一句話簡介

1)Hadoop Common:為Hadoop其他模塊提供支持的公共工具包;

2)HDFS:Hadoop分布式文件系統(tǒng);

3)YARN:任務(wù)調(diào)度和集群資源管理框架;

4)MapReduce:用于處理大數(shù)據(jù)集的框架,可擴(kuò)展和并行;

2. HDFS數(shù)據(jù)上傳原理

1) Client端發(fā)送一個(gè)添加文件到HDFS的請求給NameNode;

2) NameNode告訴Client端如何來分發(fā)數(shù)據(jù)塊以及分發(fā)到哪里;

3) Client端把數(shù)據(jù)分為塊(block)然后把這些塊分發(fā)到DataNode中;

4) DataNode在NameNode的指導(dǎo)下復(fù)制這些塊,保持冗余;

可以在講解的時(shí)候,拿只筆和紙畫下:

Tips:

a. NameNode之存儲(chǔ)文件的元數(shù)據(jù),而不存儲(chǔ)具體的數(shù)據(jù);

b. HDFS Federation: 解決HA單點(diǎn)故障問題,支持NameNode水平擴(kuò)展,每個(gè)NameNode對應(yīng)一個(gè)NameSpace;

3. MapReduce概述

1)map和reduce任務(wù)在NodeManager節(jié)點(diǎn)上各自有自己的JVM;

2)所有的Mapper完成后,實(shí)時(shí)的key/value對會(huì)經(jīng)過一個(gè)shuffle和sort的階段,在這個(gè)階段中所有共同的key會(huì)被合并,發(fā)送到相同的Reducer中;

3)Mapper的個(gè)數(shù)根據(jù)輸入的格式確定,Reducer的個(gè)數(shù)根據(jù)job作業(yè)的配置決定;

4)Partitioner分區(qū)器決定key/value對應(yīng)該被送往哪個(gè)Reducer中;

5)Combiner合并器可以合并Mapper的輸出,這樣可以提高性能;

4. map--》shuffle、sort--》reduce

map階段:

1) InputFormat確定輸入數(shù)據(jù)應(yīng)該被分為多少個(gè)分片,并且為每個(gè)分片創(chuàng)建一個(gè)InputSplit實(shí)例;

2) 針對每個(gè)InputSplit實(shí)例MR框架使用一個(gè)map任務(wù)來進(jìn)行處理;在InputSplit中的每個(gè)KV鍵值對被傳送到Mapper的map函數(shù)進(jìn)行處理;

3) map函數(shù)產(chǎn)生新的序列化后的KV鍵值對到一個(gè)沒有排序的內(nèi)存緩沖區(qū)中;

4) 當(dāng)緩沖區(qū)裝滿或者map任務(wù)完成后,在該緩沖區(qū)的KV鍵值對就會(huì)被排序同時(shí)流入到磁盤中,形成spill文件,溢出文件;

5) 當(dāng)有不止一個(gè)溢出文件產(chǎn)生后,這些文件會(huì)全部被排序,并且合并到一個(gè)文件中;

6) 文件中排序后的KV鍵值對等待被Reducer取走;

reduce階段:

主要包括三個(gè)小階段:

1) shuffle:或者稱為fetch階段(獲取階段),在這個(gè)階段所有擁有相同鍵的記錄都被合并而且發(fā)送到同一個(gè)Reducer中;

2) sort: 和shuffle同時(shí)發(fā)生,在記錄被合并和發(fā)送的過程中,記錄會(huì)按照key進(jìn)行排序;

3) reduce:針對每個(gè)鍵會(huì)進(jìn)行reduce函數(shù)調(diào)用;

reduce數(shù)據(jù)流:

1) 當(dāng)Mapper完成map任務(wù)后,Reducer開始獲取記錄,同時(shí)對他們進(jìn)行排序并存入自己的JVM內(nèi)存中的緩沖區(qū);

2) 當(dāng)一個(gè)緩沖區(qū)數(shù)據(jù)裝滿,則會(huì)流入到磁盤;

3) 當(dāng)所有的Mapper完成并且Reducer獲取到所有和他相關(guān)的輸入后,該Reducer的所有記錄會(huì)被合并和排序,包括還在緩沖區(qū)中的;

4) 合并、排序完成后調(diào)用reduce方法;輸出到HDFS或者根據(jù)作業(yè)配置到其他地方;

5. YARN相關(guān)

YARN包括的組件有:ResourceManager、NodeManager、ApplicationMaster,其中ResourceManager可以分為:Scheduler、ApplicationsManager

Hadoop1.X中的JobTracker被分為兩部分:ResourceManager和ApplicationMaster,前者提供集群資源給應(yīng)用,后者為應(yīng)用提供運(yùn)行時(shí)環(huán)境;

YARN應(yīng)用生命周期:

1) 客戶端提交一個(gè)應(yīng)用請求到ResourceManager;

2) ResourceManager中的ApplicationsManager在集群中尋找一個(gè)可用的、負(fù)載較小的NodeManager;

3) 被找到的NodeManager創(chuàng)建一個(gè)ApplicationMaster實(shí)例;

4) ApplicationMaster向ResourceManager發(fā)送一個(gè)資源請求,ResourceManager回復(fù)一個(gè)Container的列表,包括這些Container是在哪些NodeManager上啟動(dòng)的信息;

***pplicationMaster在ResourceManager的指導(dǎo)下在每個(gè)NodeManager上啟動(dòng)一個(gè)Container,Container在ApplicationMaster的控制下執(zhí)行一個(gè)任務(wù);

Tips:

a. 客戶端可以從ApplicationMaster中獲取任務(wù)信息;

b. 一個(gè)作業(yè)一個(gè)ApplicationMaster,一個(gè)Application可以有多個(gè)Container,一個(gè)NodeManager也可以有多個(gè)Container;

性能篇

性能涉及較多內(nèi)容,這里參考前文中給出的鏈接,并按照作業(yè)運(yùn)行、map階段、reduce階段的順序來組織性能相關(guān)的點(diǎn)。

1. 命令行參數(shù):

在自定義集群的參數(shù)時(shí),不修改集群的文件,而在命令行使用參數(shù),這樣可以針對不同的參數(shù)設(shè)置方便,從而不必修改集群中的配置文件,一般有下面兩種方式:

1)hadoop jar ExampleJob-0.0.1.jar ExampleJob -conf my-conf.xml arg0 arg1

使用配置文件的方式,把需要修改的地方設(shè)置在配置文件里面,使用-conf指定配置文件(上面命令行來自:http://www.idryman.org/blog/2014 ... ing-best-practices/);

2)hadoop jar ExampleJob-0.0.1.jar ExampleJob -Dmapred.reduce.tasks=20 arg0

使用-D參數(shù)來這是相應(yīng)的值也是可以的(上面的命令行來自:http://www.idryman.org/blog/2014 ... ing-best-practices/);

2. map階段

1) map的個(gè)數(shù)問題

map的個(gè)數(shù)是不能直接設(shè)置的,如果有很多mapper的執(zhí)行時(shí)間小于1分鐘,那么建議設(shè)置mapred.min.split.size的大小,提高分片的大小,這樣來減小Mapper的個(gè)數(shù),可以減小Mapper初始化的時(shí)間;或者設(shè)置JVM重用(圖片來自:http://www.idryman.org/blog/2014 ... ing-best-practices/)

2) 設(shè)置mapred.child.java.opts參數(shù)

使用Ganglia、Nagios等監(jiān)控工具檢測slave節(jié)點(diǎn)的內(nèi)存使用情況,設(shè)置合適的mapred.child.java.opts 參數(shù),避免交換的發(fā)生;

3)map的輸出使用壓縮

當(dāng)map的輸出較多時(shí),可以考慮使用壓縮,這能提高很大的性能(圖片來自:http://www.idryman.org/blog/2014 ... ing-best-practices/):

4)使用合適的Writable作為key(鍵)和value(值)類型

這一點(diǎn)在mapper和reducer的編程中都可以使用,如果全部數(shù)據(jù)都使用Text的話,那么數(shù)據(jù)的占有空間將會(huì)很大,導(dǎo)致效率低下。如果有必要可以自定義Writable類型。

5)重用已有變量

在mapper或者reducer的編程中重用已經(jīng)定義的變量,可以避免重復(fù)的生成新對象,而導(dǎo)致垃圾回收頻繁的調(diào)用,如下代碼1和2(代碼參考:http://blog.cloudera.com/blog/20 ... reduce-performance/); 

  1. public void map(...) {  
  2.     ...  
  3.     for (String word : words) {  
  4.         output.collect(new Text(word), new IntWritable(1));  
  5.     }  
  6.  
  1. class MyMapper ... {  
  2.     Text wordText = new Text();  
  3.     IntWritable one = new IntWritable(1);  
  4.     public void map(...) {  
  5.         ...  
  6.         for (String word : words) {  
  7.             wordText.set(word);  
  8.             output.collect(word, one);  
  9.         }  
  10.     }  
  11.  

6) 設(shè)置mapreduce.reduce.shuffle.parallelcopies參數(shù)

設(shè)置此參數(shù),可以使 Reducer在一個(gè)Mapper完成后就開始獲取數(shù)據(jù),并行化數(shù)據(jù)獲取;

7) 最小化mapper輸出:

a. 在Mapper端過濾,而不是在Reducer端過濾;

b. 使用更小的數(shù)據(jù)來存儲(chǔ)map輸出的key和value(參考第4)點(diǎn));

c. 設(shè)置Mapper的輸出進(jìn)行壓縮(參考第3)點(diǎn));

3. reduce階段Reducer負(fù)載均衡:

1) Reducer的個(gè)數(shù),根據(jù)實(shí)際集群的數(shù)量來設(shè)置Reducer的個(gè)數(shù),使其負(fù)載均衡。比如集群有100個(gè)節(jié)點(diǎn),那么Reducer的個(gè)數(shù)設(shè)置為101個(gè)則應(yīng)該是不合理的,在***次任務(wù)分配時(shí)分配了100個(gè)作業(yè),這100個(gè)作業(yè)是并行的,但是***一個(gè)作業(yè)并不是并行的。

2)Reducer中部分因?yàn)橄嗤琸ey的數(shù)據(jù)量大,導(dǎo)致個(gè)別Reducer運(yùn)行耗時(shí)相比其他Reducer耗時(shí)長很多。

可以考慮:

a. 實(shí)現(xiàn)一個(gè)更好的hash函數(shù)繼承自Partitioner類;

b. 如果知道有大量相同的key的數(shù)據(jù),可以寫一個(gè)預(yù)處理的作業(yè)把相同的key分到不同的輸出中,然后再使用一個(gè)MR作業(yè)來處理這個(gè)特殊的key的數(shù)據(jù);

4. 設(shè)置輸入輸出如果有多個(gè)連續(xù)的MR作業(yè),可以設(shè)置輸入輸出為序列文件,這樣可以達(dá)到更好的性能。

個(gè)人整理,如有錯(cuò)誤,敬請指教。

分享,成長,快樂

腳踏實(shí)地,專注

【本文為51CTO專欄作者“王森豐”的原創(chuàng)稿件,轉(zhuǎn)載請注明出處】

責(zé)任編輯:龐桂玉 來源: 神算子
相關(guān)推薦

2010-06-04 10:01:26

Hadoop安裝

2016-10-26 08:57:13

HadoopScrapy大數(shù)據(jù)

2021-05-16 07:44:01

Hadoop大數(shù)據(jù)HDFS

2015-04-01 15:09:30

Hadoop大數(shù)據(jù)

2017-01-15 14:18:35

大數(shù)據(jù)HadoopScrapy

2013-04-12 10:56:31

大數(shù)據(jù)

2014-11-11 10:47:19

hadoop數(shù)據(jù)流

2015-09-25 10:44:02

大數(shù)據(jù)Hadoop

2012-05-31 14:54:59

Hadoop大數(shù)據(jù)

2012-06-29 09:19:39

大數(shù)據(jù)

2013-09-23 09:27:43

Hadoop大數(shù)據(jù)

2018-07-11 13:33:43

大數(shù)據(jù)人工智能Hadoop

2013-08-20 09:26:03

大數(shù)據(jù)時(shí)代hadoop

2015-04-24 11:20:15

Hadoop大數(shù)據(jù)架構(gòu)大數(shù)據(jù)

2017-07-03 13:11:39

大數(shù)據(jù)Hadoop模塊介紹

2012-03-12 10:09:50

Hadoop微軟大數(shù)據(jù)

2013-09-23 13:54:05

2022-10-14 15:44:03

大數(shù)據(jù)Hadoop

2013-05-06 10:22:28

大數(shù)據(jù)Hadoop

2013-12-12 10:00:03

大數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)