華為雲伺服器安裝hadoop2.7.5

Ye發表於2020-08-30

1. 安裝環境

1.1硬體環境

1.1.1 NameNode

配置項 詳細引數
主機 k8s-master
CPU Intel(R) Xeon(R) Gold 6278C CPU @ 2.60GHz 2核
記憶體 4G
硬碟 40G

1.1.2 DataNode

配置項 詳細引數
主機 k8s-slave1
CPU Intel(R) Xeon(R) Gold 6278C CPU @ 2.60GHz 2核
記憶體 4G
硬碟 40G

1.2 軟體環境

配置項 詳細引數
作業系統 centos 7.7
jdk 8
hadoop 2.7.5

2. 安裝步驟

2.1 安裝前準備

2.1.1 配置主機名

2.1.1.1 修改主機名

[root@root ~]# hostnamectl set-hostname k8s-master
[root@root ~]# more /etc/hostname
k8s-master

reboot伺服器會顯示新設定的主機名k8s-master,在另外一臺伺服器做同樣的操作。

2.1.1.2 修改hosts檔案 (注意:雲伺服器中,只有一塊內網網路卡。外網地址不是直接配置在雲伺服器中,程式無法繫結公網IP地址。因此伺服器本身要改為"內網IP+主機名"。不然在可能會在NameNode啟動時報錯:Cannot assign requested address)

[root@k8s-master ~]# cat >> /etc/hosts << EOF
xxx.xxx.xxx.xxx k8s-master
xxx.xxx.xxx.xxx k8s-slave1
EOF

2.1.1.3 免密登入

配置k8s-master到k8s-slave1之間免密登入

  1. 建立祕鑰
[k8s-master ~]# ssh-keygen -t rsa
  1. k8s-master同步祕鑰到k8s-slave1,主機名免密也要同步
[k8s-master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@xxx.xxx.xxx.xxx
  1. 免密登入測試
[k8s-master ~]# ssh xxx.xxx.xxx.xxx
[k8s-master ~]# ssh k8s-slave1

2.1.1.4 禁用selinux

各節點都要執行禁用selinux操作

# 臨時禁用selinux
[root@k8s-master ~]# setenforce 0
# 永久禁用selinux
[root@k8s-master ~]# vim /etc/selinux/config
SELINUX=disabled

2.1.1.5 關閉防火牆

各節點上執行關閉防火牆操作

[k8s-master ~]# systemctl stop firewalld
[k8s-master ~]# systemctl disable firewalld

3. 安裝hadoop

我通常在安裝完NameNode後直接把配置目錄都會傳送到其他機器上同步一份,不需要所有機器都手動配置一次,這樣可以提高效率。PS:以下操作都是在root使用者下操作。

3.1 下載地址

hadoop的官方網站:http://hadoop.apache.org/

hadoop 2.7.5版本對應的下載地址: http://archive.apache.org/dist/hadoop/core/hadoop-2.7.5/

3.2 解壓安裝包

[root@k8s-master ~]# cd /opt/
# 下載安裝包
[root@k8s-master opt]# wget http://archive.apache.org/dist/hadoop/core/hadoop-2.7.5/hadoop-2.7.5.tar.gz
[root@k8s-master opt]# tar -zxf hadoop-2.7.5.tar.gz
# 做軟連結
[root@k8s-master opt]# ln -s hadoop-2.7.5 hadoop

3.3 修改hadoop-env.sh配置檔案

3.3.1 配置java的jdk

[root@k8s-master ~]# vim /opt/hadoop/etc/hadoop/hadoop-env.sh
#找到"export JAVA_HOME"這行,用來配置jdk路徑
# The java implementation to use.
export JAVA_HOME=/opt/jdk1.8.0_161/

3.3.2 配置核心元件

3.3.2.1 core-site.xml(在NameNode節點上操作)

[root@k8s-master ~]# vim /opt/hadoop/etc/hadoop/core-site.xml
# 在<configuration>和</configuration>之間加入的程式碼,我的主機名是k8s-master
<property>
		<name>fs.defaultFS</name>
		<value>hdfs://k8s-master:9000</value>
	</property>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/hadoop/hadoopdata</value>
</property>

3.3.3 配置檔案系統

3.3.3.1 hdfs-site.xml(在NameNode節點上操作)

[root@k8s-master ~]# vim /opt/hadoop/etc/hadoop/hdfs-site.xml
# 需要在<configuration>和</configuration>之間加入的程式碼
<property>
		<name>dfs.replication</name>
		<value>1</value>
</property>

3.3.4 配置MapReduce計算框架檔案(在NameNode節點上操作)

[root@k8s-master ~]# cp /opt/hadoop/etc/hadoop/mapred-site.xml.template /opt/hadoop/etc/hadoop/mapred-site.xml
[root@k8s-master ~]# vim /opt/hadoop/etc/hadoop/mapred-site.xml
# 需要在<configuration>和</configuration>之間加入的程式碼
<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
</property>

3.3.5 配置資源排程管理器

3.3.5.1 配置yarn-site.xml

[root@k8s-master ~]# vim /opt/hadoop/etc/hadoop/yarn-site.xml
# 需要在<configuration>和</configuration>之間加入的程式碼,我的主機名是k8s-master
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.resourcemanager.address</name>
	<value>k8s-master:18040</value>
</property>
<property>
	<name>yarn.resourcemanager.scheduler.address</name>
	<value>k8s-master:18030</value>
</property>
<property>
	<name>yarn.resourcemanager.resource-tracker.address</name>
	<value>k8s-master:18025</value>
</property>
<property>
	<name>yarn.resourcemanager.admin.address</name>
	<value>k8s-master:18141</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>k8s-master:18088</value>
</property>

3.3.5.2 修改yarn-env.sh檔案

[root@k8s-master ~]# vim /opt/hadoop/etc/hadoop/hadoop-env.sh
#找到"export JAVA_HOME"這行,用來配置jdk路徑
# some Java parameters
 export JAVA_HOME=/opt/jdk1.8.0_161/

3.3.6 修改slaves配置檔案

該slaves檔案是給出了hadoop叢集中的slave列表,系統總是根據當前slaves檔案中的slave節點列表啟動hadoop叢集,不在列表中的slave節點便不會被視為計算節點。

[root@k8s-master ~]# vim /opt/hadoop/etc/hadoop/slaves
# 需要在slaves檔案中新增以下主機名(PS: 刪掉localhost那一行)
k8s-slave1

3.3.7 將配置檔案傳送到DataNode節點上

[root@k8s-master ~]# scp -r /opt/hadoop root@k8s-slave1:/opt

4. 啟動hadoop

4.1 啟動前準備,配置作業系統環境變數(所有節點都要操作)

[root@k8s-master ~]# vim /root/.bash_profile
# 新增以下內容
# hadoop
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

[root@k8s-master ~]# source ~/.bash_profile

4.2 建立hadoop資料目錄(只在master節點上操作)

[root@k8s-master ~]# mkdir -p /opt/hadoop/hadoopdata

4.3 格式化檔案系統(只在master上操作)

[root@k8s-master ~]# cd /opt/hadoop/bin
[root@k8s-master ~]# ./hdfs namenode -format

4.4 啟動和關閉叢集(只在master節點上操作)

4.4.1 啟動hadoop叢集

[root@k8s-master ~]# cd /opt/hadoop/sbin
[root@k8s-master ~]# sh start-all.sh 

PS: 執行命令後,系統提示 ” Are you sure want to continue connecting(yes/no)”,輸入yes,之後系統即可啟動。執行過程可能會有些慢,千萬不要以為卡掉了,然後強制關機,這是錯誤的。

4.4.2 關閉hadoop叢集

[root@k8s-master ~]# cd /opt/hadoop/sbin
[root@k8s-master ~]# sh stop-all.sh

PS: 下次啟動Hadoop時,無須NameNode的初始化,只需要使用start-dfs.sh命令即可,然後接著使用start-yarn.sh啟動Yarn。實際上,Hadoop建議放棄(deprecated)使用start-all.sh和stop-all.sh一類的命令,而改用啟動start-dfs.sh和start-yarn.sh命令

4.4.3 驗證hadoop叢集是否正常啟動

1) 在NameNode上執行:(如果看到NameNode、ResourceManager、SecondaryNameNode,說明程式啟動正常)

[root@k8s-master ~]# jps
14689 NameNode
15042 ResourceManager
14882 SecondaryNameNode
4309 Jps
1037 WrapperSimpleApp

2) 在DataNode上執行:(如果看到NodeManager、DataNode,說明程式啟動正常)

[root@k8s-slave1 ~]# jps
19794 NodeManager
19636 DataNode
14251 Jps
1279 WrapperSimpleApp

5. 遇到的問題

5.1 hadoop啟動之後datanode程式在,但50070頁面Live Nodes為0,且看不到DataNode的所有資訊,日誌提示如下:

2020-08-28 22:06:45,427 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: localhost/127.0.0.1:9000
2020-08-28 22:06:51,428 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)

問題定位:

1) /etc/hosts 中的ip對映不對
2) master與slave之間不能互通
3) hadoop配置檔案有錯

我這裡是由於/etc/hosts裡面配置的ip和hosts的對映有誤,原來配置的外網ip,改成內網ip對映主機名即可。

相關文章