Hadoop單機版安裝

CoderSunYu發表於2018-09-04

一、環境

1、伺服器

  • CentOS Linux release 7.4.1708 (Core)
  • CPU:4核
  • 硬碟:80G
  • ip:X.X.X.X

2、安裝包

JDK安裝包 Hadoop安裝包

二、伺服器相關配置

1、更改主機名(可選)

修改主機名主要為了方便管理。

# 輸入檢視主機名
hostname
# 輸入修改主機名:
vim /etc/sysconfig/network
HOSTNAME=test1
複製程式碼

注:主機名稱更改之後,要重啟(reboot)才會生效。

# 新增 主機IP 和對應的主機名稱,做對映。
vim /etc/hosts
複製程式碼

Hadoop單機版安裝
注:在配置檔案中使用主機名的話,這個對映必須做!

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
複製程式碼

Hadoop單機版安裝

# 使配置生效
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. 方式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
複製程式碼

問題就解決了。

  1. 方式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

相關文章