Hadoop安裝手冊1-基礎掃盲及準備工作

junsansi發表於2013-02-01

   如今的Hadoop不僅聲名遠揚,影響力在apache的開源專案中也佔據著頭把交椅,國內外已有非常的成功應用。就目前來說,我對Hadoop整個體系連個大概的瞭解都說不上,個人倒是老早就想深入學習這套體系,本地磁碟上的安裝包更是早就下載好了,不過檔案儲存日期久遠的我自己都不好意思看。

  值此新年伊始,欣喜地看到tigerfish老師第四期hadoop課程開班,我也趕緊報名參與,希望能在tigerfish老師的指導下,專心聽課認真做題,爭取在課程結業的時候,使自己對hadoop的瞭解能達到入門的水平。

  Hadoop如今已經成長為一套體系,包含的元件眾多,要學習的知識很多,目前網際網路上的各類參考資料更是浩瀚,遇到這種情況很多朋友可能都在苦惱不知道該從何開始。就我來說倒沒有這方面的煩惱,從來這麼多年,接觸的東西也很多,但不管要學習什麼,我的學習路徑很像那些愛玩遊戲的孩子,接觸到一個感興趣的新東西,第一件事並不翻開它的說明書,而是先拿在手裡把玩一番,遇著不懂的就去找專門應對方案。等有大致瞭解之後,再會系統的閱讀官方提供的文件。

  就Hadoop來說,在使用之前我們得首先有一套環境,因此這篇文章就算是我初次接觸Hadoop的一個記錄吧,先跟三思一起來了解到底什麼是hadoop,而後我們再親自動手,部署一套Hadoop叢集出來。

0、基礎部分掃盲

0.0 關於Hadoop

  聽說過Doug Cutting沒,聽說過Lucene沒,聽說過Nutch沒,什麼,都沒聽過?哎,我真不知道該如何向你解釋。GOOGLE聽說過沒,這個總歸有印象了吧。為什麼要提GOOGLE呢,按照tigerfish老師所說,Hadoop就是山寨版的GOOGLE搜尋。

  很多朋友都好奇GOOGLE/BAIDU這類搜尋引擎,是怎麼實現這麼高效的查詢速度,用的什麼資料庫等等,GOOGLE當然不會把自己的核心技術全面公開,即使對它最瞭解的非GOOGLE人士,也只能用連蒙帶猜的方式推測,因此能回答這個問題的人怕是不多的。不過我想說的是,HADOOP實現了一套類似GOOGLE的解決方案,如果你瞭解了它,那麼對於前面的問題想必也就有答案了。

  前面提示的Nutch/Lucene又是怎麼回事兒呢,這部分內容暫不多扯,待後面我八卦些小道訊息再論。如有素材歡迎提供。

0.1 關於Hadoop家族

  Hadoop的核心模組有兩個:HDFS(Hadoop Distributed Filesystem)和MapReduce,前者提供儲存,後者負責計算,可謂珠聯璧合,除此之後還有:

     
  • Hbase:類似Google BigTable的分散式列式資料庫;
  •  
  • Hive:基於Hadoop的資料倉儲工具,可以將結構化的資料檔案對映成資料庫表,並且提供SQL查詢功能,能夠將SQL語句轉換成MapReduce任務執行;
  •  
  • Pig:與Hive類似也是基於hadoop的擴充套件專案,據說本意是為了簡化hadoop程式設計,提供一個高度抽象的資料處理方式,具體能夠多麼簡化我也不知道,有機會接觸了再說;
  •  
  • ZooKeeper:分散式系統中的資源管理系統,可用於維護叢集中的資源排程;

  其它也許還有,以後必將更多,Hadoop做為Apache基金會的頂級專案,自身也是高速發展。

0.2 hadoop的體系結構

  Hadoop叢集中從大的粒度來看可以分為兩種角色:Master和Slave,其中master又可以分為主master和輔助master,一個節點屬於什麼角色,是由其提供的服務決定的:

     
  • 主Master:主要提供下列服務:    
           
    • NameNode:管理HDFS名稱空間;
    •      
    • SecondaryNameNode:輔助NameNode,可視為NameNode備份,儲存檢查點資訊,用於快速恢復NameNode;
    •      
    • JobTracker:任務分配器;
    •    
     
  •  
  • 輔助Master:
  •  
  • SecondaryNameNode:
  •  
  • Slave:
  •  
  • DataNode:HDFS資料儲存節點;
  •  
  • TaskTracker:任務處理器;

1、準備工作

  正常情況下Hadoop叢集是由多個節點組成,每個節點做為其中的一個角色承擔不同的任務,比如說某個節點執行namenode,某些節點執行datanode等等,不過,使用者也可以將所有的應用都放在一個節點上,這種情況儘管也可以執行,其實就稱不上分散式了。可是,這種模式還不算極端,Hadoop還支援一種本地模式。

  因此歸納一下,Hadoop叢集可以分三種部署方式:

     
  • Local Mode:這種模式不需要守護程式,主要用於開發階段,本地除錯MapReduce程式比較方便,可以採用這種模式,環境部署和維護各方面都簡單;
  •  
  • Pseudo-distributed Mode:看名字就知道了,偽分散式嘛,這種就是前面說的,所有任務都執行在同一個節點上,但是部署的時候還是按照分散式的方式部署,這種模式比較適用個人測試,它對環境的要求會低一些;
  •  
  • Fully-Distributed Mode:標準模式,本文中的hadoop環境就是基於這種模式部署(一主兩從的最小規模);  

1.1 初始化第一個節點

  Hadoop執行需要JAVA環境,因此首先需要檢查系統中是否安裝的Java JDK:

    [root@hdnode3 ~]# /usr/local/jdk1.7.0_09/bin/java -version

    java version "1.7.0_09"

    Java(TM) SE Runtime Environment (build 1.7.0_09-b05)

    Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

  如果沒有找到java的話,需要先安裝jdk。安裝包可以到SUN官網進行下載,或者直接通過yum進行安裝,我這裡是。

編譯本地hosts檔案:

    # more /etc/hosts

    127.0.0.1   localhost localhost.localdomain

    ::1         localhost localhost.localdomain  

    192.168.30.203 hdnode1

    192.168.30.204 hdnode2

    192.168.30.205 hdnode3

建立使用者:

    # useradd grid

    # passwd grid

    Changing password for user grid.

    New password:  

    ....................

解壓縮hadoop安裝包到指定目錄下:

    # tar xvfz /data/software/hadoop-0.20.2.tar.gz -C /usr/local/

不知道哪裡下載安裝包?http://www.apache.org/dyn/closer.cgi/hadoop/common/ 這裡瞅一瞅。

修改資料夾的使用者屬主:

    # chown grid:grid /usr/local/hadoop-0.20.2/ -R

生成節點間金鑰,切換到grid使用者下操作:

    [root@hdnode1 ~]# su - grid

    [grid@hdnode1 ~]$ ssh-keygen -t rsa

    Generating public/private rsa key pair.

    Enter file in which to save the key (/home/grid/.ssh/id_rsa):  

    Created directory ¨/home/grid/.ssh¨.

    Enter passphrase (empty for no passphrase):  

    Enter same passphrase again:  

    Your identification has been saved in /home/grid/.ssh/id_rsa.

    Your public key has been saved in /home/grid/.ssh/id_rsa.pub.

    The key fingerprint is:

    b6:17:4b:7a:e1:7d:04:e6:01:49:bc:61:72:fb:b6:f3 grid@hdnode1

    The key¨s randomart image is:

    +--[ RSA 2048]----+

    |         oo.     |

    |        . *.     |

    |         + ++    |

    |          oo o   |

    |        S +.. .  |

    |       . = =o.   |

    |        o =....  |

    |         o  o.   |

    |             oE  |

    +-----------------+

而後將公鑰資訊儲存到authorized_keys檔案中:

    [grid@hdnode1 ~]$ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

注意修改authorized_keys檔案許可權為600,否則節點間無密碼訪問仍有可能失敗。

配置grid使用者環境變數:

    [grid@hdnode1 ~]$ vi ~/.bash_profile  

增加下列內容:

    export JAVA_HOME=/usr/local/jdk1.7.0_09

    export HADOOP_HOME=/usr/local/hadoop-0.20.2

    PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH:$HOME/bin

1.2 初始化第二和第三節點

在hdnode2和hdnode3節點上分別重複上面的步驟。

1.3 配置節點間無密碼訪問

現在我們們先將hdnode2和hdnode3兩個節點的公鑰資訊全部輸出到hdnode1的authorized_keys檔案中:

    [grid@hdnode1 ~]$ ssh hdnode2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  

    The authenticity of host ¨hdnode2 (192.168.30.204)¨ can¨t be established.

    RSA key fingerprint is 2d:e3:a1:b8:7e:5e:06:ae:04:55:73:73:13:24:94:c8.

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added ¨hdnode2,192.168.30.204¨ (RSA) to the list of known hosts.

    grid@hdnode2¨s password:  

    [grid@hdnode1 ~]$ ssh hdnode3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  

    The authenticity of host ¨hdnode3 (192.168.30.205)¨ can¨t be established.

    RSA key fingerprint is 2d:e3:a1:b8:7e:5e:06:ae:04:55:73:73:13:24:94:c8.

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added ¨hdnode3,192.168.30.205¨ (RSA) to the list of known hosts.

    grid@hdnode3¨s password:  

修改認證金鑰檔案的許可權為只有屬主使用者可讀寫:

    [grid@hdnode1 ~]$ chmod 600 .ssh/authorized_keys  

然後將authorized_keys檔案複製到其它節點,直接執行scp命令就可以:

    [grid@hdnode1 ~]$ scp ~/.ssh/authorized_keys hdnode2:/home/grid/.ssh/authorized_keys  

    grid@hdnode2¨s password:  

    authorized_keys                                                                                                                       100% 1182     1.2KB/s   00:00    

    [grid@hdnode1 ~]$ scp ~/.ssh/authorized_keys hdnode3:/home/grid/.ssh/authorized_keys  

    grid@hdnode3¨s password:  

    authorized_keys                                                                                                                       100% 1182     1.2KB/s   00:00    

接下來,如果有興趣的話可以在各節點試一下ssh連線其它節點,應該不需要輸入密碼了:

    [grid@hdnode1 ~]$ ssh hdnode1 date

    Tue Jan 29 16:09:49 CST 2013

    [grid@hdnode1 ~]$ ssh hdnode2 date

    Tue Jan 29 16:09:51 CST 2013

    [grid@hdnode1 ~]$ ssh hdnode3 date

    Tue Jan 29 16:09:53 CST 2013

注意嘍,第一次訪問時會提示,將要訪問的節點加入到已知主機列表,這是正常的,輸入yes同意,後面再訪問就不會再提示了。

至此,我們們這個無密碼訪問就算配置好了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-756807/,如需轉載,請註明出處,否則將追究法律責任。

相關文章