1. 程式人生 > >(三)Linux下Hadoop2以上版本安裝配置

(三)Linux下Hadoop2以上版本安裝配置

Linux下Hadoop2以上版本安裝配置

對於初學者的我來說,不適用linux命令配置hadoop,所以用的是linux桌面,這是我還不容易配置成功的一次,趕快記錄下來:

  • 確認IP是否設定正常
  • 安裝 VM tools
  • 安裝hadoop
  • 配置環境變數
  • Hadoop配置檔案修改
  • 關閉防火牆
  • 格式化HDFS,生成namenode和datanode
  • 啟動HDFS和MapReduce
  • 遇到的問題彙總

確認IP是否設定正常

輸入 ifconfig,如果正常顯示ip說明一切正常。(這裡的IP跟前章設定的IP不一樣)
這裡寫圖片描述

安裝 VM tools

安裝vm tools 是為了可以將本機的hadoop壓縮包直接用CV大法就可以粘到虛擬機器的linux中。
1,選擇 虛擬機器 選單的 安裝虛擬機器tools。
這裡寫圖片描述

2,出現了一個視窗,選擇 使用檔案開啟。
這裡寫圖片描述

3,這時候自動跳出一個目錄,裡面有個壓縮包,將這個壓縮包拷到本地目錄。
這裡寫圖片描述

4,將拷到本地的vmware-tools-distib壓縮包解壓。
這裡寫圖片描述

5,找到 vmware-install.pl檔案,滑鼠右鍵,開啟linux終端,輸入
./vmware-install.pl後,點選回車。就開始安裝,之後就是回車,yes就行。然後重啟linux系統,就可以從本機複製檔案到虛擬機器中的linux系統中。(注意,要確定兩個設定,如下圖)
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

安裝hadoop

我用的是:hadoop-2.8.0.tar.gz 這個版本的。

(2)將下載的hadoop壓縮包,複製貼上到虛擬機器的linux中


放到了目錄:/usr/local 資料夾中,並且解壓,命名為hadoop資料夾。

這裡寫圖片描述

配置環境變數

(1)資料夾/ect中,有個profile檔案,點選右鍵,選擇編輯器,進行內容新增 :

由於我裝linux的時候,選上了裝jdk的選項,所以無需另外安裝jdk。
在最後加上:

export JAVA_HOME=/usr/lib/jvm/java-1.7.0
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

(2)資料夾/usr/local/hadoop/etc/hadoop中,有個mapred-env.sh和yarn-env.sh以及hadoop-env.sh檔案,點選右鍵,選擇編輯器,進行內容新增

 :

這兩個檔案,都加上:

export JAVA_HOME=/usr/lib/jvm/java-1.7.0

(3)執行 source /etc/profile 命令,生效環境變數 :

source /etc/profile

接著分別輸入,確認環境變數時候配置進去:

echo $JAVA_HOME

echo $HADOOP_HOME

echo $PATH

最後輸入,確認環境變數是否配置成功:

java -version

hadoop version

成功後,如圖顯示:
這裡寫圖片描述

Hadoop配置檔案修改

所有的配置檔案在目錄:
/usr/local/hadoop/ect/hadoop中。

core_site.xml修改 :

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.248.131:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>

hdfs_site.xml修改 :

<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/hdfs/data</value>
</property>
</configuration>

mapred_site.xml修改 :

<configuration>
<property>
<name>mapreduce.jobtracker.address</name>
<value>192.168.248.131:9001</value>
</property>
<property>
<name>mapreduce.cluster.local.dir</name>
<value>file:/usr/local/hadoop/temp/mapred/local</value>
</property>
<property>
<name>mapreduce.jobtracker.system.dir</name>
<value>file:/usr/local/hadoop/temp/mapred/system</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

yarn_site.xml 用於hadoop2.0以上版本修改 :

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
</configuration>

關閉防火牆

由於我用的是紅帽的Linux,所以如下:
1)立即關閉,並非永久關閉
service iptables stop
systemctl stop firewalld
2)永久關閉
iptables -F 關閉防火牆功能
chkconfig iptables off 禁止防火牆啟動
systemctl disable firewalld
3)檢視時候關閉成功
systemctl status firewalld

*另外,執行 setup 在介面,選擇Firewall configuration,進入下一介面,選擇 Security Level為Disabled,儲存。

配置SSH,實現無密碼登陸(由於是偽分散式部署,則需要配置SHH,獨立和分散式忽略)

1)確認是否已經安裝SSH,輸入 ssh localhost。如出現讓你輸入密碼的提示,說明成功安裝SSH。

這裡寫圖片描述

2) 執行 下方命令,建立RSA公鑰

ssh-keygen -t rsa

執行結果如下:

[[email protected] ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ab:ca:b1:c1:f3:ea:7e:6b:89:13:f4:58:e1:fc:44:cc [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|       o         |
|      . E        |
|     o o         |
|    . + .        |
|   . + oS        |
|   .o . ..       |
|    =o ..        |
|   .o*+.         |
|   oB*+.         |
+-----------------+

3)生成私鑰匙:

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

驗證是否成功可以輸入:ssh localhost
看是否提示需要輸入密碼,不提示,說明成功。

格式化HDFS,生成namenode和datanode.

hadfs namenode -format

如果執行失敗的話,刪除上面配置檔案指定namenode.dir和datanode.dir目錄中的檔案。再執行一次。

啟動HDFS和MapReduce

注意,下方的命令沒有空格。
啟動HDFS: start-dfs.sh
啟動MapReduce: start-yarn.sh

停止則是將 start 換成 stop。

遇到的問題彙總:

1) 50070無法開啟:
先確定防火牆是否成功關閉,如果防火牆關閉的話,確認你的配置檔案是否有些錯的地方。
確認檔案配置沒有問題後,確認本機上網是否用的代理(本人就坑在這裡,電腦上網用的代理,ping能ping通地址,不知道為啥就是位址列訪問,無法訪問,關閉代理,就成功了)。

可用:jps 命令,檢視是否成功生成namenode和datanode.

2)無法正常關閉HDFS和YARN:
由於Hadoop預設會把PID檔案放入/tmp目錄下,而該目錄每240小時就會自動清除,Hadoop無法找到PID檔案。
需要重新指定HDFS和YARN的PID檔案儲存位置。

hadoop-env.sh檔案開頭加入

export HADOOP_PID_DIR=/usr/local/hadoop/pids

yarn-env.sh檔案開頭加入

export HADOOP_PID_DIR=/usr/local/hadoop/pids

重啟hadoop,可以看到指定的目錄下生成了PID。

2)重新 format namenode以後,啟動hadoop,輸入jps,datanode沒有啟動解決:
刪除hadoop存放namenode和datanode的tmp資料夾,這個是上面配置檔案中,自己指定的路徑。(這是很野蠻的解決方式,試試自己玩玩用,因為真正的專案,你刪了,專案就沒啦)
由於format namenode以後,namenode的namenodeID變化,與datanode中的namenodeID不一致,修改Datanode上的namenodeID(位於/dfs/data/current/VERSION檔案中)或修改NameNode的namespaceID(位於/dfs/name/current/VERSION檔案中),使其一致。