Hadoop筆記HDFS(2)

wangq17發表於2016-10-18

高階Hadoop MapReduce管理

1 除錯部署好的Hadoop的配置
2 執行基準測試檢驗Hadoop的安裝
3 重新利用JVM提升效能
4 容錯性
5 除錯指令碼-分析失敗任務原因
6 設定失敗比例以及忽略無效的記錄
7 共享型使用者Hadoop叢集
8 Hadoop的安全性
9 使用Hadoop工具interface
內容目錄

一調整引數

1、首先需要關掉正在執行的Hadoop叢集(stop-dfs.sh以及stop-yarn.sh)

存放Hadoop引數的主要是下面4個檔案:

core-site.xml:存放對整個叢集的公共配置

hdfs-site.xml:存放對HDFS的配置

mapred-site.xml:存放對MapReduce的配置

yarn-site.xml:yarn的配置

上面的檔案都是XML格式:name-value的內容格式。<configuration>是最頂層的tag,<property>定義每個屬性

例如:<configuration>
<property>
<name>mapred.reduce.parallel.copies</name>
<value>2</value>
</property>
...
</configuration>

下面介紹修改存放hadoop日誌的路徑以及配置每個task的map和reduce個數的方法

1.  建立一個存放日誌的檔案,例如/home/hadoop_logs .
2. 在hadoop-env.sh中HADOOP_LOG_DIR這一行取消註釋,並且賦值為新的路徑。
3. 在mapred-site.xml中新增下面兩個屬性
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>2 </value>
</property>
<property>

<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>2 </value>
</property>
4. 重啟HDFS(start-dfs.sh)和MapReduce(start-yarn.sh)
5. ps –ef|grep hadoop 檢驗hadoop程式個數

HADOOP_LOG_DIR 重新定義了Hadoop輸出日誌的路徑

mapred.tasktracker.map.tasks.maximum 和 mapred.tasktracker.reduce.tasks.maximum

連個屬性定義了每個TaskTracker 在特定時刻能夠執行的map和reduce任務的最大個數
所有在*-site.xml做的修改,都需要在重新啟動Hadoop後系統重新載入生效。

二執行基準測試

Hadoop自帶多個基準測試程式。我們可以使用他們驗證Hadoop的安裝並測試Hadoop的效能。

2.     Run the randomwriter Hadoop job using the following command:
>bin/hadoop jar hadoop-examples-1.0.0.jarrandomwriter
-Dtest.randomwrite.bytes_per_map=100
-Dtest.randomwriter.maps_per_host=10 /data/unsorted-data
Here the two parameters, test.randomwrite.bytes_per_map and test.
randomwriter.maps_per_host 這兩個引數指定由map產生的資料大小和map的數量
3.  執行排序程式:
>bin/hadoop jar hadoop-examples-1.0.0.jar sort /data/unsorted-data
/data/sorted-data
4.    檢驗前面執行的最終結果
>bin/hadoop jar hadoop-test-1.0.0.jar testmapredsort -sortInput /
data/unsorted-data -sortOutput /data/sorted-data

其它的基準測試

Hadoop includes several other benchmarks.
TestDFSIO: 測試HDFS的IO效能
 nnbench:檢驗NameNode的硬體
 mrbench: 執行多個小的job
 TeraSort: 對1T的資料進行排序

三 對JVM重複使用提升效能

預設情況下,Hadoop會為每個map或reduce任務啟動一個JVM,然而對多個task執行相同的jvm,

有時會顯著的加快執行速度。

1.     執行WordCount的例子,並傳遞如下引數
>bin/hadoop jar hadoop-examples-1.0.0.jar wordcount –D mapred.job.
reuse.jvm.num.tasks=-1 /data/input1 /data/output1
2.  這時 (執行 ps –ef|grep hadoop)Hadoop會為每個task使用同樣的JVM
However, passing arguments through the –D option only works if the job implements
the org.apache.hadoop.util.Tools interface. Otherwise, you should set the
option through the JobConf.setNumTasksToExecutePerJvm(-1) method.

我們可以在mapred-site.xml中設定屬性mapred.job.reuse.jvm.num.tasks ,
這樣就可以控制在hadopp中執行的JVM數,當設定為0或-1的時候Hadoop為每個task執行同樣的JVM

四、容錯性和投機性執行

選擇Hadoop的主要優勢是系統對容錯性的支援。當執行一個job,特別是很大的job的時候,部分job

可能會由於各種原因失敗(網路、硬碟、節點故障等等)。

在hadoop啟動後JobTracker會監控TaskTrackers的執行情況,當TaskTrackers沒有相應的時候,

hadoop會重新將task提交給其它的TaskTracker(Hadoop V2中ResourceNode負責資源的分配,而DataNode負責監控

自己節點的job執行情況)

由於叢集中每個節點的效能不一樣可能出現其它節點完成job,但是還有其它node沒有完成job,這個時候hadoop會啟動一個

空閒節點執行同樣的job,然後tasktracker會使用最先執行完的節點的結果,並且結束掉另外一個還沒執行完的節點。

bin/hadoop jar hadoop-examples-1.0.0.jar wordcount–Dmapred.map.tasks.
speculative.execution=false –D mapred.reduce.tasks.speculative.
execution=true /data/input1 /data/output1

待續...

相關文章