1. 程式人生 > >Hadoop安裝指南

Hadoop安裝指南

1. 修改hosts和hostname

在ubuntu上,/etc/hosts 儲存IP地址和域名的對應關係,/etc/hostname 儲存本機的主機名。我們可以在hosts檔案里加入這樣的對映

ip_address1 master
ip_address2 slave1
ip_address3 slave2

然後用

sudo hostname name1
sudo hostname name2
sudo hostname name3

修改這三臺伺服器的主機名。可以用

hostname

檢視是否修改成功。

2. ssh 設定

我們需要設定ssh,讓叢集做到無密登入。首先,要產生一對RSA鑰匙對:

ssh-keygen -t rsa -f ~/.ssh/id_rsa

儘管我們要做到無密登入,但是產生鑰匙對時最好輸入一個密碼。~/.ssh/id_rsa 是私鑰,~/.ssh/id_rsa.pub 是公鑰。我們在每臺機器上都產生鑰匙對,然後用 scp 命令把公鑰傳送到其他機子上。

cat id_rsa.pub >> ~/.ssh/authorized_keys

這樣就把公鑰加入了認證鑰匙中。接著用 ssh-agentssh-add 做到無密登入,

ssh-agent bash
ssh-add

無密登入就完成了。

3. 安裝Java方法

Java官網下載最新額JDK。
/home/ubuntu/

目錄下對jdk-10.0.2.tar.gz檔案輸入命令 tar -xzvf [filename].tar.gz
解壓好的資料夾jdk-10.0.2/就是JDK的安裝目錄。
然後在~/.bashrc後面加入幾行命令

export JAVA_HOME="/home/ubuntu/jdk-10.0.2"
export PATH="$JAVA_HOME/bin:$PATH"
export CLASSPATH="$JAVA_HOME/lib/"

這樣就把java的路徑加入了環境變數中。輸入java -version,看到類似下列的顯示就可以確認Java已經正確安裝。

java version "10.0.2" 2018-07-17  
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)  
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)

4. Hadoop的下載和安裝

  1. 從這兩個地址下載Hadoop安裝檔案和驗證檔案:下載地址一下載地址二。這裡的版本是2.9.2。下載命令如下:

     wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz  
     wget https://www-eu.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz.asc  
     wget https://www-eu.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz.mds  
     wget https://www-us.apache.org/dist/hadoop/common/KEYS  
    

詳細說明請看這裡
2. 驗證下載檔案:
我們可以用PGP或者GPG來驗證PGP的簽名。首先下載針對相關版本的KEYS和asc檔案。你應該從主要分發網站下載,而不是映象網站下載。我們用下列指令來驗證簽名:

	gpg --import KEYS  
	gpg --verify downloaded_file.asc downloaded_file  

驗證成功後可以得到這樣的輸出:

	gpg: Signature made Wed 14 Nov 2018 01:48:06 AM CST using RSA key ID A400FD50  
	gpg: Good signature from "Akira Ajisaka <[email protected]>"  
	gpg:                 aka "Akira Ajisaka <[email protected]>"   
	gpg: WARNING: This key is not certified with a trusted signature!  
	gpg:          There is no indication that the signature belongs to the owner.  
	Primary key fingerprint: F05D F650 0A02 1922 7B56  6990 C1ED BB9C A400 FD50   

或者

	pgpk -a KEYS
	pgpv downloaded\_file.asc  

或者

	pgp -ka KEYS  
	pgp downloaded\_file.asc 

或者,你也可以驗證檔案的雜湊值。我們可以用gpg命令計算雜湊值。

	gpg --print-md SHA1 downloaded_file

該命令的輸出應該與SHA1檔案的內容進行對比。mds檔案的內容類似於下面

	/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
	   MD5 = 82 DB 6A 62 FE BD 8C 29  76 D7 5B 8B D5 51 33 15
	/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
	  SHA1 = EBB3 F0E5 536E E79E C00F  8D8A 209E F647 B10B DE26
	/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
	RMD160 = 903E 2EDF 5877 B09F 04B7  8E3C 7789 66CD AE88 362E
	/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
	SHA224 = 1E76D1BD ED80F3B0 CE8C5ED6 3897A39E A75E219D BEB09023 D55892C7
	/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
	SHA256 = 3D2023C4 6B1156C1 B102461A D08CBC17 C8CC5300 4EAE95DA B40A1F65 9839F28A
	/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
	SHA384 = BA008D60 DF04A896 FDEEE5B7 B9C2233C C33692D4 F423EA7B 1F088913 4C36A057
	         FE859ED3 0FA41F1A 194B239F 09A3FF28
	/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
	SHA512 = BD6060B6 29C2E7C5 D411AE3B A2330B79 CDB2F1CA A87D5EA6 9392C0F9 CB64A834
	         64EC8E23 F2CC6133 1B9F4928 4A6BFDC1 A3FBDEFF E3402650 E64938F5 672094F5
  1. 安裝Hadoop:我們可以把Hadoop安裝在/usr/local/下。注意:不要把它裝在使用者目錄下。

     sudo mv hadoop-2.9.2.tar.gz /usr/local/
     cd /usr/local
     sudo tar xzvf hadoop-2.9.2.tar.gz   
    

    我們也需要把Hadoop的檔案主任設定為Hadoop的使用者和組群

    sudo chown -R root:root hadoop-2.9.2

    這裡Hadoop的使用者和組群都是root。

  2. SSH設定:Hadoop控制指令碼依賴SSH來實施叢集內部的操作。為了做到無縫工作,我們需要設定SSH來允許叢集內部主機使用者進行無密碼登入。最簡單的方法時產生一對公鑰和祕鑰,然後用網路檔案系統在叢集內共享。

    • 首先在Hadoop使用者賬號下用指令 ssh-keygen -t rsa -f ~/.ssh/id_rsa 產生RSA鑰匙對。儘管我們需要無祕鑰登入,但是沒有密碼的鑰匙並不是個好操作。我們應該用ssh-agent來避免每次連線都要輸入密碼。-f 選項指定了私鑰的儲存檔案,公鑰則儲存在相同資料夾相同檔名並以.pub結尾的檔案中,~/.ssh/id_rsa.pubid_rsa可以是任何檔名。
    • 我們需要確保公鑰儲存在叢集內部任何機器的 ~/.ssh/authorized\_keys 檔案中。如果Hadoop使用者目錄是個網路檔案系統,那麼鑰匙可以用 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 指令來共享。如果使用者目錄沒有使用網路檔案系統,那麼我們就要手動複製檔案來共享。把檔案從master傳送到每個slave上,以及把檔案從每個slave傳送到master上:scp /home/username1/.ssh/id_rsa.pub >> [email protected]_address:/home/username2/id_rsa.pub。把 id_rsa.pub 裡的內容複製到authorized_keys裡:cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    • 我們用 ssh-agent bash 啟動一個帶著 ssh-agentbash ,在這個 bash 裡面用 ssh-add 新增鑰匙。然後在這個 bash 裡的任何程式都會自動使用 ssh-agent 記錄的鑰匙登入其他機器。
  3. 配置Hadoop:cd /usr/local/hadoop-2.9.2/etc/hadoop進入Hadoop配置目錄,需要配置有以下7個檔案:hadoop-env.shyarn-env.shslavescore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml

    • hadoop-env.sh中配置JAVA_HOME。如果環境變數中已經定義過JAVA_HOME,那麼這裡也不可以省略。

    • yarn-env.sh中配置JAVA_HOME,同上。

    • 在slaves中配置slave結點的ip或者host。

    • 修改core-site.xml

      <configuration>
          <property>
              <name>fs.defaultFS</name>
              <value>hdfs://master:9000/</value>
          </property>
          <property>
               <name>hadoop.tmp.dir</name>
               <value>file:/home/spark/workspace/hadoop-2.6.0/tmp</value>
          </property>
      </configuration>
      
    • 修改hdfs-site.xml檔案

      <configuration>
          <property>
              <name>dfs.namenode.secondary.http-address</name>
              <value>master:9001</value>
          </property>
          <property>
              <name>dfs.namenode.name.dir</name>
              <value>file:/home/spark/workspace/hadoop-2.6.0/dfs/name</value>
          </property>
          <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:/home/spark/workspace/hadoop-2.6.0/dfs/data</value>
          </property>
          <property>
              <name>dfs.replication</name>
              <value>3</value>
          </property>
      </configuration>
      
    • 修改mapred-site.xml

        <configuration>
            <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
            </property>
        </configuration>
      
    • 修改yarn-site.xml

        <configuration>
            <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
            </property>
            <property>
                <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
            </property>
            <property>
                <name>yarn.resourcemanager.address</name>
                <value>master:8032</value>
            </property>
            <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>master:8030</value>
            </property>
            <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>master:8035</value>
            </property>
            <property>
                <name>yarn.resourcemanager.admin.address</name>
                <value>master:8033</value>
            </property>
            <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>master:8088</value>
            </property>
        </configuration>
      
  4. 將配置好的hadoop-2.9.2資料夾分發給所有的slaves,可以用使用scp指令,例如下面

     scp -r /usr/local/hadoop-2.9.2 [email protected]:~/
    
  5. 啟動Hadoop:在master上執行以下操作,就可以啟動hadoop了。

       cd /usr/local/hadoop-2.9.2
       bin/hadoop namenode -format
       sbin/start-dfs.sh
       sbin/start-yarn.sh
    
  6. 驗證hadoop是否安裝成功: 可以通過jps命令檢視各個結點啟動的程序是否正常。在master上應該有以下幾個程序

     $ jps  #run on master
     3407 SecondaryNameNode
     3218 NameNode
     3552 ResourceManager
     3910 Jps  
    

    如果master上的程序啟動失敗,首先應該檢查master上的埠是否被遮蔽了或者已經被佔用了。

  7. 在每個slave上應該有以下幾個程序:

     $ jps   #run on slaves
     2072 NodeManager
     2213 Jps
     1962 DataNode
    

    或者在瀏覽器輸入 http://master_ip:8088,這裡把master_ip替換為master的IP地址,應該有hadoop的管理介面出來,並能看到slave1和slave2結點,如下圖所示
    Hadoop瀏覽器介面