第四章 Hadoop2.x應用開發step by step——Hadoop2.x集羣環境

     Hadoop2.x集羣的安裝主要包括兩個核心NameNode(一個主節點),DataNode(多個從節點),NameNode有三個作用:(1)管理HDFS文件系統的無數據信息,如文件的名稱、文件大小、建立時間、修改時間、存儲位置等;(2)存儲HDFS的邏輯關係,也可以理解爲文件目錄,即文件與塊節點的映射關係;(3)存儲用戶對文件的操作日誌。DataNode的作用主要是用於存儲文件。

     Hadoop的運行模式主要有三種:

      • 單機模式。默認情況下,Hadoop被配置成以非分佈式模式運行的一個獨立Java進程。這對調試非常有幫助。
      • 僞分佈式模式。Hadoop可以在單節點上以所謂的僞分佈式模式運行,此時每一個Hadoop守護進程都作爲一個獨立的Java進程運行。
      • 完全分佈式模式。具有實際意義的Hadoop集羣,其規模可從幾個節點的小集羣到幾千個節點的超大集羣。

3.1 基礎學習:Hadoop2.x完全分佈式實驗環境安裝

    所謂“萬事開頭難”,Hadoop2.x集羣實驗環境的安裝放倒了不少新手,沒有安裝好實驗環境導致後面的內容沒法學習,於是乎只有放棄了。在本節中,主要介紹Hadoop2.x的完全分佈模式。

3.1.1 硬件環境

    至少滿足以下配置的普通PC機三臺:

    處理器:二核1.7G+      硬盤:40G+      內存:768M+     網絡:局域網

3.1.2 軟件環境

     (1) JDK:Java 7+,可以從Oracle官網下載Linux版本,64位。

     (2) Hadoop2.x:可以從Hadoop官網http://hadoop.apache.org/core/releases.html

     (3) 操作系統:CentOS,64位,下載地址:http://isoredirect.centos.org/centos/6.5/isos/ 

3.1.3 Linux環境安裝

(1)  安裝3臺搭載CentOS6.5的主機,也可以用虛擬主機,並保證每臺主機上有統一的登錄名,如hadoop,使用客戶端軟件(如使用PieTTY 0.3.26、putty登錄CentOS)登錄到CentOS,相同的目錄結構。

            1)更改hostname,將每臺主機名改成便於管理的名字:vi /etc/sysconfig/network        修改hostname

            2)更改hosts,在作爲namenode節點的主機上配置IP與主機名的對應關係:vi /etc/hosts,如:

            192.168.8.11 master

            192.168.8.12 slave12

            192.168.8.13 slave13

            3)關閉防火牆

            service iptables stop

            chkconfig iptables off

(2) 安裝JDK

     在每臺主機上安裝JDK,需把準備好的jdk-7u55-linux-x64.tar.gz放到Linux系統中,當然可以採用wget方法直接下載,也可採用WinSCP上傳。說下WinSCP的文件上傳吧。

     step1:下載安裝WinSCP,如果不會下載安裝,先百度啦。

     step2:打開WinSCP,如圖4-1:

圖3-1 WinSCP界面

step3:在主機名處輸入主機的IP地址,也可輸入名(但需要設置hosts),輸入用戶名及登錄密碼,單擊“登錄”按鈕,出現如圖4-2:

圖4-2  WinSCP操作界面


         note:左側圓角框所示爲本地Windows系統目錄結構,右側直角框所示爲Linux目錄結構。

         step4:在左側找到等上傳的jdk-7u71-linux-x64.gz,在右側找到目標位置,這裏選擇的是/home/hadoop目錄,將左側的jdk-7u71-linux-x64.gz拖至右側即可。

         接下來的工作就是到Linux系統上安裝JDK啦,

        1)安裝JDK

        找到/usr目錄,並建立一個目錄java,命令:

         cd /usr

         mkdir java

         將剛纔上傳的文件移動到/usr/java下,命令:

         mv /home/hadoop/jdk-7u71-linux-x64.gz  /usr/java/jdk-7u71-linux-x64.gz

        進入目錄/usr/java,命令:

        cd /usr/java

        用ls查看一下目錄下的文件,確認/jdk-7u71-linux-x64.gz已經存在後,使用命令:

         用tar命令解壓安裝JDK,命令:

        tar -zxvf jdk-7u55-linux-x64.tar.gz

        2)配置JAVA環境變量

          step1:使用su命令切換至root用戶,用vi工具修改.bash_profile,命令:vi /home/hadoop/.bash_profile

          step2:按下i鍵進入編輯模式,加入以下內容:

                        export JAVA_HOME=/usr/java/jdk1.7.0_71

                        export PATH=.:$JAVA_HOME/bin:$PATH

         step3:按ESC鍵後再輸入:wq保存退出。

         step4:使用source命令在當前bash環境下讀取並執行profile中的命令,如下:

                        source /home/hadoop/.bash_profile

          step5:確認,使用java -version出現以下提示,則說明JDK安裝成功。

          java version "1.7.0_71"
        Java(TM) SE Runtime Environment (build 1.7.0_71-b14)

        Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

         並將其分發到各datanode結點上,命令:

         scp -rf /usr/java/  root@slave12:/usr/java

         scp /home/hadoop/.bash_profile root@slave12:/home/hadoop/.bash_profile

        (3)配置主機名稱

         使用root用戶配置主機名,將作爲namenode的結點命名爲:master,命令:

        vi /etc/sysconfig/network 

        寫入:

        HOSTNAME=master

       其他的datanode,如12結點命名爲:slave12,命令:

         vi /etc/sysconfig/network 

        寫入:

        HOSTNAME=slave12
        (4)用root用戶 配置hosts,是爲了在安裝HDFS時直接引用主機名,將主機的IP映射爲主機名,便於安裝HDFS時使用主機名,方便管理。

          vi /etc/hosts

         加入:

         192.168.8.11  master

         192.168.8.12 slave12

         192.168.8.13 slave13

         其他的datanode 也要如此配置。

           (5) 設置ssh登錄(很關鍵)

         在namenode主機上,我這裏用的是master11,進入目錄/home/hadoop下,命令:

            cd /home/hadoop

            ssh-keygen -t rsa

            一路回車,生成id_rsa.pub等文件。

          chmod 0700 .ssh

           用命令ls -a查看,存在.ssh文件夾。

          在其他datanode結點上, 進入ssh目錄,cd .ssh,做相同的工作,如下:

           將namenode結點的id_rsa.pub拷貝到各datanode節點的相同目錄下,執行touch /root/.ssh/authorized_keys (如果已經存在這個文件, 跳過這條),chmod 600 ~/.ssh/authorized_keys  (# 注意: 必須將~/.ssh/authorized_keys的權限改爲600, 該文件用於保存ssh客戶端生成的公鑰,可以修改服務器的ssh服務端配置文件/etc/ssh/sshd_config來指定其他文件名),cat /root/.ssh/id_rsa.pub  >> /root/.ssh/authorized_keys (將id_rsa.pub的內容追加到 authorized_keys 中, 注意不要用 > ,否則會清空原有的內容,使其他人無法使用原有的密鑰登錄)

         在namenode上驗證:           ssh slaver12,出現下面提示表示成功:

        Last login:Thu Apr 23 06:11:34 from 192.168.1.11

         (6)Hadoop集羣的HDFS文件系統主要通過心跳機制來判斷各DataNode的在線情況,所以需要設置在NameNode節點與DataNode節點上設置時鐘同步。分別在各主機上配置時間同步,命令:

       crontab -e

      插入內容:

     0 1 * * * /usr/sbin/ntpdate us.pool.ntp.org    #us.pool.ntp.org是時鐘同步網址,0 1 * * * 之間均有空格

       (7)關閉NameNode節點與各DataNode節點的防火牆,切換到root用戶下,執行命令:

      service iptables stop

     3.1.4 安裝Hadoop2.x

      將下載的hadoop-2.5.1.tar.gz上傳至namenode節點主機的/home/hadoop目錄下,也可直接用wget命令下載到此目錄下。wget http://apache.claz.org/hadoop/core/hadoop-2.5.2/hadoop-2.5.2.tar.gz

      (1)進入目錄/home/hadoop目錄下,解壓hadoop-2.5.2.tar.gz。命令:

      tag -xvf hadoop-2.5.2.tar.gz

      (2)在目錄/home/hadoop目錄下建立文件夾mydata,命令:

      mkdir mydata

      (3)在文件hadoop-env.sh中配置Hadoop2.x運行時的JDK環境變量,命令:

       vi /home/hadoop/hadoop-2.5.1/etc/hadoop/hadoop-env.sh

        文件打開後,將:export JAVA_HOME=${JAVA_HOME}修改爲:export JAVA_HOME=/usr/java/jdk1.7.0_71,也就是JAVA_HOME的路徑。

       (4)在文件yarn-env.sh中配置yarn所需的JDK環境變量,命令:

      vi /home/hadoop/hadoop-2.5.1/etc/hadoop/yarn-env.sh

         文件打開後,找到#export JAVA_HOME=/home/y/libexec/jdk1.6.0,將其改了:export JAVA_HOME=/usr/java/jdk1.7.0_71,並去除註釋符號#。

       (5)在文件core-site.xml中配置核心組件,命令:

      vi /home/hadooop/hadoop-2.5.1/etc/hadoop/core-site.xml

       完整配置如下:

  <?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  <configuration>
          <property>
                  <name>fs.defaultFS</name>
                  <value>hdfs://master:9000</value>
          </property>
          <property>
                  <name>hadoop.tmp.dir</name>
                  <value>/home/hadoop/mydata</value>
          </property>
  </configuration>

       (6)在文件hdfs-site.xml中配置文件系統,命令:

         vi /home/hadoop/hadoop-2.5.1/etc/hadoop/hdfs-site.xml

        完整配置如下:

  <?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  <configuration>
      <property>
          <name>dfs.replication</name>
          <value>1</value><!--1代表一個副本-->
      </property>
  </configuration>

      (7)在文件yarn-site.xml中配置文件系統,命令:

     vi /home/hadoop/hadoop-2.5.1/etc/hadoop/yarn-site.xml

   

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  	<property>
  		<name>yarn.nodemanager.aux-services</name>
  		<value>mapreduce_shuffle</value>
  	</property>
  	<property>
                  <name>yarn.resourcemanager.address</name>
                  <value>master:18040</value>
          </property>
  	<property>
                  <name>yarn.resourcemanager.scheduler.address</name>
                  <value>master:18030</value>
          </property>
  	<property>
                  <name>yarn.resourcemanager.resource-tracker.address</name>
                  <value>master:18025</value>
          </property>
  	<property>
                  <name>yarn.resourcemanager.admin.address</name>
                  <value>master:18141</value>
          </property>
  	<property>
                  <name>yarn.resourcemanager.webapp.address</name>
                  <value>master:18088</value>
          </property>
</configuration>

     (8)複製mapred-site.xml.template爲mapred-site.xml,並在文件mapred-site.xml中配置計算框架,命令:

      cp /home/hadoop/hadoop-2.5.1/etc/hadoop/mapred-site.xml.template  /home/hadoop/hadoop-2.5.1/etc/hadoop/mapred-site.xml

       vi /home/hadoop/hadoop-2.5.1/etc/hadoop/mapred-site.xml

      完整配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
  	<name>mapreduce.framework.name</name>
  	<value>yarn</value>
  </property>
</configuration> 

    (9)在文件slaves中配置DataNode節點,命令:

     vi /home/hadoop/hadoop-2.5.1/etc/hadoop/slaves

     在slaves中填寫DataNode節點名稱,一行填寫一個DataNode名稱,如:

     slave12

     slave13

      (10)分發Hadoop-2.5.1文件夾至各DataNode節點主機,命令:

scp -r /home/hadoop/hadoop-2.5.1   hadoop@slave12:/home/hadoop/hadoop-2.5.1
scp -r /home/hadoop/hadoop-2.5.1   hadoop@slave13:/home/hadoop/hadoop-2.5.1

      (11)在NameNode節點與各DataNode節點主機上的文件/home/hadoop/.bash_profile文件中配置Hadoop集羣啓動的系統環境變量,命令:

      vi /home/hadoop/.bash_profile

     在文件的最後一行加入以下內容:

export HADOOP_HOME=/home/hadoop/hadoop-2.5.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    用命令source /home/hadoop/.bash_profile,全其配置生效。

    (12)在NameNode節點主機上執行格式化HDFS文件系統的命令:

hdfs namenode -format
     (13)在NameNode節點上啓動Hadoop集羣,命令:

cd /home/hadoop/hadoop-2.5.1
sbin/start-all.sh
       可以通過進程查看集羣是否啓動成功,在NameNode節點上存在進程: ResourceManager、NameNode和SecondaryNameNode三個進程,在各DataNode節點存在兩個進程:DataNode和NodeManager ,查看進程的Linux命令爲jps。   

       還可以通過Web UI方式查看進程是否啓動成功。在瀏覽器地址欄中輸入Http://master:50070即可查看,當然需要在本機上的hosts文件中加入:

            192.168.8.11 master

            192.168.8.12 slave12

            192.168.8.13 slave13

       成功時再現圖4-3所示界面。


      

         圖4-3 web ui提示界面

             3.1.5 我的第一個Hadoop運算——PI

          進入hadoop-2.5.1目錄下的示例文件夾,命令:

cd /home/hadoop/hadoop-2.5.1/share/hadoop/mapreduce

             執行命令:
hadoop jar hadoop-mapreduce-examples-2.5.1.jar pi 10 10
            在集羣成功配置,並運行正常的情況下,可以輸出如結果:




      

          




發佈了37 篇原創文章 · 獲贊 14 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章