在搭建hadoop開發環境的時,配置的參數非常多,要怎么設定才能達到最好的效能是一件令人頭痛的事,通過本文的分析使讀者能對hadoop的參數配置有一個詳細的了解,初步學會如何進行hadoop參數配置。
一、配置文件介紹
在hadoop集群中,需要配置的文件主要包括四個,分別是core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml,這四個文件分別是對不同組件的配置參數,主要內容如下表所示:
序號 |
配置文件名 |
配置對象 |
主要內容 |
1 |
core-site.xml |
集群全局參數 |
用於定義系統級別的參數,如HDFS URL、Hadoop的臨時目錄等 |
2 |
hdfs-site.xml |
HDFS參數 |
如名稱節點和數據節點的存放位置、文件副本的個數、文件讀取權限等 |
3 |
mapred-site.xml |
Mapreduce參數 |
包括JobHistory Server和應用程序參數兩部分,如reduce任務的默認個數、任務所能夠使用內存的默認上下限等 |
4 |
yarn-site.xml |
集群資源管理系統參數 |
配置 ResourceManager,NodeManager 的通信端口,web監控端口等 |
二、hadoop參數格式
Hadoop沒有使用java語言的管理配置文件,也沒有使用Apache管理配置文件,而是使用了一套獨有的配置文件管理系統,並提供自己的API。以XML文檔格式進行配置,使用相應的配置文件類讀取,並配置集群的運行。
<?xml version="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cloud01:9000</value>
<description>定義默認的文件系統主機和端口</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<final>4096</final>
<description>流文件的緩沖區為4K</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hduser/tmp</value>
<description>Abase forother temporary directories.</description>
</property>
</configuration>
在Hadoop配置文件的根元素configuration,一般只包含子元素property。每一個property元素就是一個配置項,配置文件不支持分層或分級。
每個配置項一般包括配置屬性 名稱 name、值value和一個關於配置項的描述description。元素final和Java中的關鍵字final類似,意味着這個配置項是“固定不變的”。final一般不出現,但在合並資源的時候,可以防止配置項的值被覆蓋。
在configuration中每個屬性都是string類型的,值類型可能是以下多種類型包括java中的基本類型,如boolean、int、long、float也可以是其他類型,如String、File、數組等。以上面的配置文件為例,定義了三個集群的參數,分別是集群主機和端口、流文件的緩沖區大小,臨時文件存放位置,只有流文件此配置項是int型,而另兩個配置項是字符串型。
三、搭建集群配置時重要參數
本節討論在給定的配置文件中指定重要的參數,在四個配置文件中,最重要的參數及其解釋如下:
1. core-site.xml
序號 |
參數名 |
默認值 |
參數解釋 |
1 |
fs.defaultFS |
file:/// |
文件系統主機和端口 |
2 |
io.file.buffer.size |
4096 |
流文件的緩沖區大小 |
3 |
hadoop.tmp.dir |
/tmp/hadoop-${user.name} |
臨時文件夾 |
2. hdfs-site.xml
序號 |
參數名 |
默認值 |
參數解釋 |
1 |
dfs.namenode.secondary.http-address |
0.0.0.0:50090 |
定義HDFS對應的HTTP服務器地址和端口 |
2 |
dfs.namenode.name.dir |
file://${hadoop.tmp.dir}/dfs/name |
定義DFS的名稱節點在本地文件系統的位置 |
3 |
dfs.datanode.data.dir |
file://${hadoop.tmp.dir}/dfs/data |
定義DFS數據節點存儲數據塊時存儲在本地文件系統的位置 |
4 |
dfs.replication |
3 |
缺省的塊復制數量 |
5 |
dfs.webhdfs.enabled |
true |
是否通過http協議讀取hdfs文件,如果選是,則集群安全性較差 |
3. mapred-site.xml
序號 |
參數名 |
默認值 |
參數解釋 |
1 |
mapreduce.framework.name |
local |
取值local、classic或yarn其中之一,如果不是yarn,則不會使用YARN集群來實現資源的分配 |
2 |
mapreduce.jobhistory.address |
0.0.0.0:10020 |
定義歷史服務器的地址和端口,通過歷史服務器查看已經運行完的Mapreduce作業記錄 |
3 |
mapreduce.jobhistory.webapp.address |
0.0.0.0:19888 |
定義歷史服務器web應用訪問的地址和端口 |
4. yarn-site.xml
序號 |
參數名 |
默認值 |
參數解釋 |
1 |
yarn.resourcemanager.address |
0.0.0.0:8032 |
ResourceManager 提供給客戶端訪問的地址。客戶端通過該地址向RM提交應用程序,殺死應用程序等 |
2 |
yarn.resourcemanager.scheduler.address |
0.0.0.0:8030 |
ResourceManager提供給ApplicationMaster的訪問地址。ApplicationMaster通過該地址向RM申請資源、釋放資源等 |
3 |
yarn.resourcemanager.resource-tracker.address |
0.0.0.0:8031 |
ResourceManager 提供給NodeManager的地址。NodeManager通過該地址向RM匯報心跳,領取任務等 |
4 |
yarn.resourcemanager.admin.address |
0.0.0.0:8033 |
ResourceManager 提供給管理員的訪問地址。管理員通過該地址向RM發送管理命令等。 |
5 |
yarn.resourcemanager.webapp.address |
0.0.0.0:8088 |
ResourceManager對web 服務提供地址。用戶可通過該地址在瀏覽器中查看集群各類信息 |
6 |
yarn.nodemanager.aux-services |
|
通過該配置項,用戶可以自定義一些服務,例如Map-Reduce的shuffle功能就是采用這種方式實現的,這樣就可以在NodeManager上擴展自己的服務。 |
四、搭建集群配置樣例
樣例中搭建的集群一共有三台機器,其yarn和namenode都在同一台機器上,該機器的機器名稱為cloud01,所用系統為unbuntu 12.10。
配置文件1:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cloud01:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hduser/tmp</value>
</property>
</configuration>
配置文件2:hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cloud01:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hduser/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hduser/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
配置文件3:mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>cloud01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>cloud01:19888</value>
</property>
</configuration>
配置文件4:yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>cloud01:8132</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>cloud01:8130</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value> cloud01:8131</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value> cloud01:8133</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>cloud01:8188</value>
</property>
</configuration>
四、更多的配置參數的信息
上面講過的對hadoop進行的配置,都是一些重要的配置信息,一個好的hadoop 管理員應該熟悉和掌握全部的配置信息,這樣才能更好地解決hadoop集群系統在運行過程中遇到的問題。通過可以通過兩個辦法獲取得全部的配置信息:
方法一.可以通過hadoop官方網址查詢,網址如下:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/core-default.xml
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
通過這些網址,可以了解最新的全部的hadoop 配置信息,而且包括一些過時的定義標識,從而更好地維護您的集群。
方法二:通過集群工具查詢
集群配置好后,可以通過http://192.168.75.101:8188/conf,查看集群參數狀況,其中192.168.75.101為yarn.resourcemanager.webapp.address配置項的地址,8188為該配置項設置的端口。