摘自:http://blog.csdn.net/u014039577/article/details/49813531

由於日誌資料量越來越大,資料處理的邏輯越來越複雜,同時還涉及到大量日誌需要批處理,當前的flume-kafka-storm-Hbase-web這一套流程已經不能滿足當前的需求了,所以只能另尋出路,於是想到了Hadoop這個東西。之前的storm是一個基於流式處理的實時分析系統,相比Hadoop的離線批處理各有千秋,兩者相比,我有看到一個比較形象的比喻:Hadoop就像是純淨水,一桶一桶地搬,而Storm是用水管,預先接好,開啟水龍頭,水就源源不斷的出來了。

同樣,Hadoop的批處理也是相當的強大,高效能、高穩定、高吞吐量、分散式、批處理這些特點都是我們所需要的。於是,在目前的形勢下,在之前的實時處理的基礎上,我們想再加一個離線的日誌批處理,於是用到了Hadoop。首先,我們得搭建好Hadoop叢集,由於我也是第一次搭建Hadoop叢集,其中遇到了許多的問題,可以說是一把辛酸淚,後面終於把叢集搭建起來了,可算不負眾望。

下面記錄Hadoop的搭建過程:

2、下載完成後(這個壓縮包比較大,有201M,下載比較慢,耐心等待吧),放到Linux某個目錄下,這裡我用的系統是:CentOS release 6.5 (Final),我放的目錄是:/usr/local/jiang/hadoop-2.7.1.tar.gz,然後執行:tar zxvf hadoop-2.7.1.tar.gz解壓(這些操作都是要在叢集中的主機上進行,也就是hadoop的master上面)

3、配置host檔案

進入/etc/hosts,配置主機名和ip的對映, 這裡是叢集的每個機子都需要配置,這裡我的logsrv02是主機(master),其餘兩臺是從機(slave)

  1. [root@logsrv03 /]# vi /etc/hosts  
  2. 172.17.6.142 logsrv02  
  3. 172.17.6.149 logsrv04  
  4. 172.17.6.148 logsrv03  
. 4、jdk的安裝(這裡我的機子上面已經有了,所以就不需要再安裝了)

我使用的jdk是jdk1.7.0_71,沒有的需要安裝,將jdk下載下來,解壓到某個目錄下,然後到/etc/profile中配置環境變數,在執行Java -version驗證是否安裝成功。

5、配置SSH免密碼登陸

這裡所說的免密碼登入是相對於主機master來說的,master和slave之間需要通訊,配置好後,master和slave進行ssh登陸的時候不需要輸入密碼。

如果系統中沒有ssh的需要安裝,然後執行:

  1. [root@logsrv03 ~]# ssh-keygen -t rsa  
會在根目錄下生成私鑰id_rsa和公鑰id_rsa.pub
  1. [root@logsrv03 /]# cd ~  
  2. [root@logsrv03 ~]# cd .ssh  
  3. [root@logsrv03 .ssh]# ll  
  4. 總用量 20  
  5. -rw-------  1 root root 1185 11月 10 14:41 authorized_keys  
  6. -rw-------  1 root root 1675 11月  15:57 id_rsa  
  7. -rw-r--r--  1 root root  395 11月  15:57 id_rsa.pub  

然後將這裡的公鑰分別拷貝到其餘slave中的.ssh檔案中,然後要把公鑰(id_dsa.pub)追加到授權的key中去:

  1. cat id_rsa.pub >> authorized_keys  

然後修改許可權(每臺機子都需要修改),這點我也沒太弄明白,具體可以參考:http://blog.csdn.net/leexide/article/details/17252369
  1. [root@logsrv04 .ssh]# chmod 600 authorized_keys   
  2. [root@logsrv04 .ssh]# chmod 700 -R .ssh     

將生成的公鑰複製到從機上的.ssh目錄下:

  1. [root@logsrv03 .ssh]# scp -r id_rsa.pub root@logsrv02:~/.ssh/  
  2. [root@logsrv03 .ssh]# scp -r id_rsa.pub root@logsrv04:~/.ssh/  

然後所有機子都需要重啟ssh服務

  1. [root@logsrv03 .ssh]# service sshd restart  
  2. [root@logsrv02 .ssh]# service sshd restart  
  3. [root@logsrv04 .ssh]# service sshd restart  
然後驗證免密碼登陸是否成功,這裡在主機master這裡驗證:
  1. [root@logsrv03 .ssh]# ssh logsrv02  
  2. [root@logsrv03 .ssh]# ssh logsrv04  

如果在登陸slave不需要輸入密碼,則免密碼登陸設定成功。

6、開始安裝Hadoop,配置hadoop環境變數/etc/profile(所有機子都需要配置)

  1. export HADOOP_HOME=/usr/local/jiang/hadoop-2.7.1  
  2. export PATH=$PATH:$HADOOP_HOME/bin  
7、修改配置檔案:
(1)、修改hadoop-2.7.1/etc/hadoop/hadoop-env.sh
  1. [root@logsrv03 /]# cd usr/local/jiang/hadoop-2.7.1  
  2. [root@logsrv03 hadoop-2.7.1]# cd etc/hadoop/  
  3. [root@logsrv03 hadoop]# vi hadoop-env.sh  
  4. export JAVA_HOME=/usr/local/jdk1.7.0_71  
(2)、修改hadoop-2.7.1/etc/hadoop/slaves
  1. [root@logsrv03 hadoop]# vi slaves   
  2. logsrv02  
  3. logsrv04  
(3)、修改hadoop-2.7.1/etc/hadoop/core-site.xml
  1. <configuration>  
  2. <property>  
  3.                 <name>fs.defaultFS</name>  
  4.                 <value>hdfs://logsrv03:8020</value>  
  5.         </property>  
  6.         <property>  
  7.                 <name>io.file.buffer.size</name>  
  8.                 <value>131072</value>  
  9.         </property>  
  10.         <property>  
  11.                 <name>hadoop.tmp.dir</name>  
  12.                 <value>file:/opt/hadoop/tmp</value>  
  13.         </property>  
  14.         <property>  
  15.                 <name>fs.hdfs.impl</name>  
  16.                 <value>org.apache.hadoop.hdfs.DistributedFileSystem</value>  
  17.                 <description>The FileSystem for hdfs: uris.</description>  
  18.         </property>  
  19.         <property>  
  20.                 <name>fs.file.impl</name>  
  21.                 <value>org.apache.hadoop.fs.LocalFileSystem</value>  
  22.                 <description>The FileSystem for hdfs: uris.</description>  
  23.     </property>  
  24. </configuration>  
(4)、修改hadoop-2.7.1/etc/hadoop/hdfs-site.xml
  1. <configuration>  
  2. <property>  
  3.                 <name>dfs.namenode.name.dir</name>  
  4.                 <value>file:/opt/hadoop/dfs/name</value>  
  5.         </property>  
  6.         <property>  
  7.                 <name>dfs.datanode.data.dir</name>  
  8.                 <value>file:/opt/hadoop/dfs/data</value>  
  9.         </property>  
  10.         <property>  
  11.                 <name>dfs.replication</name>      
  12.                 <value>2</value>   
  13.         </property>  
  14. </configuration>  
(5)、修改hadoop-2.7.1/etc/hadoop/yarn-site.xml
  1. <configuration>  
  2. <!-- Site specific YARN configuration properties -->  
  3. <property>  
  4.                 <name>yarn.resourcemanager.address</name>  
  5.                 <value>logsrv03:8032</value>  
  6.         </property>  
  7.         <property>  
  8.                 <name>yarn.resourcemanager.scheduler.address</name>  
  9.                 <value>logsrv03:8030</value>  
  10.         </property>  
  11.         <property>  
  12.                 <name>yarn.resourcemanager.resource-tracker.address</name>  
  13.                 <value>logsrv03:8031</value>  
  14.         </property>  
  15.         <property>  
  16.                 <name>yarn.resourcemanager.admin.address</name>  
  17.                 <value>logsrv03:8033</value>  
  18.         </property>  
  19.         <property>  
  20.                 <name>yarn.resourcemanager.webapp.address</name>  
  21.                 <value>logsrv03:8088</value>  
  22.         </property>  
  23.         <property>  
  24.                 <name>yarn.nodemanager.aux-services</name>  
  25.                 <value>mapreduce_shuffle</value>  
  26.         </property>  
  27.         <property>  
  28.                 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  
  29.                 <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
  30.         </property>  
  31. </configuration>  
(6)、修改hadoop-2.7.1/etc/hadoop/mapred-site.xml 
  1. <configuration>  
  2. <property>  
  3.                 <name>mapreduce.framework.name</name>  
  4.                 <value>yarn</value>  
  5.         </property>  
  6.         <property>  
  7.                 <name>mapreduce.jobhistory.address</name>  
  8.                 <value>logsrv03:10020</value>  
  9.         </property>  
  10.         <property>  
  11.                 <name>mapreduce.jobhistory.webapp.address</name>  
  12.                 <value>logsrv03:19888</value>  
  13.         </property>  
  14. </configuration>  
8、這些配置檔案配置完畢後,然後將整個hadoop-2.7.1檔案複製到各個從機的目錄下,這裡目錄最好與主機一致
  1. [root@logsrv03 hadoop-2.7.1]# scp -r hadoop-2.7.1 root@logsrv02:/usr/local/jiang/  
  2. [root@logsrv03 hadoop-2.7.1]# scp -r hadoop-2.7.1 root@logsrv04:/usr/local/jiang/  

9、到這裡全部配置完畢,然後開始啟動hadoop,首先格式化hdfs
  1. [root@logsrv03 hadoop-2.7.1]# bin/hdfs namenode -format  
如果出現successfully formatted則表示格式化成功。
10、然後啟動hdfs
  1. [root@logsrv03 hadoop-2.7.1]# sbin/start-dfs.sh  
到這裡,可以檢視啟動的程序:
主機logsrv03:
  1. [root@logsrv03 hadoop-2.7.1]# jps   
  2. 29637 NameNode  
  3. 29834 SecondaryNameNode  

從機logsrv02、logsrv04:
  1. [root@logsrv04 hadoop-2.7.1]# jps   
  2. 20360 DataNode  

  1. [root@logsrv02 hadoop-2.7.1]# jps   
  2. 10774 DataNode  


11、啟動yarn
  1. [root@logsrv03 hadoop-2.7.1]# sbin/start-yarn.sh  

到這裡,啟動的程序:
主機logsrv03:
  1. [root@logsrv03 hadoop-2.7.1]# jps   
  2. 29637 NameNode  
  3. 29834 SecondaryNameNode  
  4. 30013 ResourceManager  

從機logsrv02、logsrv04:
  1. [root@logsrv02 hadoop-2.7.1]# jps   
  2. 10774 DataNode  
  3. 10880 NodeManager  

  1. [root@logsrv04 hadoop-2.7.1]# jps   
  2. 20360 DataNode  
  3. 20483 NodeManager  

到這裡,恭喜整個叢集配置完成,可以通過:http://logsrv03:8088/cluster檢視hadoop叢集圖:

檢視HDFS: