1. 程式人生 > >分散式叢集安裝Hadoop

分散式叢集安裝Hadoop

準備從節點(Slave)

通過想一下步驟準備好一個新的機器作為從節點(Slave),新增入叢集:

系統要求

OS: Linux (Ubuntu preferable) Admin accounter: hadoopAdmin Hostname: hadoopNode01

安裝java7

$sudo apt-get install openjdk-7-jdk#
$java version #驗證是否成功

若錯誤提示不能定位安裝包,更新安裝源

$sudo apt-get update

若仍然提示不能定位安裝包,可能是Ubuntu版本太高,建議使用14.04,或者手動安裝。

建立使用者hadoopUser

先建立使用者組hadoopGroup,在該使用者組下建立使用者hadoopUser,用這個使用者安裝和執行Hadoop。

$sudo groupadd hadoopGroup
$sudo useradd -g hadoopGroup -m hadoopUser
$sudo passwd hadoopUser
$sudo chsh -s /bin/bash hadoopUser

建立檔案儲存目錄

先切換到hadoopAdmin,然後建立資料夾儲存Hadoop的臨時檔案

$su hadoopAdmin
$sudo mkdir -p /app/hadoop/tmp
$sudo mkdir -p /app/hadoop/data/datanode

這個節點是用於從節點,所以不需要namenode目錄。

修改檔案許可權

$sudo chown -R hadoopUser:hadoopGroup /app/hadoop/tmp
$sudo chmod -R 755 /app/hadoop

網路配置

需要虛擬機器之間可以互相訪問(ping),且能訪問外網。 本人對網路配置理解太少,只是通過以下方式實現了以上目的。 我使用的是VBox虛擬機器,網路設定如下: 啟用網絡卡1,選擇連線方式為網路地址轉換(NAT),其他採用預設設定

在這裡插入圖片描述

啟用網絡卡2,選擇連線方式為僅主機(Host-Only)網路,其他採用預設設定 在這裡插入圖片描述 檢視本機ip:

$ifconfig

將以下內容新增到/etc/hosts

<ip-address-master>	hadoopNode01
<ip-adress-current-node>	hadoopNode02

其中<ip-address-*>,用實際ip地址代替。 使用一下命令測試網路連線情況:

ping hadoopNode01

安裝SSH

$su hadoopAdmin
$sudo apt-get update
$sudo apt-get upgrade
$sudo apt-get install openssh-server
$su hadoopUser

設定SSH無密碼

當Hadoop啟動時,它會登入到所有的從節點來啟動Hadoop服務。您應該為所有的從節點啟用無密碼的SSH,否則機器將為每個SSH訪問提供一個密碼。使用以下命令來啟用無密碼SSH。按下回車鍵,以儲存金鑰以接受預設檔案。

ssh -keygen -t rsa -P ""
cat $HOME /.ssh/id_rsa.pub >> $HOME /.ssh/authorized_keys

啟動SSH

$su hadoopAdmin
$sudo service ssh start
$su hadoopUser
$ssh hadoopNode02

如果這是您第一次使用SSH,那麼機器將請求密碼。 輸入密碼後,它會提示您是否應該將公共RSA金鑰新增到$HOME/.ssh/已知主機,回答"yes"。

從Master節點複製Hadoop到Slaver節點

$su hadoopAdmin
$sudo rsync -a -progress [email protected]:/usr/local/hadoop  /usr/local/

按照以上步驟新增節點3

準備主節點(Master)

修改slaves檔案

在之前的偽分散式中節點1作為主節點又作為從節點,現在的分散式配置中節點1只需要做主節點,由節點2和節點3充當從節點。所以修改$HADOOP_HOME/conf/slaves檔案如下

hadoopNode02
hadoopNode03

修改hosts檔案

確保主從節點的ip地址都已經新增到hosts檔案如下

127.0.0.1			localhost
<ip-address>	hadoopNode01
<ip-address>	hadoopNode02
<ip-address>	hadoopNode03

確認主節點可以訪問從節點

$ping hadoopNode02
$ping hadoopNode03

確認hadoopUser可以SSH到從節點

$ssh [email protected]
$exit
$ssh [email protected]
$exit

以上命令需要輸入從節點的hadoopUser的密碼。

複製主節點SSH無密碼到從節點

$ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]

上面兩條命令會複製主節點SSH的公共密碼到從節點,會要求你輸入從節點的hadoopUser的密碼。

驗證無密碼登入

$ssh [email protected]
$exit
$ssh [email protected]
$exit

如果這一次不需要輸入密碼,說明上一步成功了。

清空之前安裝HDFS的內容

$rm -r /app/hadoop/tmp/*
$rm -r /app/hadoop/data/namenode/*
$rm -r /app/hadoop/data/datanode/*

初始化HDFS

$ hadoop namenode -format

如果出現以下報錯

ERROR namenode.NameNode: java.io.IOException: recyory /app/hadoop/data/namenode/current

說明檔案許可權有問題,切換到hadoopAdmin,修改檔案許可權

$su hadoopAdmin
$sudo chmon -R 777 /app/hadoop/data

啟動HDFS和MapReduce

$ start-dfs.sh
$ start-mapred.sh

檢視Hadoop執行情況

主從節點均執行以下命令

$jps

主節點輸出應該包含以下內容

NameNode
SecondaryNameNode
JobTracker

從節點輸出應該包含以下內容

TaskTracker
DataNode

檢驗

通過執行一個MapReduce任務,測試Hadoop的安裝。

下載案例

下載測試案例wordcount到 /tmp/gutenberg

$mkdir -p /tmp/gutenberg
$wget http://www.gutenberg.org/files/5000/5000-8.txt -p /tmp/gutenberg/

移動下載案例內容HDFS

$hadoop dfs -mkdir /user/hadoopUser/gutenberg
$hadoop dfs -copyFromLocal /tmp/gutenberg /5000 -8.txt /user/hadoopUser/gutenberg
$hadoop dfs -ls /user/hadoopUser/gutenberg

執行案例

$cd $HADOOP_HOME
$hadoop jar hadoop*examples*.jar wordcount /tmp/gutenberg /tmp/gutenberg-output

檢視輸出

$hadoop dfs -ls /user/hadoopUser/gutenberg -output

顯示以下內容表示執行正常

-rw -r--r-- /user/hadoopUser/gutenberg -output/_SUCCESS
drwxr -xr -x /user/hadoopUser/gutenberg -output/_logs
-rw -r--r-- /user/hadoopUser/gutenberg -output/part -r -00000

_SUCCESS是一個空檔案,表示成功執行任務。 _logs檔案包含任務的日誌 part-r-檔案包含wordcount任務的輸出

檢視輸出檔案

$hadoop dfs -cat /user/hadoopUser/gutenberg -output/part -r -00000

輸出如下兩列清單,第一列是單詞,第二列是計數

"(Lo)cra" 1
"1490 1
"1498,"1
"35" 1
"40," 1
"AS -IS". 1