一、環境
1、伺服器
- CentOS Linux release 7.4.1708 (Core)
- CPU:4核
- 硬碟:80G
- ip:X.X.X.X
2、安裝包
二、伺服器相關配置
1、更改主機名(可選)
修改主機名主要為了方便管理。
# 輸入檢視主機名
hostname
# 輸入修改主機名:
vim /etc/sysconfig/network
HOSTNAME=test1
複製程式碼
注:主機名稱更改之後,要重啟(reboot)才會生效。
# 新增 主機IP 和對應的主機名稱,做對映。
vim /etc/hosts
複製程式碼
注:在配置檔案中使用主機名的話,這個對映必須做!
2、關閉防火牆
關閉防火牆,方便外部訪問。
# CentOS 7版本以下輸入:
service iptables stop
# CentOS 7 以上的版本輸入:
systemctl stop firewalld.service
複製程式碼
3、時間設定
# 檢視當前時間
date
# 檢視伺服器時間是否一致,若不一致則更改
# 更改時間命令
date -s 'MMDDhhmmYYYY.ss'
複製程式碼
三、Hadoop環境安裝
1、下載安裝
將下載下來的jdk、Hadoop安裝包解壓到home目錄下,並新建資料夾java、hadoop
# 輸入:
tar -xvf jdk-8u144-linux-x64.tar.gz -C /home/java
tar -xvf hadoop-2.8.2.tar.gz -C /home/hadoop
複製程式碼
解壓jdk和hadoop ,分別移動檔案到java和hadoop檔案下, 並將資料夾重新命名為jdk1.8和hadoop2.8
2、JDK環境配置
# 首先檢視是否已經安裝,如果版本不合適,就解除安裝
java -version
複製程式碼
3.2.1 profile 檔案更改
# 編輯 /etc/profile 檔案
vim /etc/profile
# 新增內容
export JAVA_HOME=/home/java/jdk1.8
export JRE_HOME=/home/java/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
# :wq 儲存退出後,使配置生效
source /etc/profile
複製程式碼
3、Hadoop環境配置
3.3.1 編輯 /etc/profile 檔案
vim /etc/profile
# 新增內容
export HADOOP_HOME=/home/hadoop/hadoop2.8
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH
複製程式碼
# 使配置生效
source /etc/profile
複製程式碼
3.3.2 新建資料夾
在修改配置檔案之前,先在root目錄下建立一些資料夾。
mkdir /root/hadoop
mkdir /root/hadoop/tmp
mkdir /root/hadoop/var
mkdir /root/hadoop/dfs
mkdir /root/hadoop/dfs/name
mkdir /root/hadoop/dfs/data
複製程式碼
注:在root目錄下新建資料夾是防止被莫名的刪除。
3.3.3 修改core-site.xml
切換到 /home/hadoop/hadoop2.8/etc/hadoop/ 目錄下
vim core-site.xml
# 在<configuration>節點內新增
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://test1:9000</value>
</property>
複製程式碼
說明: test1 是主機名,可以替換為主機的ip。
3.3.4 修改 hadoop-env.sh
vim hadoop-env.sh
複製程式碼
將${JAVA_HOME} 修改為自己的JDK路徑
export JAVA_HOME=${JAVA_HOME}
複製程式碼
修改為:
export JAVA_HOME=/home/java/jdk1.8
複製程式碼
3.4.5 修改 hdfs-site.xml
vim hdfs-site.xml
# 在<configuration>節點內新增
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/dfs/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>need not permissions</description>
</property>
複製程式碼
說明:dfs.permissions配置為false後,可以允許不要檢查許可權就生成dfs上的檔案,方便倒是方便了,但是你需要防止誤刪除,請將它設定為true,或者直接將該property節點刪除,因為預設就是true。
3.4.6 修改mapred-site.xml
如果沒有 mapred-site.xml 該檔案,就複製mapred-site.xml.template檔案並重新命名為mapred-site.xml。 輸入:
vim mapred-site.xml
複製程式碼
修改這個新建的mapred-site.xml檔案,在節點內加入配置:
<property>
<name>mapred.job.tracker</name>
<value>test1:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
複製程式碼
四、啟動Hadoop
第一次啟動Hadoop需要初始化
hadoop namenode -format
複製程式碼
初始化成功後,可以在/root/hadoop/dfs/name 目錄下(該路徑在hdfs-site.xml檔案中進行了相應配置,並新建了該資料夾)新增了一個current 目錄以及一些檔案。
啟動Hadoop 主要是啟動HDFS和YARN
切換到/home/hadoop/hadoop2.8/sbin目錄
啟動HDFS
start-dfs.sh
複製程式碼
登入會詢問是否連線,輸入yes ,然後輸入密碼就可以了
啟動YARN
start-yarn.sh
複製程式碼
可以輸入 jps 檢視是否成功啟動
啟動成功後,可以在瀏覽器輸入以下地址檢視
http://X.X.X.X:8088/cluster 檢視任務狀況
http://X.X.X.X:50070 檢視HDFS叢集狀況
五、遇到的錯誤及解決方案
1、HDFS格式化後啟動dfs出現以下錯誤:
[root@master sbin] ./start-dfs.sh
Starting namenodes on [master]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [slave1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
複製程式碼
解決方案
在/hadoop/sbin路徑下
將 start-dfs.sh,stop-dfs.sh兩個檔案頂部新增以下引數
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
複製程式碼
將 start-yarn.sh,stop-yarn.sh頂部新增以下
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
複製程式碼
修改後重啟 ./start-dfs.sh
2、Hadoop出現錯誤:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
其中有個warn資訊,在這個資訊附近找到一個:Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError,這表明是java.library.path出了問題,
解決方案是在檔案hadoop-env.sh中增加:
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
複製程式碼
3、hadoop無法訪問50070埠
hdfs-site.xml 新增如下內容,然後重新格式化namenode,啟動hadoop。最終訪問正常
<property>
<name>dfs.http.address</name>
<value>test1:50070</value>
</property>
複製程式碼
4、DataNode無法啟動
以下提供兩種解決辦法:
- 方式1
刪除前先關閉程式
[hadoop@zydatahadoop001 sbin]$ jps
26884 Jps
26043 SecondaryNameNode
25756 NameNode
[hadoop@zydatahadoop001 sbin]$ kill -9 26043
[hadoop@zydatahadoop001 sbin]$ kill -9 25756
複製程式碼
刪除 /tmp/hadoop-hadoop/dfs/data/data目錄下的檔案
[hadoop@zydatahadoop001 ~]$ cd /tmp/hadoop-hadoop/dfs/data/
[hadoop@zydatahadoop001 data]$ ll
total 8
drwxrwxr-x. 3 hadoop hadoop 4096 Dec 19 00:33 current
-rw-rw-r--. 1 hadoop hadoop 21 Dec 19 00:33 in_use.lock
[hadoop@zydatahadoop001 data]$ rm -rf current
複製程式碼
這時候在進行格式化
[hadoop@zydatahadoop001 bin]$ hdfs namenode -format
複製程式碼
問題就解決了。
- 方式2
修改current目錄的VERSION中的clusterID使兩個的clusterID相同,就可以解決了(/tmp/hadoop-hadoop/dfs/data/)
[hadoop@zydatahadoop001 ~]$ cd /tmp/hadoop-hadoop/dfs/data/
[hadoop@zydatahadoop001 data]$ ll
total 8
drwxrwxr-x. 3 hadoop hadoop 4096 Dec 19 00:33 current
-rw-rw-r--. 1 hadoop hadoop 21 Dec 19 00:33 in_use.lock
[hadoop@zydatahadoop001 current]$ cat VERSION
#Tue Dec 19 00:33:48 CST 2017
storageID=DS-d9b740ba-fe83-44ec-b3d2-e21da706a597
clusterID=CID-2544b3e3-8400-47a6-a253-63dffc356e47
cTime=0
datanodeUuid=79d78c7d-cd1b-4854-89df-c063ce5fba86
storageType=DATA_NODE
layoutVersion=-57
複製程式碼
這時候在進行格式化
[hadoop@zydatahadoop001 bin]$ hdfs namenode -format
複製程式碼
格式化之後jps檢視datanode啟動。問題就解決了。
五、啟動dfs時報錯 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
# 首先確認是否已經有ssh-keygen,如果沒有執行下面命令生成祕鑰
ssh-keygen -t rsa # 會有提示,都按回車就可以
複製程式碼
cat id_rsa.pub >> authorized_keys # 加入授權
chmod 600 ./authorized_keys # 修改檔案許可權
複製程式碼
然後在啟動dfs就可以了
文章主要摘自: blog.csdn.net/qazwsxpcm