這個文件中設置的是Hadoop運行時須要的環境變量,在1.2.1版中共有19個環境變量,以下:java
變量名稱node |
默認值ubuntu |
說明服務器 |
JAVA_HOME框架 |
|
設置JDK的路徑,這個必須設置,不然Hadoop沒法啓動,值如:jsp /usr/local/jdk1.6.0_33tcp |
HADOOP_CLASSPATHoop |
空測試 |
這個用以設置用戶的類路徑,也能夠在執行計算以前設置spa |
HADOOP_HEAPSIZE |
1000m |
設置Hadoop堆的大小,根據本身環境的實際狀況進行設置了。 |
HADOOP_OPTS |
-server |
Hadoop啓動時的JVM參數,默認是以server模式啓動,能夠加入-X或-XX之類的參數 |
HADOOP_NAMENODE_OPTS |
-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS |
該選項的值會附加到HADOOP_OPTS以後,在啓動NameNode時設置的JVM參數。 如想手動設置NameNode的堆、垃圾回收等信息,能夠在這裏設置: export HADOOP_NAMENODE_OPTS="-Xmx2g -XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}" 其它的節點相似設置。 |
HADOOP_SECONDARYNAMENODE_OPTS |
-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS |
該選項的值會附加到HADOOP_OPTS以後,在啓動SecondaryNameNode時設置的JVM參數 |
HADOOP_DATANODE_OPTS |
-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS |
該選項的值會附加到HADOOP_OPTS以後,在啓動DataNode時設置的JVM參數 |
HADOOP_BALANCER_OPTS |
-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS |
該選項的值會附加到HADOOP_OPTS以後,在啓動BalancerNode時設置的JVM參數 |
HADOOP_JOBTRACKER_OPTS |
-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS |
該選項的值會附加到HADOOP_OPTS以後,在啓動JobTracker時設置的JVM參數 |
HADOOP_TASKTRACKER_OPTS |
空 |
該選項的值會附加到HADOOP_OPTS以後,在啓動TaskTracker時設置的JVM參數 |
HADOOP_CLIENT_OPTS |
空 |
該選項增長的參數,將會做用於多個命令,如fs, dfs, fsck, distcp等 |
HADOOP_SSH_OPTS |
空 |
SSH鏈接的選項,值能夠是以下這樣: -o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR |
HADOOP_LOG_DIR |
${HADOOP_HOME}/logs |
日誌文件存放的目錄 |
HADOOP_SLAVES |
$HADOOP_HOME/conf/slaves |
Slaves所在的配置文件,每行配置一個slave |
HADOOP_MASTER |
master:/home/$USER/src/hadoop |
用於設置Hadoop代碼的同步目錄。 |
HADOOP_SLAVE_SLEEP |
0.1
|
用於設置slave往master發送命令的時間停頓,單位爲秒。 這個在大型的集羣之中很是有用,master纔有足夠的時間來處理這些請求。 |
HADOOP_PID_DIR |
/tmp |
Hadoop PID文件的存放目錄,這個最好是修改一下,由於/tmp目錄一般來講是任何人均可以訪問的,有可能存在符合連接攻擊的風險。 |
HADOOP_IDENT_STRING |
$USER |
用於表明當前的Hadoop實例。 |
HADOOP_NICENESS |
10 |
Hadoop守護進行的定時優先級,能夠經過「man nice」獲取更多信息 |
一般來講,咱們只須要關注JAVA_HOME、HADOOP_HEAP_SIZE、HADOOP_PID_DIR這幾個,固然其它的也須要注意了,對其所有了解了纔可以更加充分的發揮其能力,面臨問題的時候纔會知道從哪些方面去入手解決。
JAVA_HOME:
JAVA_HOME是必須設置的,即便咱們當前的系統中設置了JAVA_HOME,它也是不認識的,由於Hadoop即便是在本機上執行,它也是把當前的執行環境當成遠程服務器,設置JAVA_HOME環境變量:
export JAVA_HOME=/usr/local/jdk1.6.0_33 |
若是使用的是Mac OS X系統,那麼在啓動hdsf的NameNode和secondaryNameNode時,會報出Unable to load realm info from SCDynamicStore 的錯誤提示,解決該問題的辦法是,在hadoop-env.sh文件裏面增長一行:
export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk" |
詳見文章:http://gauss-deng.iteye.com/blog/1370295
HADOOP_HEAPSIZE:
還可根據實際狀況設置HADOOP_HEAPSIZE的值,單爲mb,若是不設置默認值是1000,個人內存沒有這麼大而且測試用例不會用到那麼大的堆,因此我也設置了一個這個值。
export HADOOP_HEAPSIZE=20 |
HADOOP_PID_DIR:
Hadoop PID文件的存放目錄,這個最好是修改一下,由於/tmp目錄一般來講是任何人均可以訪問的,有可能存在符合連接攻擊的風險。
export HADOOP_PID_DIR=/home/fenglibin/hadoop_tmp |
參數以下(部分):
參數 |
默認值 |
說明 |
fs.default.name |
file:/// |
NameNode的URI,如: hdfs://locahost:9000/ |
hadoop.tmp.dir |
/tmp/hadoop-${user.name} |
其它臨時目錄的基本目錄, /home/fenglibin/hadoop_tmp |
hadoop.native.lib |
true |
是否使用hadoop的本地庫 |
hadoop.http.filter.initializers |
空 |
設置Filter初使器,這些Filter必須是hadoop.http.filter.initializers的子類,能夠同時設置多個,以逗號分隔。這些設置的Filter,將會對全部用戶的jsp及servlet頁面起做用,Filter的順序與配置的順序相同。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
配置示例:
<configuration> <property> <!-- 用於設置Hadoop的文件系統,由URI指定 --> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> <property> <!-- 配置Hadoop的臨時目錄,默認在/tmp目錄下,可是/tmp上面可能會被系統自動清理掉。--> <name>hadoop.tmp.dir</name> <!-- 目錄若是不存在,須要手動建立 --> <value>/home/fenglibin/hadoop_tmp</value> <description>A base for other temperary directory</description> </property> </configuration> |
參數以下(部分):
參數 |
說明 |
示例 |
mapred.job.tracker |
配置JobTracker,以Host和IP的形式 |
localhost:9001 |
mapred.system.dir |
MapReduce框架在HDFS存放系統文件的路徑,必須可以被server及client訪問獲得,默認值: ${hadoop.tmp.dir}/mapred/system |
${hadoop.tmp.dir}/mapred/system |
mapred.local.dir |
MapReduce框架在本地的臨時目錄,能夠是多個,以逗號做分隔符,多個路徑有助於分散IO的讀寫,默認值: ${hadoop.tmp.dir}/mapred/local |
${hadoop.tmp.dir}/mapred/local |
mapred.tasktracker.{map|reduce}.tasks.maximum |
在同一臺指定的TaskTacker上面同時獨立的執行的MapReduce任務的最大數量,默認值是2(2個maps及2個reduces),這個與你所在硬件環境有很大的關係,可分別設定。 |
2 |
dfs.hosts/dfs.hosts.exclude |
容許/排除的NataNodes,若是有必要,使用這些文件控制容許的DataNodes。 |
|
mapred.hosts/mapred.hosts.exclude |
容許/排除的MapReduces,若是有必要,使用這些文件控制容許的MapReduces。 |
|
mapred.queue.names |
可用於提交Job的隊列,多個以逗號分隔。MapReduce系統中至少存在一個名爲「default」的隊列,默認值就是「default」。 Hadoop中支持的一些任務定時器,如「Capacity Scheduler」,能夠同時支持多個隊列,若是使用了這種定時器,那麼使用的隊列名稱就必須在這裏指定了,一旦指定了這些隊列,用戶在提交任務,經過在任務配置時指定「mapred.job.queue.name」屬性將任務提交到指定的隊列中。 這些屬於這個隊列的屬性信息,須要有一個單獨的配置文件來管理。 |
default |
mapred.acls.enabled |
這是一個布爾值,用於指定受權用於在執行隊列及任務操做時,是否須要校驗隊列及任務的ACLs。若是爲true,在執行提交及管理性的任務時會檢查隊列的ACL,在執行受權查看及修改任務時任務的會檢查任務ACLs。隊列的ACLs經過文件mapred-queue-acls.xml中的mapred.queue.queue-name.acl-name這樣格式的參數進行指定,queue-name指的是特定的隊列名稱;任務的ACLs在mapred中會有說明。 默認值爲false。 |
false |
配置示例:
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration> |
參數以下(部分):
參數 |
說明 |
示例 |
mapred.queue.queue-name.acl-submit-job |
這裏配置能夠提交任務到默認隊列(the ‘default’ queue)的用戶名和組名。 注:這裏的queue-name指的是一個特定的隊列名稱。 有兩種指定的方式: 1、同時指定用戶名和組名 值的格式是用戶名和用戶名以逗號分隔,組與組之間用逗號分隔,用戶名和組之間使用空格分隔,如: user1,user2 group1,group2 二、只指定組名 在組名的前名留一下空格,如: group1,group2 三、容許全部的用戶均可以提交任務,此時的值設爲「*」; 四、若是設置爲空格,表示不容許任何用戶提交任務;
要使這些配置生效,必須設置Map/Reduce的mapred.acls.enabled的值爲true。 不過無論這裏的ACL的配置是怎麼樣,啓動集羣的用戶以及經過經過mapreduce.cluster.administrators設置的集羣管理員,均可以提交任務到隊列中。 |
user1,user2 group1,group2 |
mapred.queue.queue-name.acl-administer-jobs |
列出能夠對指定的隊列執行任務管理的用戶名和組名,如查看任務詳情、修改任務優先級或者是殺掉任務。 設置的格式同上面同樣。 注:任務的擁者是能夠對其本身的任務進行優先級的調整或者殺掉該任務的。
與上面的配置同樣,要使這些配置生效,必須設置Map/Reduce的mapred.acls.enabled的值爲true。 不過無論這裏的ACL的配置是怎麼樣,啓動集羣的用戶以及經過經過mapreduce.cluster.administrators設置的集羣管理員,均可以對該隊列中的任務執行任何操做。 |
user1,user2 group1,group2 |
配置示例:
<configuration> <property> <name>mapred.queue.default.acl-submit-job</name> <value> </value> </property>
<property> <name>mapred.queue.default.acl-administer-jobs</name> <value> </value> </property> </configuration> |
這個文件的內容,可經過將$HADOOP_HOME/src/hdfs/hdfs-default.xml中的文件拷貝過來,而後再修改,若是這個文件中沒有內容,那麼使用的默認值就和$HADOOP_HOME/src/hdfs/hdfs-default.xml中設置的同樣,若是在這裏設置了就會覆蓋系統中相應名稱的默認值,如這裏將內容的複製份數設置爲1,而系統默認的複製份數爲3,以下:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> |
hadoop namenode -format |
./bin/start-all.sh |
若是是出現以下結果,那就說明Hadoop已經成功啓動了:
fenglibin@ubuntu1110 :/usr/local/hadoop-1.2.1$ jps 29339 SecondaryNameNode 29661 Jps 28830 JobTracker 29208 DataNode 28503 NameNode 29514 TaskTracker |
此時咱們能夠經過WEB方式查看NameNode及Jobtracker的狀態了:
NameNode:http://localhost:50070/
JobTracker:http://localhost:50030/
若是隻是測試map/reduce,這裏只須要啓動以下命令:
./bin/start-mapred.sh |
後面會提到。