溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hadoop的安裝和配置方法

發(fā)布時間:2021-07-09 18:18:24 來源:億速云 閱讀:293 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Hadoop的安裝和配置方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

相關(guān)軟件下載:微云網(wǎng)盤鏈接:https://share.weiyun.com/5uIOSHe 密碼:osmzbn

JDK 8 : https://jdk.java.net/java-se-ri/8-MR3

Hadoop 3.2.1 : https://hadoop.apache.org/releases.html

如果還沒有安裝和設(shè)置虛擬機,參考上一篇文章 Ubuntu 安裝和配置,這里默認(rèn)服務(wù)器用戶名為 hadoop,機器名稱為 master,且把 master 的 IP 寫入了 hosts 文件和配置 SSH 免密登錄。這將介紹 Hadoop 的兩種安裝方式,并簡單使用和操作 MapReduce 和 HDFS。

主要內(nèi)容:

  • Hadoop 偽分布安裝

  • Hadoop 集群安裝

  • 動態(tài)增加、刪除節(jié)點

1、必要軟件的安裝

Hadoop 3 最低支持 Java 8,這里使用 Oracle 的 OpenJDK 8,可以提取下載好放到共享文件夾。

# 解壓和創(chuàng)建鏈接文件
sudo tar -xvf openjdk-XXX_XXX.tar.gz  /user/local
sudo ln -s /user/local/openjdk-XXX_XXX  /user/local/openjdk-1.8
# 將 JAVA_HOME 添加到環(huán)境變量
sudo vim /etc/profile
# 添加如下內(nèi)容
export JAVA_HOME=/user/local/openjdk-1.8
export PATH=$JAVA_HOME/bin:$PATH
# 測試
java -version
java version "1.8.0_XXX"
# 安裝 SSH pdsh
sudo apt install ssh
sudo apt install pdsh

Hadoop 支持如下三種模式安裝:

  • 本地獨立模式

  • 單節(jié)點模式

  • 集群模式

支持平臺: 推薦 GNU/Linux,對于 Windows 平臺這里不做介紹

2、偽分布式安裝

2.1、下載和解壓 Hadoop

tar -xvf ./hadoop-3.X.X.tar.gz
ln -s ./hadoop-3.X.X.tar.gz ./hadoop
# 設(shè)置 Hadoop 安裝目錄添加 PATH
vim .bashrc
# 在文件后面添加如下內(nèi)容
export HADOOP_HOME=/home/hadoop/hadoop
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop
# PDSH_RCMD_TYPE 解決 pdsh@master: master: ssh exited with exit code 1
export PDSH_RCMD_TYPE=ssh
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

設(shè)置 Hadoop 的 Java Home 等參數(shù)

vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
# 找到 export JAVA_HOME 的位置,去掉注釋修改為 JAVA_HOME 路徑
# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/user/local/openjdk-1.8
# 可選修改 Hadoop Home  HADOOP_CONF_DIR
export HADOOP_HOME=/home/hadoop/hadoop
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
# 可選 JVM Heap 堆,相當(dāng)于 -Xms512m -Xmx1024m
export HADOOP_HEAPSIZE_MAX=1024m
export HADOOP_HEAPSIZE_MIN=512m

查看 hadoop 命令

hadoop version
# 會看到如下輸出
Hadoop 3.X.X

本地獨立模式

在默認(rèn)情況下,Hadoop 被配置為非分布式模式作為單個 Java 進程運行,這對調(diào)試非常有用。

cd $HADOOP_HOME
mkdir input
cp etc/hadoop/*.xml input
# 正則表達式匹配所有 XML 文件中的單詞
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
cat output/*
# 可以看到如下輸出
1       dfsadmin

2.2、偽分布模式

首先需要配置好默認(rèn)的 SSH 免密登錄,如果已經(jīng)配置則跳過:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
# 測試 
ssh localhost

在下面的命令中,默認(rèn)切換到 hadoop 安裝目錄cd $HADOOP_HOME

對于 vim 不熟悉可以使用 Visual Studio Remote 連接到 master 服務(wù)器,然后打開 Hadoop 的配置目錄。參考 https://code.visualstudio.com/docs/remote/wsl

文件 vim etc/hadoop/core-site.xml,將內(nèi)容修改成如下

<configuration>
    <property>
        <!-- NameNode URI -->
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

文件 vim etc/hadoop/hdfs-site.xml ,修改內(nèi)容如下

<configuration>
    <property>
        <!-- 數(shù)據(jù)塊復(fù)制的份數(shù)-->
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

運行

# 格式文件系統(tǒng)
bin/hdfs namenode -format
# 運行 DataNode 和 NameNode
sbin/start-dfs.sh
# 可以看到如下的輸出
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [master]

通過瀏覽器訪問 http://master:9870/ ,master 替換為 Ubuntu 所在的 IP 或者寫入主系統(tǒng)的 hosts.

測試

# 創(chuàng)建 HDFS 的目錄,hadoop 是你的用戶名 <username> 此相當(dāng)于 Linux 的個人主目錄
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop
# 在 HDFS 的 /user/hadoop 下創(chuàng)建
bin/hdfs dfs -mkdir input
# 將文件上傳到 HDFS
bin/hdfs dfs -put etc/hadoop/*.xml input
# 運行 Hadoop 的示例程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
# 將運行結(jié)果拿到本地
bin/hdfs dfs -get output output
cat output/* # 或者直接在 HDFS 看 : bin/hdfs dfs -cat output/*
#同樣可以看到如下的輸出 跟本地獨立模式不一樣原因是修改了 hdfs-site.xml
1       dfsadmin
1       dfs.replication

2.3、單節(jié)點的 Yarn

文件配置:etc/hadoop/mapred-site.xml

<configuration>
    <property>
        <!--使用 Yarn -->
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <!-- 添加 class path,需要設(shè)置 HADOOP_MAPRED_HOME -->
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>

文件 etc/hadoop/yarn-site.xml

<configuration>
    <property>
        <!-- reducer 附屬服務(wù)是 mapreduce_shuffle 才可運行MapReduce程序 -->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 以下加不加都可以的,環(huán)境變量白名單 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

查看運行著什么服務(wù)的命令是 jps ,可以將此時的 Hadoop 安裝配置目錄復(fù)制一份作為本地獨立模式或偽分布模式的配置備份。

關(guān)閉 hdfs 和 Yarn

sbin/stop-yarn.sh
sbin/stop-dfs.sh

3、集群設(shè)置

這里采用兩臺 VM 虛擬機(master、worker1)搭建,worker2 是用于下一小節(jié),將新的節(jié)點添加到 Hadoop 集群的,理論上可以支持上千臺的集群。

關(guān)閉 hdfs 和 Yarn 后關(guān)閉當(dāng)前的虛擬機,將虛擬機拷貝兩份,命名為 worker1、worker2,一臺一臺的設(shè)置,因為先前的跟 master IP 地址一樣會沖突,參考 Ubuntu Server 安裝與設(shè)置 配置本地 IP 地址(例如 192.168.128.11、192.168.128.12),設(shè)置 hostname 為 worker1 、worker2,然后關(guān)機。

啟動 master、worker1 的虛擬機,登錄 master,配置各個節(jié)點的 hosts sudo vim /etc/hosts

# 各個節(jié)點的配置,替換為虛擬機實際的 ip
192.168.128.10  master
192.168.128.11  worker1
192.168.128.12  worker2
# 保存后通如下命令分發(fā)到 worker1、worker2等,需要啟用 root 登錄權(quán)限
scp /etc/hosts root@worker1:/etc/hosts
# 檢查不同主機間是否可以免密登錄
# 分別在 master、worker1 等嘗試 ssh username@master、ssh username@worker1
ssh hadoop@worker1

3.1、Hadoop 常用的配置

常用的配置文件

文件格式描述
hadoop-env.shbash腳本Hadoop 運行的環(huán)境變量,會覆蓋系統(tǒng)的設(shè)置
mapred-env.shbash腳本MapReduce 運行用到的環(huán)境變量,會覆蓋 hadoop-env.sh
yarn-env.shbash腳本Yarn 運行用到的環(huán)境變量,會覆蓋 mapred-env.sh
core-site.xmlxml配置Hadoop Core 配置,配置 HDFS、MapReduce、Yarn 常用的 IO 設(shè)置
hdfs-site.xmlxml配置HDFS 配置,namenode、datanode、secondary namenode等
mapred-site.xmlxml配置MapReduce 守護進程配置,如 jobhistoryserver
yarn-site.xmlxml配置Yarn 守護進程配置,如 ResourceManger、NodeManager、Web 應(yīng)用代理服務(wù)等
workers純文本運行 datanode 的節(jié)點的機器,一行一個( hadoop 的名稱是 slaves)
log4j.propertiesJava屬性日志配置文件

環(huán)境變量

Hadoop 的環(huán)境變量通過 bash 腳本 設(shè)置。例如可以設(shè)置 JAVA_HOME,JVM 內(nèi)存堆大小、日志存放目錄等

  • JAVA_HOME : 必須指定,推薦使用 hadoop-env.sh 的方式,保證集群使用相同版本的 JDK

  • HADOOP_HEAPSIZE_MAX :最大 JVM 內(nèi)存堆

  • HADOOP_HEAPSIZE_MIN:最小 JVM 內(nèi)存堆

  • HADOOP_LOG_DIR: 日志存放目錄

  • HADOOP_HOME: Hadoop 的根目錄

  • HADOOP_MAPRED_HOME: MapReduce 的主目錄

3.1.2、Hadoop 配置

文件etc/hadoop/core-site.xml

<configuration>
  <property>
    <!-- URI 定義主機名稱和 namenode 的 RPC 服務(wù)器工作的端口號 -->
    <!-- 運行 HDFS 需要指定一臺機器為 namenode -->
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>
  <property>
    <!-- Hadoop 臨時目錄,默認(rèn)是系統(tǒng)的臨時目錄下,/tmp/hadoop-${username} 下 -->
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/cluster</value>
  </property>
</configuration>

對于設(shè)置的臨時目錄等,需要確保運行 Hadoop 集群的用戶有寫入和讀取的權(quán)限,這里使用用戶主目錄下的 cluster 文件夾,相關(guān)的目錄不建議存放到 Hadoop 的安裝目錄下。

文件 etc/hadoop/hdfs-site.xml

<configuration>
  <property>
    <!-- DFS 拷貝的數(shù)量,根據(jù) DataNode 的數(shù)量和實際情況設(shè)置,這里只有一個 worker -->
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <!-- 以下三個值默認(rèn)在 Hadoop 臨時目錄 hadoop.tmp.dir 的 dfs 文件夾下 -->
  <property>
    <!-- namenode 存儲永久元數(shù)據(jù)的目錄,多個 value 用英文逗號 , 隔開 -->
    <!-- 支持 NFS 掛載的遠程磁盤目錄 TODO:試試 -->
    <name>dfs.namenode.name.dir</name>
    <value>/home/hadoop/cluster/dfs/name</value>
  </property>
  <property>
    <!-- datanode 存儲數(shù)據(jù)塊的目錄,多個 value 用英文逗號 , 隔開 -->
    <name>dfs.datanode.name.dir</name>
    <value>/home/hadoop/cluster/dfs/data</value>
  </property>
  <property>
    <!-- Secondary Namenode 存儲檢查點的目錄列表,多個 value 用英文逗號 , 隔開 -->
    <name>dfs.datanode.name.dir</name>
    <value>/home/hadoop/cluster/dfs/namesecondary</value>
  </property>
</configuration>

文件etc/hadoop/yarn-site.xml

<configuration>   
    <property>
        <!-- reducer 附屬服務(wù)是 mapreduce_shuffle 才可運行MapReduce程序 -->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
         <!-- 環(huán)境變量白名單 TODO: 驗證是否由于多個集群的環(huán)境變量不一致的時候,需要加上環(huán)境變量白名單 -->
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    
</configuration>

文件 etc/hadoop/mapred-site.xml

<configuration>
    <property>
        <!--使用 Yarn -->
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <!-- 添加 class path,需要設(shè)置 HADOOP_MAPRED_HOME -->
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>

文件workers,設(shè)置運行 datanode 的主機,一行一個主機名

worker1

3.2、運行 Hadoop

將 Hadoop 復(fù)制到 worker1 。

# 復(fù)制 .bashrc 的一些環(huán)境變量,可選
scp ~/.bashrc hadoop@worker1:~/.bashrc
# 將 Hadoop 安裝目錄復(fù)制到 worker1,
scp -r ~/hadoop  hadoop@worker1:~/hadoop

格式化 HDFS

# master 主機運行,只需要運行一次,第二次運行會報錯
hdfs namenode -format <集群名稱>

開啟 namenode、datanode

# master 運行
hdfs --daemon start namenode
# master 和每個 worker 分別運行
hdfs --daemon start datanode
# 配置好 ssh 免密登錄后,只需要在 master 運行,等同于上面的兩個命令(二選一)
start-dfs.sh

使用 jps 命令查看是否運行成功

master 運行的服務(wù):

8436 ResourceManager
8200 SecondaryNameNode
11275 Jps
10684 NameNode

worker1 運行的服務(wù):

5267 Jps
4966 DataNode
5143 NodeManager

通過瀏覽器訪問 http://master:9870/dfshealth.html 可以看到有一個 datanode。(嘻嘻,截錯圖了)

Hadoop的安裝和配置方法

啟動 Yarn:

# 在 ResourceManager 運行如下命令,我們這里設(shè)置為 master
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
# 腳本,等同于上面兩個個命令(二選一)
start-yarn.sh

使用瀏覽器訪問 http://master:8088/cluster

Hadoop的安裝和配置方法

啟動 JobHistory Server

記錄已經(jīng)運行完的 MapReduce 作業(yè)放到 HDFS 目錄,默認(rèn)配置已經(jīng)夠用了,所以上面沒有配置

# master 下運行
mapred --daemon start historyserver

瀏覽器訪問 http://master:19888/jobhistory

Hadoop的安裝和配置方法

master 運行 start-all.sh 則會根據(jù)配置文件開啟所有節(jié)點及其所配置的服務(wù)。

測試

# 創(chuàng)建 HDFS 的目錄,hadoop 是你的用戶名 <username> 此相當(dāng)于 Linux 的個人主目錄
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop
# 在 HDFS 的 /user/hadoop 下創(chuàng)建
bin/hdfs dfs -mkdir input
# 將文件上傳到 HDFS
bin/hdfs dfs -put etc/hadoop/*.xml input
# 運行 Hadoop 的示例程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
# 將運行結(jié)果拿到本地
bin/hdfs dfs -get output output
cat output/* # 或者直接在 HDFS 看 : bin/hdfs dfs -cat output/*
1       dfsadmin
1       dfs.replication

3.3、關(guān)閉 Hadoop

關(guān)閉 namenode、datanode

# master 運行
hdfs --daemon stop namenode
# master 和每個 worker 分別運行
hdfs --daemon stop datanode
# 配置好 ssh 免密登錄后,只需要在 master 運行,等同于上面的兩個命令(二選一)
stop-dfs.sh

關(guān)閉 Yarn:

# 在 ResourceManager 運行如下命令,我們這里設(shè)置為 master
yarn --daemon stop resourcemanager
yarn --daemon stop nodemanager
# 腳本,等同于上面兩個個命令(二選一)
stop-yarn.sh

關(guān)閉 JobHistory Server

# master 下運行
mapred --daemon start historyserver

master 執(zhí)行 stop-all.sh 用于關(guān)閉集群所有節(jié)點的所有服務(wù)。

4、動態(tài)增加、刪除節(jié)點

開啟 worker2 虛擬機,虛擬機設(shè)置部分見,3、集群設(shè)置 ,開啟 master、worker1 虛擬機。

4.1、將 worker2 加入集群

開啟 master 和 worker1 的 Hadoop 集群:

# master 主機上執(zhí)行
start-all.sh

在 master 的 Hadoop 配置文件workers,添加 worker2 作為 datanode,修改完成后使用 scp 命令同步到 worker1 和 worker2。TODO:了解 zookeeper 相關(guān)配置實現(xiàn)配置文件同步。

worker1
worker2

登錄 worker2 ,

# 在 worker2 單獨啟動 datanode,nodemanager
# 對于其他功能節(jié)點,新加入的只需要在本地啟動即可,不建議通過腳本的方式
hdfs --daemon start datanode
yarn --daemon start nodemanager
# 刷新 datanode 和 yarn
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes

通過瀏覽器訪問 http://master:9870/dfshealth.html ,可以看到 worker2 成功加入 集群。

4.2、將 worker1 移出集群

Hadoop 配置文件workers 的作用是 Hadoop 腳本如 start-all.sh、stop-all.sh 通過其配置向整個集群發(fā)出操作指令,如開啟整個集群、關(guān)閉整個集群。Hadoop 的 namenode 守護進程是不使用的 workers 文件的。

實際上允許連接到 namenode 的節(jié)點通過文件 hdfs-site.xml 配置。在沒有配置的情況下,默認(rèn)所有節(jié)點都可以連接。嚴(yán)格的來說,上面的配置都是不完整的,集群上所有的節(jié)點都應(yīng)該明確管理。

使用 stop-all.sh 關(guān)閉集群, 在 master 機器上,新建 hosts.includes 表示允許連接的節(jié)點配置,文件內(nèi)容分別如下:

worker1
worker2

文件 hdfs-site.xml 新增如下配置:

<!-- 允許連接到 namenode 的節(jié)點 -->
<property>
  <name>dfs.hosts</name>
  <value>/home/hadoop/hadoop-3.2.1/etc/hadoop/hosts.includes</value>
</property>

文件 yarn-site.xml

<!-- 允許連接到 ResourceManager 的節(jié)點 -->
<property>
  <name>yarn.resourcemanager.nodes.include-path</name>
  <value>/home/hadoop/hadoop-3.2.1/etc/hadoop/hosts.includes</value>
</property>

使用 scp 同步到 worker1、worker2,然后啟動 Hadoop 集群。假設(shè)有 worker3 按照 4.1、將 worker2 加入集群 的方式加入集群,是不能連接到 namenode 的了,參考上面第一步將其加入 host.includes 文件即可再啟動即可。

cd ~/hadoop-3.2.1/etc/hadoop
scp ./* xian@worker1:~/hadoop-3.2.1/etc/hadoop
scp ./* xian@worker2:~/hadoop-3.2.1/etc/hadoop
# 啟動集群
start-all.sh

對于要將節(jié)點退出 Hadoop 集群,最簡單的方式就是將這個節(jié)點直接關(guān)閉:

# 錯誤示范
hdfs --daemon stop datanode

HDFS 具有容錯性,在多個副本的集群直接關(guān)掉一兩個節(jié)點還不會導(dǎo)致集群數(shù)據(jù)的丟失。然而這是不推薦的,就像在本文里,只有一個文件副本,直接關(guān)閉一個 datanode,那么該節(jié)點的數(shù)據(jù)會直接從集群消失。正確的做法是將需要退出的 datanode 告知 namenode,Hadoop 守護進程就會將該節(jié)點的數(shù)據(jù)復(fù)制到其他節(jié)點,然后需要移除的節(jié)點進入 Decommissioned 才可以移除。

正確示例:

第一步 : 告訴 Hadoop 我要移除某個節(jié)點了 移除節(jié)點的通過 exclude 文件控制,通過 dfs.hosts.exclude 和 yarn.resourcemanager.nodes.exclude -path 這兩個屬性配置。新建 hosts.excludes 文件,加入 worker1 ,表示要將 worker1 排除。

worker1

文件 hdfs-site.xml 新增如下配置:

<!-- 從 namenode 排除的節(jié)點 -->
<property>
  <name>dfs.hosts.exclude</name>
  <value>/home/hadoop/hadoop-3.2.1/etc/hadoop/hosts.excludes</value>
</property>

文件 yarn-site.xml

<!-- 從 ResourceManager 移除的節(jié)點 -->
<property>
  <name>yarn.resourcemanager.nodes.exclude-path</name>
  <value>/home/hadoop/hadoop-3.2.1/etc/hadoop/hosts.excludes</value>
</property>

使用 scp 同步到 worker1、worker2。

第二步:更新 namenode 和 resourcemanager 將要移除的節(jié)點數(shù)據(jù)拷貝到其他節(jié)點,并更新 namenode 的元數(shù)據(jù)等

hdfs dfsadmin -refreshNodes
# Refresh nodes successful
yarn rmadmin -refreshNodes
# INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.10:8033
# 數(shù)據(jù)平衡
start-balancer.sh

查看 datanode 是否已經(jīng)移除:執(zhí)行完成后執(zhí)行 hdfs dfsadmin -report 或者 web 頁面可以看到 worker 處于 Decommissioned 。

Decommission Status : Decommissioned
  • In service:正常服務(wù)

  • Decommissioning:復(fù)制數(shù)據(jù)中

  • Decommissioned : 數(shù)據(jù)復(fù)制完成,可以移除該節(jié)點

Web 頁面:http://master:9870/dfshealth.html#tab-datanode ,刷新,找到 worker1

Hadoop的安裝和配置方法

查看 Yarn 的 ResourceManager 是否已經(jīng)移除: 執(zhí)行命令 yarn node -list --all,查看 節(jié)點狀態(tài):

   worker1:44743         DECOMMISSIONED      worker1:8042                                  0
  • RUNNING :運行中

  • DECOMMISSIONED : 可以移除了

web 頁面刷新 :http://master:8088/cluster/nodes/decommissioned 也是顯示 Decommissioned

Hadoop的安裝和配置方法

可能遇到的錯誤 一個 master ,兩個 worker 集群的時候, worker1 的 datanode 一直不顯示 Decommissioned。 后面加多了兩個 worker ,worker1 正常掛 Decommissioned 狀態(tài)。一個 master ,兩個 worker 集群的不成功原因分析:

  • dfs.replication : 屬性先前我設(shè)置為 2,雖然后面改成了 1,但可能沒有讓其生效,退出 worker1 后 導(dǎo)致集群中 datanode 數(shù)量小于 2 ,datanode 運行中數(shù)量要大于 dfs.replication 的值才可以移除某個節(jié)點。TODO:補充刷新 dfs.replication 的命令。

  • HDFS 集群相關(guān)的設(shè)定,不允許移除 worker1 后只剩下一個 worker2 節(jié)點,TODO: 看源碼。

  • 退出安全模式 hadoop dfsadmin -safemode <command> 不是這個原因hdfs dfsadmin -safemode enter/leave

提示:對于數(shù)據(jù)量比較大的集群,Decommissioning 數(shù)據(jù)移動的狀態(tài)會比較長的時間,可以把 dfs.replication 設(shè)置相對小點,減少數(shù)據(jù)量的拷貝。TODO 待實驗

第三步:從 hosts.includes、hosts.excludes、workers 刪除需要移除的節(jié)點記錄。同步配置文件,然后運行:

hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes
# 數(shù)據(jù)平衡
start-balancer.sh

第四步:關(guān)閉 woker1

hdfs --daemon stop datanode
yarn --daemon stop nodemanager
sudo poweroff

通過 hdfs-site.xml 配置 hosts.includes、hosts.excludes 兩個文件的情況下,第一二列表示節(jié)點是否出現(xiàn)在改文件中:引用「Hadoop 權(quán)威指南(中文版)」P.333

includesexcludes解析
節(jié)點無法連接
節(jié)點無法連接
節(jié)點可連接
節(jié)點可連接,將被移除

遇到的錯誤:

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: RECEIVED SIGNAL 15: SIGTERM

原因是把 master 和 worker1 都作為 worker 了,但成功啟動,最后發(fā)現(xiàn),master 還是還是不要加入 workers 文件作為 datanode。

“Hadoop的安裝和配置方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI