Ubuntu 12.04下Hadoop 2.2.0 集群搭建(原創)


現在大家可以跟我一起來實現Ubuntu 12.04Hadoop 2.2.0 集群搭建,在這里我使用了兩台服務器,一台作為master即namenode主機,另一台作為slave即datanode主機,增加更多的slave只需重復slave部分的內容即可。

系統版本:

  • master:Ubuntu 12.04
  • slave:Ubuntu 12.04
  • hadoop:hadoop 2.2.0
  • 安裝ssh服務:sudo apt-get install ssh
  • 有時也要更新一下vim:sudo apt-get install vim  #剛安裝的系統會出現vi 命令上下鍵變成AB的情況

1. 為master和slave機器安裝JDK環境

下載jdk,如果安裝版本“1.7.0_60”,官方下載地址為:java下載

解壓jdk: tar -xvf  jdk-7u60-linux-i586.tar.gz

在/usr/local/下新建java文件夾:mkdir /usr/local/java

將解壓文件移動到創建的java/文件夾下:sudo mv jdk1.7.0_60  /usr/local/java

修改/etc/profile文件:sudo vi /etc/profile

在文件末尾添加jdk路徑:

輸入 source /etc/profile 使java生效

測試java是否完全安裝:java -version   #若出現版本信息則說明安裝成功

2. 修改namenode(master)和子節點(slave)機器名:

sudo vi /etc/hostname   

 

修改后需重啟才生效:sudo reboot

3. 修改namenode(master)節點映射ip

sudo vi /etc/hosts    #添加slave和master的機器名及其對應ip

 

PS:master、slave分別是namenode和datanode機器名,即hostname的名字

4. 為master和slave分別創建hadoop用戶及用戶組,並賦予sudo權限

sudo addgroup hadoop

sudo adduser -ingroup hadoop hadoop   #第一個hadoop是用戶組,第二個hadoop是用戶名

下面為hadoop用戶賦予sudo權限:修改 /etc/sudoers 文件

sudo vi /etc/sudoers

添加hadoop  ALL=(ALL:ALL) ALL

PS:該操作需要在所有masterslave主機上進行

5. 建立ssh無密碼登陸環境

以hadoop身份登錄系統:su hadoop

生成密鑰,建立namenode與datanode的信任關系,ssh生成密鑰有rsa和dsa方式,默認采用rsa方式:

在/home/hadoop目錄下輸入: ssh-keygen -t rsa -P ""

確認信息按回車,會在/home/hadoop/.ssh下生成文件:

將id_rsa.pub追加到authorized_keys授權文件中: cat id_rsa.pub >> authorized_keys

在各個子節點也生成密鑰:ssh-keygen -t rsa -P ""

master上的authorized_keys發送到各個子節點:

scp ~/.ssh/authorized_keys  hadoop@slave1:~/.ssh/

下面測試ssh互信: ssh hadoop@slave1

如果不需要輸入密碼就可以登錄成功則表示ssh互信成功建立

6. 安裝hadoop(只需配置master主機,slave主機可以直接復制)

下載hadoop到/usr/local下載地址

解壓hadoop-2.2.0.tar.gz:sudo tar -zxf hadoop-2.2.0.tar.gz 

將解壓出來的文件夾重命名為hadoop: sudo mv hadoop-2.2.0 hadoop

將hadoop文件夾的屬主用戶設為hadoop:sudo chown -R hadoop:hadoop hadoop

6.1 配置etc/hadoop/hadoop-env.sh文件

sudo vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh

找到“export JAVA_HOME=”部分,修改為本機jdk路徑

 6.2 配置etc/hadoop/core-site.xml文件

sudo vi /usr/local/hadoop/etc/hadoop/core-site.xml

<configuration></configuration>中間添加如下內容:

PSmaster為namenode主機名,即/etc/hosts文件里的名字

6.3 配置etc/hadoop/mapred-site.xml文件,若路徑下沒有此文件,則將mapred-site.xml.template重命名

sudo vi /usr/local/hadoop/etc/hadoop/mapred-site.xml

<configuration></configuration>中間添加如下內容:

PSmaster為namenode主機名,即/etc/hosts文件里的名字

6.4 配置hdfs-site.xml文件,若路徑下沒有此文件,則將hdfs-site.xml.template重命名

sudo vi hdfs-site.xml

<configuration></configuration>中間添加如下內容:

PS:若有多個slave節點,則將<value>間的內容可改為:

  • <value>/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2,...</value>
  • <value>/usr/local/hadoop/data1,/usr/local/hadoop/data2,...</value>
  • <value>1</value>中間的數字表示slave節點數

6.5 向slaves文件中添加slave主機名,一行一個

7.向slave節點分發配置文件

將配置文件發送到所有slave子節點上,先將文件復制到子節點/home/hadoop/下面(子節點也用hadoop用戶登錄:su hadoop

sudo scp /etc/hosts hadoop@slave1:/home/hadoop

scp -r /usr/local/hadoop hadoop@slave1:/home/hadoop

PSslave1slave子節點名,若有多個slave節點,應全部分發

在datanode機器上(slave節點)將文件移動到與master相同的路徑下

sudo mv /home/hadoop/hosts /etc/hosts  (在子節點上執行)

sudo mv /home/local/hadoop /usr/local/  (在子節點上執行)

PS:若提示mv文件夾,則加上-r 參數

加入所屬用戶: sudo chown -R hadoop:hadoop hadoop    (在子節點上執行)

PS:子節點datanode機器要把復制過來的hadoop里面的data1,data2和logs刪除掉!

配置完成

PS:可以將hadoop命令路徑寫入/etc/profile文件,這樣我們就可以自如使用hadoop、hdfs命令了,否則在使用命令時都要加入/bin/hadoop這樣的路徑:

sudo vi /etc/profile

輸入:source /etc/profile

8. 運行wordcount示例

首先進入/usr/local/hadoop/目錄,重啟hadoop

cd /usr/local/hadoop/sbin

./stop-all.sh

cd /usr/local/hadoop/bin

./hdfs namenode -format    # 格式化集群

cd /usr/local/hadoop/sbin

./start-all.sh 

可以在namenode上查看連接情況

hdfs dfsadmin -report      #下面是我的機器的結果

假設有測試文件test1.txt和test2.txt,首先創建目錄/input

hadoop dfs -mkdir /input

將測試文件上傳至hadoop:

hadoop dfs -put test1.txt /input/

hadoop dfs -put test2.txt /input/

子節點離開安全模式,否則可能會導致無法讀取input的文件:

hdfs dfsadmin –safemode leave

運行wordcount程序:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /input/ /output

查看結果

hadoop dfs -cat /output/part-r-00000

PS:再次運行時需要刪除output文件夾 :hadoop dfs -rmr /output


本文為原創博客,若轉載請注明出處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM