天天看點

(超詳細)從零開始安裝與配置hadoop完全分布式環境

強調!!!

使用者名稱要相同,否則可能出現稀奇古怪的錯誤!!!(我就因為這個問題,在後面快裝完的時候不得不從頭再來)

原因:Hadoop要求所有機器上Hadoop的部署目錄結構要求相同(因為在啟動時按與主節點相同的目錄啟動其它任務節點),并且都有一個相同的使用者名賬戶。參考各種文檔上說的是所有機器都建立一個hadoop使用者,使用這個賬戶來實作無密碼認證。

(超詳細)從零開始安裝與配置hadoop完全分布式環境

我這裡是在虛拟機上建立的系統,即裝系統的時候将每個系統的下面這個界面的使用者名填成一樣的

(超詳細)從零開始安裝與配置hadoop完全分布式環境
一、開發環境

硬體環境:ubuntu-16.04.3 伺服器3台(一台 master 結點,兩台 slave 結點),在虛拟機中搭建

軟體環境:jdk1.8.0_144,hadoop-2.8.1

jdk下載下傳(下載下傳對應版本以“.tar.gz”結尾的檔案)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

hadoop下載下傳(選擇圖中标記出來的位置的連結)

(超詳細)從零開始安裝與配置hadoop完全分布式環境
二、叢集拓撲圖
(超詳細)從零開始安裝與配置hadoop完全分布式環境
三、與本地Win7系統共享本地檔案

ps:省去在虛拟機中下載下傳檔案,友善很多

1、虛拟機設定

虛拟機菜單欄 -> 虛拟機 -> 設定 -> 選項 -> 共享檔案夾 -> 總是啟用 -> 添加(我将添加的共享目錄命名為Shared) ->确定

(超詳細)從零開始安裝與配置hadoop完全分布式環境

2、VMware Tools安裝

(1)虛拟機菜單欄 -> 虛拟機 -> 安裝VMware Tools

(2)等一會虛拟機會自己打開VMware Tools檔案夾

(3)在該目錄下,右鍵打開指令行,将壓縮檔案拷貝到桌面上,再到桌面上将其解壓縮

cp VMwareTools--tar.gz /home/hadoop/Desktop/
cd /home/hadoop/Desktop/
tar -xzvf VMwareTools--tar.gz
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

(4)成功之後以管理者root身份執行解壓縮之後檔案目錄裡的vmware-install.pl檔案即可進行安裝

sudo vmware-tools-distrib/vmware-install.pl
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

(5)一路回車

醬紫就裝好了

(超詳細)從零開始安裝與配置hadoop完全分布式環境

(6)共享檔案在 /mnt/hgfs/Shared 檔案夾下

ps:Shared是剛添加共享目錄時自己起的名字

3、将下載下傳好的軟體包放到共享檔案夾下

四、JDK的安裝與配置

1、解壓縮

(1)把壓縮包拷貝到你想要安裝的位置,我要裝在 /usr/local 目錄下

sudo cp jdk-u144-linux-x64.tar.gz /usr/local
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

(2)進到對應目錄下解壓縮

cd /usr/local
sudo tar -zxvf jdk-u144-linux-x64.tar.gz
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

2、配置環境變量

(1)修改配置檔案

sudo vi /etc/profile
           

在末尾添加如下配置(Linux指令:G -> o(字母小o) - > 輸入以下内容)

export JAVA_HOME=/usr/local/jdk1._144
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
           

(Linux指令:Esc鍵 - > 輸入“:wq”退出)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

(2)重新加載/etc/profile,使配置生效

source /etc/profile
           

(3)檢查是否配置成功

echo $PATH
java -version
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境
五、HOST檔案配置

修改叢集中每台伺服器的 hosts 檔案,配置主機名和 ip 位址的映射

vi /etc/hosts
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境
六、SSH的安裝與配置

1、軟體安裝

(1)首先更新源(要确定系統可以聯網,可以先打開浏覽器通路以下百度首頁,如果沒連上網,可以試試到Win7系統上 “右鍵計算機 -> 管理 -> 服務和應用程式 -> 服務 -> 找到VMware相關的所有服務 -> 右鍵 -> 啟動”)

sudo apt-get update
           

(2)安裝 openssh

  • 服務端安裝
(超詳細)從零開始安裝與配置hadoop完全分布式環境
  • 用戶端安裝
(超詳細)從零開始安裝與配置hadoop完全分布式環境

ps:如何區分該裝服務端還是用戶端?

如果 slave1 系統想要登入 slave2 系統,那麼 slave1 裝用戶端, slave2 裝服務端,如果想要互相都能登入,就服務端和用戶端都裝

(3)測試是否可以登入

ssh -l hadoop .
           

(ssh -l [使用者名] [遠端ip])

( ip 可以用 ifconfig 指令檢視)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

到現在,我們已經可以通過密碼登入了

2、配置免密碼登入

原理是驗證公鑰而不驗證密碼

(1)配置本機無密碼登入

三台伺服器均做如下設定

1)進入到宿主目錄下,生成本機秘鑰同時設定免密登入,注意,這裡不能使用 root 使用者生成秘鑰,而是要使用你想要設定免密登入的使用者

cd /home/hadoop/
ssh-keygen -t rsa -P ""
           

一路回車

(超詳細)從零開始安裝與配置hadoop完全分布式環境

2)将公鑰追加到 authorized_keys 檔案中

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

賦予 authorized_keys 檔案權限

chmod  .ssh/authorized_keys
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

3)驗證是否成功

ssh localhost
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

(2)配置 master 無密碼登入 slave1 伺服器

以下操作均在 slave1 伺服器上操作

1)複制 master 的公鑰到 slave1 上

scp hadoop@192..:/home/hadoop/.ssh/id_rsa.pub /home/hadoop
           

(scp [email protected]_ip:master_file slave1 _folder)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

2)将 master 公鑰追加到 slave1 的 authorized_keys 檔案中,删除 master 公鑰檔案

cat /home/hadoop/id_rsa.pub >> .ssh/authorized_keys
rm /home/hadoop/id_rsa.pub
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

3)驗證是否成功(在master伺服器上操作)

ssh slave1
           

(ssh ip 在 /etc/hosts 檔案中我們已經将 ip 和主機名做了映射,是以可以直接用主機名代替 ip)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

(3)參照上一步,完成以下配置

1)master -> slave2

2)slave1 -> master

3)slave2 -> master

4)slave1 -> slave2

5)slave2 -> slave1

七、Hadoop完全分布式環境的安裝與配置

除特别說明外,以下操作均在 master 伺服器上操作

1、建立檔案目錄

為了便于管理,給master的hdfs的NameNode、DataNode及臨時檔案,在根目錄下建立目錄:

/data/hdfs/name

/data/hdfs/data

/data/hdfs/tmp

sudo mkdir /data
sudo mkdir /data/hdfs
sudo mkdir /data/hdfs/name
sudo mkdir /data/hdfs/data
sudo mkdir /data/hdfs/tmp
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

修正分割線———————————–

(ps:對之前看了這篇部落格,照着搭建完出現問題的小夥伴表示萬分抱歉,我也是在運作執行個體的時候找了好久才弄明白這個地方的錯誤的,求原諒T_T)

這裡建立完各檔案夾之後,記得要把檔案夾的所有者和所屬組改成 hadoop 使用者,否則後面 hadoop 使用者沒有權限寫入,會出錯,我遇到的錯誤是 second 線程啟動不起來,因為沒有權限建立它所需要的檔案夾及寫入檔案

sudo chown hadoop /data
sudo chown hadoop /data/hdfs
sudo chown hadoop /data/hdfs/name
sudo chown hadoop /data/hdfs/data
sudo chown hadoop /data/hdfs/tmp
           

修正分割線———————————–

分别在 slave1 和 slave2 伺服器上執行以下指令

sudo scp -r hadoop@master:/data /
           

2、解壓縮

(1)将共享目錄下的軟體包拷貝到 /data 目錄下

sudo cp /mnt/hgfs/Shared/hadoop-.tar.gz /data
           

到 /data 目錄下解壓檔案

cd /data
sudo tar -zxvf hadoop-..tar.gz
           

将解壓完的 hadoop-2.8.1 檔案的所有者及所屬組改為 hadoop 使用者,并删除壓縮包

sudo chown -R hadoop:hadoop /data/hadoop-
sudo rm -rf hadoop-.tar.gz
           

3、配置hadoop環境

(1)修改配置檔案

sudo vi /etc/profile
           

在 JAVA_HOME 前面添加如下配置(Linux指令:G ->k(上移到 JAVA_HOME 那一行) -> o(字母小o) - > 輸入以下内容)

修改 PATH 條目為

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

(Linux指令:Esc鍵 - > 輸入“:wq”退出)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

(2)重新加載 /etc/profile,使配置生效

source /etc/profile
           

(3)檢查是否配置成功

hadoop
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

(4)修改 hadoop-env.sh 檔案

hadoop 環境是基于 JVM 環境的,故需在 hadoop-env.sh 配置檔案中指定 JDK 環境

sudo vi hadoop-./etc/hadoop/hadoop-env.sh
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

找到 JAVA_HOME 修改

(Linux 指令:L -> j(下移兩三行就能找到) -> I -> # -> Esc鍵 -> o (字母小o)-> 輸入)

export JAVA_HOME=/usr/local/jdk1._144
           

儲存退出(Linux 指令:Esc鍵 -> :wq!)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

(5)修改下列檔案

在Linux系統桌面上建立以下檔案,并修改相應内容(檔案内容與上面的建立的 /data 檔案夾有關)

1)core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
</property>
<property>
  <name>fs.default.name</name>
  <value>hdfs://master:9000</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/data/hdfs/tmp</value>
</property>
</configuration>
           

注意: hadoop.tmp.dir 的 value 填寫對應前面建立的目錄

2)hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
<name>dfs.replication</name>
  <value>2</value>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:/data/hdfs/name</value>
  <final>true</final>
</property>
<property>
<name>dfs.blocksize</name>
  <value>268435456</value>
</property>
<property>
  <name>dfs.namenode.handler.count</name>
  <value>100</value>
</property>
<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/data/hdfs/data</value>
  <final>true</final>
</property>
</configuration>
           

注意: dfs.namenode.name.dir 和 dfs.datanode.data.dir 的 value 填寫對應前面建立的目錄

3)mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
<property>
  <name>mapreduce.map.memory.mb</name>
  <value>1536</value>
</property>
<property>
  <name>mapreduce.map.java.opts</name>
  <value>-Xmx1024M</value>
</property>
<property>
  <name>mapreduce.reduce.memory.mb</name>
  <value>3072</value>
</property>
<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx2560M</value>
</property>
<property>
  <name>mapreduce.task.io.sort.mb</name>
  <value>512</value>
</property>
<property>
  <name>mapreduce.task.io.sort.factor</name>
  <value>100</value>
</property>
<property>
  <name>mapreduce.reduce.shuffle.parallelcopies</name>
  <value>50</value>
</property>
<property>
  <name>mapred.healthChecker.script.path</name>
  <value></value>
</property>
</configuration>
           

4)yarn-site.xml

<?xml version="1.0"?>

<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
   http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License. See accompanying LICENSE file.

-->

<configuration>
<!-- Site specific YARN configuration properties -->

<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</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:8031</value>
</property>
</configuration>
           

(6)替換掉 hadoop-2.8.1 檔案夾下的相應檔案

cd hadoop-/etc/hadoop/
sudo rm yarn-site.xml 
sudo rm hdfs-site.xml 
sudo rm core-site.xml 
sudo mv /home/hadoop/Desktop/yarn-site.xml  .
sudo mv /home/hadoop/Desktop/hdfs-site.xml .
sudo mv /home/hadoop/Desktop/core-site.xml .
sudo mv /home/hadoop/Desktop/mapred-site.xml .
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

(7)修改 slaves 檔案

sudo vi slaves
           

slave1
slave2
           

(Linux 指令:D -> i -> 輸入即可)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

儲存退出(Linux 指令:Esc鍵 -> :wq!)

(8)複制到 slave1 和 slave2 伺服器上

分别在 slave1 和 slave2 伺服器上執行以下語句

sudo scp -r hadoop@master:/data/hadoop-. /data
           

(9)删除 slave1 和 slave2 伺服器上的 slaves 檔案,并更改 /data 檔案夾的所有者及所屬組為 hadoop 使用者,分别在 slave1 和 slave2 伺服器上執行以下語句

sudo rm slaves
sudo chown -R hadoop:hadoop /data
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

4、運作Hadoop

除特殊說明外,隻在 master 上執行

(1)格式化NameNode

(超詳細)從零開始安裝與配置hadoop完全分布式環境
(超詳細)從零開始安裝與配置hadoop完全分布式環境

注意:這一步可能會出現問題,最好從頭到尾看一遍以确定格式化成功

(2)啟動HDFS檔案管理系統

這邊要保證三台伺服器上的hadoop-2.8.1檔案夾的所有者都是hadoop使用者

(sudo chown hadoop /data/hadoop-2.8.1)

(超詳細)從零開始安裝與配置hadoop完全分布式環境

可以照着 log 的儲存路徑檢視一下 log 日志,尤其是,如果出現了什麼錯誤,日志裡會寫的很清楚

(3)檢視啟動程序

在 master 上執行

jps
           

master伺服器:

(超詳細)從零開始安裝與配置hadoop完全分布式環境

ps:SecondaryNameNode 線程沒啟動起來的話有可能是因為 hadoop 使用者沒有對 /data/hdfs 及其下的子檔案夾的寫權限

slave1伺服器:

(超詳細)從零開始安裝與配置hadoop完全分布式環境

slave2伺服器:

(超詳細)從零開始安裝與配置hadoop完全分布式環境

缺任何一個都是有問題的

5、測試Hadoop

(1)檢視叢集狀态

(超詳細)從零開始安裝與配置hadoop完全分布式環境
(超詳細)從零開始安裝與配置hadoop完全分布式環境

(2)測試叢集

在master上建立個新檔案夾

hdfs dfs -mkdir /user
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

分别在三台伺服器上檢視剛建立的檔案夾是否成功

hdfs dfs -ls /
           

master伺服器:

(超詳細)從零開始安裝與配置hadoop完全分布式環境

slave1伺服器:

(超詳細)從零開始安裝與配置hadoop完全分布式環境

slave2伺服器:

(超詳細)從零開始安裝與配置hadoop完全分布式環境

(3)測試yarn

ip 是master 伺服器的 ip ,端口是在前面修改的檔案中指定的

(超詳細)從零開始安裝與配置hadoop完全分布式環境

(4)測試 mapreduce

Hadoop 安裝包裡有提供現成的 mapreduce 例子,在 Hadoop 的share/hadoop/mapreduce 目錄下。運作例子:

bin/hadoop jar /data/hadoop-/share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar pi  
           
(超詳細)從零開始安裝與配置hadoop完全分布式環境

截圖中是還沒運作完畢的代碼,如果電腦記憶體不是很大的話,他會在這裡卡很久,我的電腦是8G,虛拟機配置設定的記憶體是1.5G(配置設定2G的話電腦就會卡到動不了。。。)

(超詳細)從零開始安裝與配置hadoop完全分布式環境
(超詳細)從零開始安裝與配置hadoop完全分布式環境
(超詳細)從零開始安裝與配置hadoop完全分布式環境
(超詳細)從零開始安裝與配置hadoop完全分布式環境
(超詳細)從零開始安裝與配置hadoop完全分布式環境

運作了n遍都失敗之後,決定最後運作一遍,然後扔那運作我就幹别的去了。。。一個多小時之後回來發現。。。竟然成功了,失敗的原因是,電腦性能跟不上

然後重新整理剛才的網頁

(超詳細)從零開始安裝與配置hadoop完全分布式環境

(5)檢視HDFS

(超詳細)從零開始安裝與配置hadoop完全分布式環境

唔哈哈哈哈哈~~~好啦,大功告成了,差不多花了一周的時間,踩了無數個坑才完成,激動!!!

日後可能遇到的問題

1、namenode沒有啟動,每次開機都得重新格式化一下namenode才可以

參考答案:

http://blog.csdn.net/bychjzh/article/details/7830508

2、hadoop運作到mapreduce.job: Running job後停止運作

參考答案:

http://blog.csdn.net/zhangchaokun/article/details/49105037

繼續閱讀