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-agent
、ssh-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的下載和安裝
-
從這兩個地址下載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
-
安裝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。
-
SSH設定:Hadoop控制指令碼依賴SSH來實施叢集內部的操作。為了做到無縫工作,我們需要設定SSH來允許叢集內部主機使用者進行無密碼登入。最簡單的方法時產生一對公鑰和祕鑰,然後用網路檔案系統在叢集內共享。
- 首先在Hadoop使用者賬號下用指令
ssh-keygen -t rsa -f ~/.ssh/id_rsa
產生RSA鑰匙對。儘管我們需要無祕鑰登入,但是沒有密碼的鑰匙並不是個好操作。我們應該用ssh-agent來避免每次連線都要輸入密碼。-f 選項指定了私鑰的儲存檔案,公鑰則儲存在相同資料夾相同檔名並以.pub結尾的檔案中,~/.ssh/id_rsa.pub。id_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-agent
的bash
,在這個bash
裡面用ssh-add
新增鑰匙。然後在這個bash
裡的任何程式都會自動使用ssh-agent
記錄的鑰匙登入其他機器。
- 首先在Hadoop使用者賬號下用指令
-
配置Hadoop:
cd /usr/local/hadoop-2.9.2/etc/hadoop
進入Hadoop配置目錄,需要配置有以下7個檔案:hadoop-env.sh
、yarn-env.sh
、slaves
、core-site.xml
、hdfs-site.xml
、mapred-site.xml
、yarn-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>
-
-
將配置好的hadoop-2.9.2資料夾分發給所有的slaves,可以用使用scp指令,例如下面
scp -r /usr/local/hadoop-2.9.2 [email protected]:~/
-
啟動Hadoop:在master上執行以下操作,就可以啟動hadoop了。
cd /usr/local/hadoop-2.9.2 bin/hadoop namenode -format sbin/start-dfs.sh sbin/start-yarn.sh
-
驗證hadoop是否安裝成功: 可以通過jps命令檢視各個結點啟動的程序是否正常。在master上應該有以下幾個程序
$ jps #run on master 3407 SecondaryNameNode 3218 NameNode 3552 ResourceManager 3910 Jps
如果master上的程序啟動失敗,首先應該檢查master上的埠是否被遮蔽了或者已經被佔用了。
-
在每個slave上應該有以下幾個程序:
$ jps #run on slaves 2072 NodeManager 2213 Jps 1962 DataNode
或者在瀏覽器輸入
http://master_ip:8088
,這裡把master_ip替換為master的IP地址,應該有hadoop的管理介面出來,並能看到slave1和slave2結點,如下圖所示