實現Hadoop分布式環境部署
目標
配置一個分布式計算集群,讓hadoop 框架能夠正常的運行起來,主要有master 的namenode,jobtracker 和slave 的datanode,tasktracker. 便于之后進行分布式運算。由于作者水平有限,疏漏指出希望批評指正。
環境
兩臺(或多臺)服務器,都是用linux 系統,都安裝了jdk1.5 以上版本,都安裝了ssh ,各個機器名不一致。
實施
1 建立同名用戶
原因
hadoop 運行時需要使用相同的目錄進行存儲,而且master 要方便的管理每臺服務器需要一個同名用戶的ssh 公鑰。
步驟
(1) su root
(2) 輸入root 密碼
(3) adduser username (用戶名)
除了輸入新用戶的密碼,一路回車即可
創建用戶的時候會在/home/ 下自動給用戶創建一個默認目錄,之后存放數據和hadoop 程序就使用該目錄即可
如果發現自己建用戶錯了,使用sudo userdel username 即可刪除剛才建立的用戶
2 配置ssh
原因
因為整個hadoop 在數據交換的時候都使用了ssh 服務,所以首先要配置ssh ,讓各個節點服務器都能互通,為此,需要給每臺服務器生成一個公鑰用于登錄認證。
步驟
在每臺服務器:
(1) 進入用戶默認目錄,如zoomsun 用戶的默認目錄是/home/zoomsun :cd /home/zoomsun
(2) 建立.ssh 文件夾:mkdir .ssh
(3) 進入.ssh 目錄:cd .ssh
(4) 創建當前用戶的ssh 登錄公鑰:ssh-keygen -t rsa ,建議別使用sudo 創建,一路回車即可,這時候會在當前目錄( 如/home/zoomsun/.ssh/) 生出id_rsa.pub ,即rsa 公鑰
(5) 使用scp 命令把生成的公鑰傳給別的服務器,并保存成不同的名字,如我在192.168.1.118 的主機傳給192.168.1.109 ,并且保存為118_id_rsa.pub 的時候命令如下:scp id_rsa.pub zoomsun@192.168.1.109:/home/zoomsun/.ssh/118_id_rsa.pub
(6) 登錄192.168.1.109 ,可以遠程登錄:ssh zoomsun@192.168.1.109 -p22( 是22 端口的時候可以不寫)
(7) 進入當前用戶默認目錄下的.ssh 目錄:cd ~/.ssh
(8) 把公鑰內容添加到登錄認證文件中:cat 118_id_rsa.pub >> authorized_keys
(9) 登錄到192.168.1.118 主機,使用ssh zoomsun@192.168.1.109 進行連接109 主機,這時候會出現輸入yes/no? 的提示,輸入yes 。(配置完成后第一次登錄時許需要給know_hosts 添加東西,所以會有這個確認,以后再登錄就不用輸入yes 了)
(10) 好了,在不同的機器上重復上面的步驟,讓所有的服務器互通吧!
3 準備hadoop
在master 上下載并解壓hadoop ,解壓到當前用戶默認目錄下(/home/zoomsun/)
4 配置hadoop
進入解壓后hadoop 的conf 目錄,對其中幾個文件進行修改(hadoop-env.sh,hadoop-site.xml,masters,slaves )
原因
讓hadoop 能正常的運行起來
步驟
(1) 修改hadoop-env.sh ,打開它,只對JAVA_HOME 進行重新指定就好了
# The java implementation to use. Required.
export JAVA_HOME=/usr/ali/jdk1.5.0_10
類似這句,把JAVA_HOME 按照自己的情況修改,如我的/usr/lib/jvm/jdk1.6.0_10
(2) 修改hadoop-site.xml ,在<configuration></configuration> 之間進行修改:
- <configuration>
- <property>
- <name>fs.default.name</name> <!-- 配置namenode-->
- <value>hdfs://192.168.1.118:54310/</value> <!-- 改為自己的master-->
- </property>
- <property>
- <name>mapred.job.tracker</name> <!-- 配置jobtracker-->
- <value>hdfs://192.168.1.118:54311/</value> <!-- 改為自己的master-->
- </property>
- <property>
- <name>dfs.replication</name> <!-- 配置備份數量-->
- <value>1</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name> <!-- 配置備臨時目錄-->
- <value>/home/zoomsun/hadoop/tmp/</value>
- </property>
- <property>
- <name>mapred.child.java.opts</name>
- <value>-Xmx512m</value>
- </property>
- <property>
- <name>dfs.block.size</name>
- <value>5120000</value>
- </property>
- </configuration>
(3) 配置masters,slaves ,打開并寫入各自對應的ip 信息,如我的:
給Masters 寫:192.168.1.118
給Slaves 寫:192.168.1.109
5 給每臺服務器指定機器名
原因
不知道,反正一定要指定
步驟
(1) 打開hosts :sudo vi /etc/hosts
(2) 添加所有集群中的主機ip 列表,如
192.168.1.118 node0
192.168.1.109 node1
6 為slave 拷貝hadoop
master 的hadoop 拷貝到slave 相同的目錄下,可以使用scp -r 來拷貝文件夾,如:
scp -r /home/zoomsun/hadoop-0.19.0 zoomsun@192.168.1.109 :/home/zoomsun
7 修改環境變量
在master 上修改/etc/profile ,把hadoop 加入環境變量
原因
方便使用
步驟
(1) sudo vi /etc/profile
(2) export HADOOP_HOME=/home/zoomsun/hadoop-0.19.0
export PATH=$PATH:$HADOOP_HOME/bin
(3) 修改完畢后,執行source /etc/profile 使其生效
8 修改slave hadoop 執行的JAVA_HOME
進入各個slave ,修改hadoop-env.sh 中的JAVA_HOME 為本機的JAVA_HOME
9 初始化namenode
在master 上執行hadoop namenode -format ,只執行一次,類似格式化,除非master 的tmp.dir 刪除了再進行格式化
10 啟動hadoop
在master 上執行start-all.sh ,啟動所有集群中的node 和tracker
11 查看日志
可以進入hadoop 的logs 目錄查看日志
12 關閉hadoop
如果需要關閉hadoop :stop-all.sh
13 結束語
如果正常的話,現在hadoop 已經配置成功了,祝賀下!
如果還不成功,分析日志,找原因吧!