hadoop的集羣配置

Hadoop集羣安裝

  首先咱們統一一下定義,在這裏所提到的Hadoop是指Hadoop Common,主要提供DFS(分佈式文件存儲)與Map/Reduce的核心功能。
  Hadoop在windows下還未通過很好的測試,因此筆者推薦你們在linux(cent os 5.X)下安裝使用。
  準備安裝Hadoop集羣以前咱們得先檢驗系統是否安裝了以下的必備軟件:ssh、rsync和Jdk1.6(由於Hadoop須要使用到Jdk中的編譯工具,因此通常不直接使用Jre)。可使用yum install rsync來安裝rsync。通常來講ssh是默認安裝到系統中的。Jdk1.6的安裝方法這裏就很少介紹了。
  確保以上準備工做完了以後咱們就開始安裝Hadoop軟件,假設咱們用三臺機器作Hadoop集羣,分別是:192.168.1.1十一、192.168.1.112和192.168.1.113(下文簡稱111,112和113),且都使用root用戶。
  下面是在linux平臺下安裝Hadoop的過程:node

[root@192.168.1.111] #這裏將Hadoop安裝到/opt/hadoop
[root@192.168.1.111] mkdir /opt/hadoop
[root@192.168.1.111] cd /opt/hadoop
[root@192.168.1.111] #更改所屬關係和權限(對於其它用戶而言)
[root@192.168.1.111] chown root ./; chmod 755 ./
[root@192.168.1.111] # 下載項目包(去官網(http://hadoop.apache.org/)下載Hadoop項目)
[root@192.168.1.111] wget http://www.apache.org/dist/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz
[root@192.168.1.111] # 解壓
[root@192.168.1.111] tar xzvf hadoop-0.20.2.tar.gz
[root@192.168.1.111] # 進入目錄
[root@192.168.1.111] cd hadoop-0.20.2
[root@192.168.1.111] # 由於Hadoop子項目的須要,通常須要設置環境變量以下:
[root@192.168.1.111] export HADOOP_HOME=`pwd` 
[root@192.168.1.111] # 也能夠將環境變量設置到/etc/profile中

        在全部服務器的同一路徑下都進行這幾步,就完成了集羣Hadoop軟件的安裝,是否是很簡單?沒錯安裝是很簡單的,下面就是比較困難的工做了。linux

集羣配置

  根據Hadoop文檔的描述「The Hadoop daemons are NameNode/DataNode and JobTracker/TaskTracker.」能夠看出Hadoop核心守護程序就是由NameNode/DataNode 和JobTracker/TaskTracker這幾個角色構成。
  Hadoop的DFS須要確立NameNode與DataNode角色,通常NameNode會部署到一臺單獨的服務器上而不與DataNode共同同一機器。另外Map/Reduce服務也須要確立JobTracker和TaskTracker的角色,通常JobTracker與NameNode共用一臺機器做爲master,而TaskTracker與DataNode同屬於slave。至於NameNode/DataNode和JobTracker/TaskTracker的概念這裏就很少講了,須要瞭解的能夠參看相關文檔。
  在這裏咱們使用111做爲NameNode與JobTracker,其它兩臺機器做爲DataNode和TaskTracker,具體的配置以下:sql

環境的配置

  在$HADOOP_HOME/conf/hadoop-env.sh中定義了Hadoop啓動時須要的環境變量設置,其中咱們至少須要配置JAVA_HOME(Jdk的路徑)變量;另外咱們通常還須要更改HADOOP_LOG_DIR(Hadoop的日誌路徑)這個變量,默認的設置是「export HADOOP_LOG_DIR=${HADOOP_HOME}/logs」,通常須要將其配置到一個磁盤空間比較大的目錄下。shell

Hadoop核心程序配置

  Hadoop 包括一組默認配置文件($HADOOP_HOME/src目錄下的core/core-default.xml, hdfs/hdfs-default.xml 和mapred/mapred-default.xml),你們能夠先好好看看並理解默認配置文件中的那些屬性。雖然默認配置文件能讓Hadoop核心程序順利啓動,但對於開發人員來講通常須要本身的來設置一些常規配置以知足開發和業務的需求,因此咱們須要對默認配置文件的值進行覆蓋,具體方法以下。
  $HADOOP_HOME/conf/core-site.xml是Hadoop的核心配置文件,對應並覆蓋core-default.xml中的配置項。咱們通常在這個文件中增長以下配置:apache

Core-site.xml代碼:windows

<configuration>
        <property> 
                <!-- 用於dfs命令模塊中指定默認的文件系統協議 -->
                <name>fs.default.name</name> 
                <value>hdfs://192.168.1.111:9000</value> 
        </property> 
</configuration>

        $HADOOP_HOME/conf/hdfs-site.xml是HDFS的配置文件,對應並覆蓋hdfs-default.xml中的配置項。咱們通常在這個文件中增長以下配置:服務器

hdfs-site.xml代碼:ssh

<configuration>
        <property>
                <!-- DFS中存儲文件命名空間信息的目錄 -->
                <name>dfs.name.dir</name>
                <value>/opt/hadoop/data/dfs.name.dir</value>
        </property>
        <property>
                <!-- DFS中存儲文件數據的目錄 -->
                <name>dfs.data.dir</name> 
                <value>/opt/hadoop/data/dfs.data.dir</value>
        </property>
        <property>
                <!-- 是否對DFS中的文件進行權限控制(測試中通常用false)-->
                <name>dfs.permissions</name>
                <value>false</value>
       </property>
</configuration>

$HADOOP_HOME/conf/mapred-site.xml是Map/Reduce的配置文件,對應並覆蓋mapred-default.xml中的配置項。咱們通常在這個文件中增長以下配置:分佈式

Mapred-site.xml代碼:工具

<configuration>
        <property>
                <!-- 用來做JobTracker的節點的(通常與NameNode保持一致) -->
                <name>mapred.job.tracker</name>
                <value>192.168.1.111:9001</value>
        </property>
        <property>
                <!-- map/reduce的系統目錄(使用的HDFS的路徑) -->
                <name>mapred.system.dir</name>
                <value>/system/mapred.system.dir</value>
        </property>
        <property>
                <!-- map/reduce的臨時目錄(可以使用「,」隔開,設置多重路徑來分攤磁盤IO) -->
                <name>mapred.local.dir</name>
                <value>/opt/hadoop/data/mapred.local.dir</value>
        </property>
</configuration>

主從配置

  在$HADOOP_HOME/conf目錄中存在masters和slaves這兩個文件,用來作Hadoop的主從配置。上面已經提到了Hadoop主要由NameNode/DataNode 和JobTracker/TaskTracker構成,在主從配置裏咱們通常將NameNode和JobTracker列爲主機,其它的共爲從機,因而對於此處的配置應該是:
        

masters代碼:

192.168.1.111

slaves代碼:

192.168.1.112
192.168.1.113

        若是你對以上介紹的配置項作了正確的配置,那麼你的Hadoop集羣只差啓動和初體念了,固然,在$HADOOP_HOME/conf目錄下還包括其它的一些配置文件,但那些都不是必須設置的,若是有興趣你能夠本身去了解了解。
  值得注意的是Hadoop集羣的全部機器的配置應該保持一致,通常咱們在配置完master後,使用scp將配置文件同步到集羣的其它服務器上。

啓動

  通過以上兩個步驟,Hadoop的安裝和配置已經OK了,那麼下面咱們就來啓動Hadoop集羣。啓動前咱們須要作一些準備,由於集羣的啓動是從NameNode開始的,因而DataNode的運行須要NameNode的遠程調用,Hadoop使用ssh命令遠程運行DataNode節點,這就是爲何Hadoop須要ssh的支持。咱們能夠想象一下,若是集羣裏有100臺機器,那麼咱們就須要輸入100遍主機的訪問密碼,但若是配置SSH使用無密碼公鑰認證的方式,就解決了此問題。
  簡單的說,在111上須要生成一個密鑰對,即一個私鑰和一個公鑰。將公鑰拷貝到112和113上,如此一來,當111向112發起ssh鏈接的時候,112上就會生成一個隨機數並用111的公鑰對這個隨機數進行加密,而且發送給111,111收到這個加密的數之後用私鑰進行解密,並將解密後的數返回112,112確認解密的數無誤後就容許111進行鏈接了。這就完成了一次公鑰認證過程。
  公鑰生成的步驟以下:

[root@192.168.1.111] ssh-keygen -t rsa
[root@192.168.1.111] #如下是生成一個爲id_rsa/id_rsa.pub的無密碼的公/私鑰對
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
[root@192.168.1.111] ls -l ~/.ssh
[root@192.168.1.111] #這樣咱們會看到以下所示的結果集:
-rw------- 1 root     root      1675 Jul  5 14:01 id_rsa
-rw-r--r-- 1 root     root       394 Jul  5 14:01 id_rsa.pub

        而後將id_rsa.pub的內容複製到每一個機器(也包括本機)的~/.ssh/authorized_keys文件中。若是authorized_keys不存在,則使用touch ~/.ssh/authorized_keys生成一個;若是該文件已經存在,則追加內容進去就OK了,這裏咱們推薦使用以下命令:

[root@192.168.1.111] cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@192.168.1.111] #由於ssh服務對文件的權限有着很是嚴格的限制(authorized_keys只能擁有指定用戶的寫權限)因而須要進行以下處理
[root@192.168.1.111] chmod 644 ~/.ssh/authorized_keys

        通過以上步驟,咱們的無密碼訪問就配置好了,能夠經過以下命令進行驗證:

[root@192.168.1.111] ssh 192.168.1.112
[root@192.168.1.112] exit
[root@192.168.1.111] ssh 192.168.1.113
[root@192.168.1.113] exit

        通過以上步驟,咱們的無密碼訪問就配置好了,能夠經過以下命令進行驗證:

[root@192.168.1.111] ssh 192.168.1.112
[root@192.168.1.112] exit
[root@192.168.1.111] ssh 192.168.1.113
[root@192.168.1.113] exit

        如此一來,就能夠正常啓動Hadoop集羣了。啓動方式以下:

[root@192.168.1.111] cd $HADOOP_HOME/bin
[root@192.168.1.111] #查看一下目錄下的文件
[root@192.168.1.111] ls -l
-rwxr-xr-x 1 root root 9998 Feb 19 15:55 hadoop
-rwxr-xr-x 1 root root 1966 Feb 19 15:55 hadoop-config.sh
-rwxr-xr-x 1 root root 3690 Feb 19 15:55 hadoop-daemon.sh
-rwxr-xr-x 1 root root 1227 Feb 19 15:55 hadoop-daemons.sh
-rwxr-xr-x 1 root root 2710 Feb 19 15:55 rcc
-rwxr-xr-x 1 root root 2043 Feb 19 15:55 slaves.sh
-rwxr-xr-x 1 root root 1066 Feb 19 15:55 start-all.sh
-rwxr-xr-x 1 root root  965 Feb 19 15:55 start-balancer.sh
-rwxr-xr-x 1 root root 1645 Feb 19 15:55 start-dfs.sh
-rwxr-xr-x 1 root root 1159 Feb 19 15:55 start-mapred.sh
-rwxr-xr-x 1 root root 1019 Feb 19 15:55 stop-all.sh
-rwxr-xr-x 1 root root 1016 Feb 19 15:55 stop-balancer.sh
-rwxr-xr-x 1 root root 1146 Feb 19 15:55 stop-dfs.sh
-rwxr-xr-x 1 root root 1068 Feb 19 15:55 stop-mapred.sh
[root@192.168.1.111] #啓動服務以前,咱們須要作一件事情,很是重要,那就是格式化命名空間
[root@192.168.1.111] ./hadoop namenode -format
[root@192.168.1.111] #啓動dfs和map/reduce服務
[root@192.168.1.111] ./start-all.sh

        咱們用以下命令驗證一下是否啓動成功:

[root@192.168.1.111] $HADOOP_HOME/bin/hadoop dfs -ls

        若是沒有錯誤提示或者出現文件列表,那麼恭喜你,Hadoop成功啓動了,另外,咱們能夠經過訪問http://192.168.1.111:50070來查看hdfs的狀態,訪問http://192.168.1.111:50030來查看map/reduce的狀態。
若是出現錯誤,或Hadoop集羣未啓動,能夠查看$HADOOP_HOME/logs/下的日誌文件。

相關文章
相關標籤/搜索