Hadoop入門進階步步高(三)-配置Hadoop

3、配置Hadoop

1、設置$HADOOP_HOME/conf/hadoop-env.sh

這個文件中設置的是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

 

用於設置slavemaster發送命令的時間停頓,單位爲秒。

這個在大型的集羣之中很是有用,master纔有足夠的時間來處理這些請求。

HADOOP_PID_DIR

/tmp

Hadoop PID文件的存放目錄,這個最好是修改一下,由於/tmp目錄一般來講是任何人均可以訪問的,有可能存在符合連接攻擊的風險。

HADOOP_IDENT_STRING

$USER

用於表明當前的Hadoop實例。

HADOOP_NICENESS

10

Hadoop守護進行的定時優先級,能夠經過「man nice」獲取更多信息

一般來講,咱們只須要關注JAVA_HOMEHADOOP_HEAP_SIZEHADOOP_PID_DIR這幾個,固然其它的也須要注意了,對其所有了解了纔可以更加充分的發揮其能力,面臨問題的時候纔會知道從哪些方面去入手解決。

 

JAVA_HOME

JAVA_HOME是必須設置的,即便咱們當前的系統中設置了JAVA_HOME,它也是不認識的,由於Hadoop即便是在本機上執行,它也是把當前的執行環境當成遠程服務器,設置JAVA_HOME環境變量:

export JAVA_HOME=/usr/local/jdk1.6.0_33

若是使用的是Mac OS X系統,那麼在啓動hdsfNameNodesecondaryNameNode時,會報出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

 

2、配置$HADOOP_HOME/conf/core-site.xml

參數以下(部分):

參數

默認值

說明

fs.default.name

file:///

NameNodeURI,如:

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,將會對全部用戶的jspservlet頁面起做用,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>  

 

3、配置$HADOOP_HOME/conf/mapred-site.xml文件

參數以下(部分):

參數

說明

示例

mapred.job.tracker

配置JobTracker,以HostIP的形式

localhost:9001

mapred.system.dir

MapReduce框架在HDFS存放系統文件的路徑,必須可以被serverclient訪問獲得,默認值:

${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任務的最大數量,默認值是22maps2reduces),這個與你所在硬件環境有很大的關係,可分別設定。

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指的是特定的隊列名稱;任務的ACLsmapred中會有說明。

默認值爲false

false

 

配置示例:

<configuration>  

  <property>  

    <name>mapred.job.tracker</name>  

    <value>localhost:9001</value>  

  </property>  

</configuration>

 

4、配置$HADOOP_HOME/conf/mapred-queen-acks.xml文件

參數以下(部分):

參數

說明

示例

mapred.queue.queue-name.acl-submit-job

這裏配置能夠提交任務到默認隊列(the ‘default’ queue)的用戶名和組名。

注:這裏的queue-name指的是一個特定的隊列名稱。

有兩種指定的方式:

1、同時指定用戶名和組名

值的格式是用戶名和用戶名以逗號分隔,組與組之間用逗號分隔,用戶名和組之間使用空格分隔,如:

user1,user2 group1,group2

二、只指定組名

在組名的前名留一下空格,如:

 group1,group2

三、容許全部的用戶均可以提交任務,此時的值設爲「*」;

四、若是設置爲空格,表示不容許任何用戶提交任務;

 

要使這些配置生效,必須設置Map/Reducemapred.acls.enabled的值爲true

不過無論這裏的ACL的配置是怎麼樣,啓動集羣的用戶以及經過經過mapreduce.cluster.administrators設置的集羣管理員,均可以提交任務到隊列中。

user1,user2 group1,group2

mapred.queue.queue-name.acl-administer-jobs

列出能夠對指定的隊列執行任務管理的用戶名和組名,如查看任務詳情、修改任務優先級或者是殺掉任務。

設置的格式同上面同樣。

注:任務的擁者是能夠對其本身的任務進行優先級的調整或者殺掉該任務的。

 

與上面的配置同樣,要使這些配置生效,必須設置Map/Reducemapred.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>

 

5、配置$HADOOP_HOME/conf/hdfs-site.xml文件

這個文件的內容,可經過將$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>

 

6、格式化namenode

hadoop namenode -format

 

7、啓動Hadoop

./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方式查看NameNodeJobtracker的狀態了:

NameNodehttp://localhost:50070/

 

JobTrackerhttp://localhost:50030/

 

若是隻是測試map/reduce,這裏只須要啓動以下命令:

./bin/start-mapred.sh

8、啓動Hadoop可能會遇到的問題

後面會提到。

相關文章
相關標籤/搜索