高階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
待續...