1. Hadoop的三種集羣搭建方式
Hadoop支持以下三種模式的Hadoop集羣:
(1) 單機模式
相當於沒有HDFS文件系統,只是支持MapReduce
(2) 僞分佈式模式
相當於只有一個節點的集羣。主從節點都位於同一主機,從MapReduce層面來看,也就是Jobtracker與TaskTracker位於同一節點;從文件系統的角度來看,也就是NameNode與DataNode位於同一節點;
(3) 完全分佈式模式
主從節點分開的完全分佈式模式。
2. 安裝包準備
需要安裝包:
(1) jdk-6u31-linux-x64-rpm.bin (JDK至少要求1.5.x以上的版本)
(2) hadoop-0.20.1.tar.gz ( Hadoop的版本,建議選擇至少此版本以上的Hadoop版本)
一般的機器上已經安裝了Openssh了,因而不需要再安裝SSH相關的包。這三個組件在所有的節點上都要事先安裝好。
這裏使用三臺機器搭建Hadoop環境。Name Node節點的主機名爲namenode,Data Node節點的主機名分別爲datanode1和datanode2.
解釋一下名詞:
NameNode:Hadoop集羣的主節點的俗稱,它是HDFS文件系統的管理者,存儲HDFS文件系統的元數據並管理HDFS文件系統;
DataNode:Hadoop集羣的從節點的俗稱,它是HDFS文件系統存儲的基礎。存儲HDFS文件系統的實際數據;
關於Hadoop的其他名詞的詳細解釋,我會在後續將陸續發出的博文中詳細說明,敬請各位看官留意!
3. 操作系統配置
1. 新建用戶。在 HDFS 文件系統中的每個節點(包括 namenode 節點和 datanode 節點)上,新建 hdfs 用戶,並保證 hdfs 用戶的當前目錄一致。
(1) 必須使用useradd hdfs –m 創建,否則不會再home目錄下創建對應的用戶目錄;
(2) Passwd hdfs命令爲hdfs用戶設置密碼;
Hadoop一般推薦不使用Root用戶搭建集羣,但實際上用root搭建集羣也沒多大關係,我後來使用的Hadoop集羣都直接使用root用戶的。如果使用root用戶權限來搭建Hadoop集羣,那這一步就可以省略掉:
2. HDFS 中的節點配置 在 root 用戶中輸入命令 yast ,使用 yast 工具。 Network Devices — >Network settings — >Hostname/DNS。
(1) namenode 節點。 hostname 修改爲“namenode”,domian name修改爲“hdfs”;
(2) datanode 節點。 hostname 修改爲“datanodeXXX”,domian name 修改爲“ hdfs ”,其中“ XXX ”最好爲該節點的編號。
使用其他方式修改主機名也是可以的,這裏僅是其中一種方法,但是要確保修改的持久有效性,必須是通過配置文件的修改。
3. HDFS 中的每個節點添加通訊對方主機名(可以列出包括自己在內的所有節點)。即在/etc/hosts文件中加入如下內容:
127.0.0.1 localhost
128.5.150.159 datanode1
128.5.150.81 datanode2
128.5.150.57 namenode
4. 安裝JDK
Hadoop 是基於 Java 編寫的,爲了運行 HDFS 文件系統,同時也爲了後續的開發,需要安裝 JDK,而且版本要求1.5.x以上 。
1. 切換到 root 用戶,並將安裝包jdk-6u31-linux-x64-rpm.bin拷貝至 /usr/local/ 目錄, chmod 755 使 root 用戶獲得執行安裝包的權限。
2. 執行./ jdk-6u31-linux-x64-rpm.bin開始安裝,提示輸入Enter時敲回車鍵,安裝結束。
如果使用的安裝包爲rpm,可以直接使用rpm命令安裝,更爲方便。
3. 配置 JAVA 環境在 /etc/profile 文件尾添加三項 :
export JAVA_HOME=/usr/java/jdk1.6.0_31
export CLASSPATH=/use/java/jdk1.6.0_31/lib:/usr/java/jdk1.6.0_31/jre/lib:$CLASSPATH
export PATH=/usr/java/jdk1.6.0_31/bin:/usr/java/jdk1.6.0_31/jre/bin:$PATH
4. 在 root 用戶中, chmod 755 /etc/profile ,使普通用戶獲得對該文件的執行權限。在 hdfs 的登錄會話中,執行“ .
/etc/profile”( “ . ”與“ / ”之間有空格)使修改生效,使用 echo 命令確認這三項設置是否成功。
5. 配置 SSH 服務
注意:以下的操作全部由hdfs用戶進行,非root用戶進行。如果是以root用戶的權限來部署Hadoop,那麼對應的用戶就是root用戶。
在 namenode 節點,使用 ssh 工具生成公鑰 / 私鑰對,並把公鑰分發給 datanode 節點,可以實現 datanode 對來自 namenode 節點網絡通訊請求的認證。
1. 首先,在 namenode 節點生成公鑰 / 私鑰對 :
hdfs@namenode:~> ssh-keygen -t dsa -P ’’
ssh-keygen 代表生成密鑰 ;-t(注意區分大小寫)表示指定生成的密鑰類型 ;
dsa 是 dsa 密鑰認證的意思,即密鑰類型 ;-P 用於提供密語
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hdfs/.ssh/id_rsa): 按回車
Enter passphrase (empty for no passphrase): 輸入 hdfs 登錄密碼
Enter same passphrase again: 再次輸入 hdfs 登錄密碼
Your identification has been saved in /home/hdfs/.ssh/id_rsa.
Your public key has been saved in /home/hdfs/.ssh/id_rsa.pub.
注:其中 id_dsa 存放了產生的私鑰, id_dsa.pub 存放了公鑰。
2. 接着,分發 namenode 節點的公鑰。將 namenode 節點 id_rsa.pub 文件中的內容複製到所有節點的 /home/h/.ssh/authorized_keys 文件中。
· namenode 節點:
o authorized_keys 不存在。執行命令 cp id_rsa.pub authorized_keys 。
o authorized_keys 存在。執行命令 cat id_rsa.pub >> authorized_keys 。
· datanode 節點:
o 在 namenode 節點中,對每一臺 datanode 節點,執行命令 scp id_dsa.pub datanode205:/home/hdfs/.ssh/。
o 在 datanode 節點,仿照 namenode 節點的處理方法,將 namenode 節點的公鑰拷貝到 authorized_keys 文件中。
3. 在每臺機器上chmod 644 authorized_keys。這一步非常關鍵,必須保證authorized_keys只對其所有者有讀寫權限,其他人不允許有寫的權限,否則SSH可能不會工作的。
4. ssh 驗證。 在 namenode 節點執行 ssh datanode1. ,如果能不輸入密碼能登錄到 datanode1 ,則說明安裝成功。
6. 安裝與配置Hadoop
6.1 安裝Hadoop
在 namenode 節點 中,將 hadoop-0.20.1.tar.gz ,解壓到 /home/hdfs/ 目錄下即可。
6.2 namenode 節點配置
在 namenode 節點的 hadoop的conf 目錄下 。
6.2.1 hadoop-env.sh文件配置
在文件中加入:
export JAVA_HOME=“你的Java 安裝地址”,我這裏是/usr/java/jdk1.6.0_31:
export JAVA_HOME=/usr/java/jdk1.6.0_31
6.2.2 core-site.xml 文件配置
在core-site.xml文件中的兩個<configuration>中添加以下兩段:
1.文件系統的名稱。配置 HDFS 文件系統外部訪問地址,即 namenode 節點 IP 以及訪問端口號。
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9100</value>
</property>
2.配置Hadoop數據塊存儲目錄:
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hdfs/hadoopdatastore</value>
<description>A base for other temporary directories.</description>
</property>
6.2.3 hdfs-site.xml 文件配置。
配置上傳文件備份的份數,不能超過 datanode 節點個數,默認爲 3 個。 <name>dfs.replication</name>
<value>3</value>
<description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.</description>
</property>
6.2.4 mapred-site.xml文件配置
在文件中配置如下內容:
<property>
<name>mapred.job.tracker</name>
<value>namenode:9200</value>
</property>
6.2.5 masters 文件配置
修改文件中的localhost爲namenode節點的主機名“ namenode ”。
6.2.6 slaves 文件配置
修改文件中的localhost爲datanode節點的主機名“datanode1”“datanode2”,每行一個主機名。
6.3 Datanode節點配置
在 namenode 節點,依次執行命令 scp -r hadoop-0.21.0/ datanodeX:/home/hdfs/ ,將 namenode 節點的安裝文件複製到每一個datanode 節點。
7. 啓動與停止 Hadoop
1.先格式化namenode節點,在Namenode節點執行如下命令:
bin/Hadoop NameNode -format
2.然後簡單啓動所有守護:
bin/start-all.sh
3.查看集羣狀態,驗證安裝部署Hadoop成功
Hadoop dfsadmin -report
或者通過 以下的方式產看集羣狀態。在集羣中的任意節點上打開瀏覽器,分別輸入網址:
http://namenode:50030 (MapReduce的Web頁面)
http://namenode:50070 (HDFS的Web頁面)
如果都能查看,說明 Hadoop 已經安裝成功。
4. 停止Hadoop:
bin/stop-all.sh