以前也配置過hadoop集群,但是很久沒有重新去倒騰配置的細節(jié),導致這次走了不少彎路。為了讓后來的人少走彎路,也給我自己留個提醒,于是就有了這篇文章。
首先配置這個集群主要包括三個部分。三個部分各自都有自己的milestone,可以在配置完之后運行相關的測試來校驗是否配置成功。
1.準備工作
這之前最好是預先有了幾臺相同用戶名(要特別注意,對于用戶名不同的話ssh的時候還需要用戶名的信息。)的VM或者主機。我用的三臺VM用戶名都是hzm 機器的ip分別為192.168.28.130,192.168.28.132,192.168.28.133. 為了省去每次都輸入IP的煩惱,可以先把一臺機器的/etc/hosts文件添加以下幾行:
192.168.28.130 master
192.168.28.132 slave1
192.168.28.133 slave2
添加完之后,把這個文件scp到其余的兩臺機器的/etc/目錄下。這樣從ip到機器名的映射就可以了。這里簡單說下scp命令。scp命令是用來在多臺機器之間傳送文件的,主要是從本地傳文件到遠程機器。用法如下:
scp filename username@ip:~/ 注,ip之后的目錄接著的是遠程的目錄(例:scp test.txt hzm@192.168.28.130:~ 是把text.txt 從本地傳輸到遠程的主目錄) 如果要傳輸目錄到遠程,則用scp -r foldername username@ip:~/ . 這樣準備工作就做好了。
2.配置java
配置java的過程比較簡單。而且每臺機器的配置都一樣,可以只配一臺機器,之后scp到其他的機器即可。先在網上下載對應的java壓縮包,用tar -xzvf jre***.tar 解壓縮到一個目錄(我是解壓到home目錄)。解壓之后還需要配置下/etc/profile 文件,是為了系統(tǒng)能夠找到你所配置的java。
在/etc/profile的文件開始處添加以下三行
export JAVA_HOME=http://www.3lian.com/home/hzm/jre1.7.0_17
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/rt.jar:$JAVA_HOME/lib/tools.jar
配置完之后把/etc/profile 和java的目錄 分別用scp傳輸到其他的主機上。完成之后三臺機器上都可以運行java -version了就表示配置成功了。
3. 配置ssh
這個步驟算是比較麻煩的步驟,沒辦法在一臺機器上完成然后scp到其他的機器。
先每臺機器都運行ssh-keygen ,這樣就會在每臺機器的用戶主目錄生成.ssh 文件夾。ssh配置的目標是不用密碼就可以ping 通其他的機器。達到這一個目的需要有一個包括所有機器的id_rsa.pub的名為authorized_keys的文件,并放置在.ssh 目錄中。
具體的步驟如下:
1.先在每臺機器上分別運行ssh-keygen
2.從第一個機器開始,先 cat .ssh/id_rsa.pub>>authorized_keys 然后scp authorized_keys文件到第二臺機器
3.然后在第二臺機器上接收到了authorized_keys文件后,再用cat .ssh/id_rsa.pub>>authorized_keys 把本機的id_rsa.pub內容追加到authorized_keys文件中。
4. 依次方法做下去,直到authorized_keys包含了所有機器中的id_rsa.pub的內容。用scp 把這個文件復制到所有的機器。放在.ssh 目錄下。
5. 這個時候就應該配置完成了。可以在每臺機器上試試,ssh ip 是不是可以無密碼登陸了。用exit可以退出登陸。如果每臺機器都可以不需要密碼ssh 到其他的機器就表示這一步完成了。
4.配置hadoop
這次我配置的hadoop的版本是hadoop-1.1.2 。配置一點幾的版本基本上都差不多。注意,配置hadoop在一臺機器上配置好整個hadoop目錄的內容,之后只需要將hadoop整個文件夾scp到其他的機器就可以了。
主要配置六個配置文件
1. hadoop-env.sh
將java home的目錄配置好,這步不用多說。
2. core-site.xml
< configuration>
< property>
< name>fs.default.name</name>
< value>hdfs://master:49000</value>
< /property>
< property>
< name>hadoop.tmp.dir</name>
< value>/home/hadooper/hadooptmp</value>
< /property>
< /configuration>
3.hdfs-site.xml
< configuration>
< property>
< name>dfs.replication</name>
< value>2</value>
< /property>
< /configuration>
4.mapred-site.xml
< configuration>
< property>
< name>mapred.job.tracker</name>
< value>localhost:49001</value>
< /property>
< /configuration>
5. masters 文件
我的文件內容為
master
因為此前已經配置好hosts文件,把ip和機器名對應了起來。如果沒有配置hosts文件,此處用對應的ip代替。
6. slaves 文件
我的文件內容為
slave1
slave2
同上