CentOS7 hadoop3.3.1安裝(單機分佈式、偽分佈式、分佈式)

@

前言

官方鏡像下載地址: CentoshadoopJava
Centos為CentOS-7-x86_64-DVD-2009
Hadoop為hadoop-3.3.1.tar.gz
Java為jdk-8u301-linux-x64.tar.gz
PS:Hadoop3.X Java最低版本為1.8
純原生態安裝,非CDH和HDP,或是Ambari

預先設置

修改主機名

修改 /etc/sysconfig/network中的hostname

vi /etc/sysconfig/network中的hostname

或者這樣

hostnamectl set-hostname Hadoop
#secureCRT 中ctrl+D

修改/etc/hosts文件

vi /etc/hosts

vi /etc/hosts
# 這裡我除了修改127.0.0.1里的localhost.localdomain,還把其它服務器的ip和對應名稱添加進來
127.0.0.1   localhost hadoop1 localhost4 localhost4.localdomain4
::1         localhost hadoop1 localhost6 localhost6.localdomain6
192.168.100.10 hadoop1
192.168.100.20 hadoop2
192.168.100.30 hadoop3

重啟服務器

關閉防火牆

# 關閉
systemctl stop firewalld
# 禁止開機自啟
systemctl disable firewalld

創建hadoop用戶

# 創建用戶並使用 /bin/bash 作為shell
$ useradd -m hadoop -s /bin/bash

# 給hadoop用戶設置密碼,若提示密碼無效,不用管,接着輸入一次即可
$ passwd hadoop

# 給hadoop增加執行權限
$ visudo
#98行  輸入 :98 跳轉至98行,增加一行 hadoop  ALL=(ALL) ALL
$ root ALL=(ALL) ALL
$ hadoop ALL=(ALL) ALL

SSH安裝免密登陸

單機免密登陸——linux配置ssh免密登錄

檢查是否安裝SSH

systemctl status sshd

已安裝會顯示ssh服務的狀態(actving),否則,執行下面命令安裝

# -y表示全部同意,不用每次都按y
yum install openssh-clients -y
yum install openssh-server -y

測試是否可用

#按提示確認連接後,輸入當前用戶密碼即可,初始沒有密碼會提示創建密碼
ssh localhost

設置無密碼登錄

#~ 代表的是用戶的主文件夾,即 「/home/用戶名」 這個目錄,如你的用戶名為 hadoop,則 ~ 就代表 「/home/hadoop/」
cd ~/.ssh/                     # 若沒有該目錄,請先執行一次ssh localhost
ssh-keygen -t rsa              # 會有提示,都按回車就可以
cat id_rsa.pub >> authorized_keys  # 加入授權
chmod 600 ./authorized_keys    # 修改文件權限

此時再用 ssh localhost 命令,無需輸入密碼就可登陸

linux環境配置Java變量

查找當前是否有java安裝目錄
如果有則卸除自帶的Java環境

[root@localhost ~]# java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
[root@localhost ~]# which java
/usr/bin/java
[root@localhost ~]# ls -lrt /usr/bin/java 
lrwxrwxrwx. 1 root root 22 Aug  6  2020 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Aug  6  2020 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre/bin/java

額外知識
安裝目錄在 /usr/lib/jvm
1.通過rpm等方式安裝的jdk,我們在 profile 文件里是沒有看到環境變量配置的。我們調用java命令時可以正常執行,是他們是嚴格安裝linux對環境變量的路徑要求進行安裝,並將相關命令鏈接到 /usr/bin 目錄下,當我們在任意位置執行時,系統都會到 /usr/bin 下來執行。

/usr/bin 可執行的命令安裝目錄
/usr/lib 程序所使用的庫函數保存位置
/usr/share/doc 基本的軟件使用手冊保存位置
/usr/share/man 幫助文件保存位置

使用 yum install java-1.8.0-openjdkl.x86_64 默認是只有jre的,jps,jstat等命令是不存在的,這個時候還需要安裝開發包,找到後綴是devel的,執行 yum install java-1.8.0-openjdk-devel.x86_64 即可。
再加個 卸載java

rpm -qa | grep jdk
# 會出來一個類似下面這個的
copy-jdk-configs-3.3-10.el7_5.noarch

# 執行卸載
yum -y remove copy-jdk-configs-3.3-10.el7_5.noarch

如果沒有Java環境,則

配置Java環境變量

一種是全局,修改 /etc/profile 文件,
一種是當前角色,修改 ~/.bash_profile 文件。

在文件中增加下面內容:

export JAVA_HOME=/usr/local/java/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

保存退出後,執行 source /etc/profile(如果是當前角色,刷新對應的bash_profile) 刷新環境變量

安裝Hadoop-3.3.0.tar.gz

上傳至服務器,或者從服務器中下載
找個目錄解壓,比如/opt下

# -C 是指定解壓目錄
tar -zxvf hadoop-3.3.0.tar.gz -C /opt

解壓完檢查hadoop是否可用

#切換到hadoop的安裝目錄執行, 成功則顯示版本信息
$ cd /opt/hadoop-3.3.0
$ ./bin/hadoop version

這裡我們可以將hadoop也加入環境變量,就不需要每次到bin目錄下執行

# 編輯profile文件
vi /etc/profile
# 增加hadoop環境變量
export HADOOP_HOME=/opt/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 保存後刷新下環境變量
source /etc/profile

運行

單機非分佈式

主要用來調試時使用。
Hadoop 附帶了豐富的例子(運行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
這裡 我們試驗的是 grep .

$ mkdir ./input
$ cp ./etc/hadoop/*.xml ./input   # 將配置文件作為輸入文件
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
$ cat ./output/*

偽分佈式

1.修改配置文件

Hadoop 的配置文件位於 安裝目錄下 /etc/hadoop/ 中

[root@hadoop1 hadoop]# pwd
/opt/hadoop-3.3.0/etc/hadoop

偽分佈式需要修改2個配置文件 core-site.xml 和 hdfs-site.xml

#修改配置文件hadoop-env.sh

 # set to the root of your Java installation
export JAVA_HOME=/usr/local/java/jdk1.8.0_301

#修改配置文件 core-site.xml
<configuration>
	<!--指定Hadoop運行時產生文件的存儲目錄-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/data/hadoop/tmp</value>
    </property>
    <!--指定HDFS中NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop2:9000</value>
    </property>
</configuration>

#修改配置文件 hdfs-site.xml, 
#搭建集群後,hadoop本身自帶了一個webUI訪問頁面
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

2.格式化NameNode

./bin/hdfs namenode -format

3.開啟 NaneNode 和 DataNode 進程

./sbin/start-dfs.sh

#啟動完成後,可以通過命令 jps 來判斷是否成功啟動
[hadoop@localhost hadoop-3.3.0]$ jps
32081 NameNode
32561 Jps
32234 DataNode

#停止
./sbin/stop-dfs.sh

如果出現
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
解決方法:
方法一、
在Hadoop安裝目錄下找到sbin文件夾
在裏面修改四個文件

1、對於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

2、對於start-yarn.sh和stop-yarn.sh文件,添加下列參數:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

然後重新啟動
建議第二種(推薦,實用)

cd /opt/hadoop-3.3.0/etc/hadoop
vim /hadoop-env.sh
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

日誌文件輸出在 安裝目錄下的logs文件夾中。
可以訪問web頁面,前面配置過的 //localhost:9870/

4. 操作集群

  1. 在HDFS系統上創建一個input文件夾
./bin/hdfs dfs -mkdir -p /user/test/input
  1. 將測試文件內容上傳到文件系統上
./bin/hdfs dfs -put input/core-site.xml  /user/test/input/
  1. 查看上傳的文件是否正確
./bin/hdfs dfs -ls /user/test/input/

./bin/hdfs dfs -cat /user/test/input/core-site.xml

  1. 運行mapReduce程序
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/test/input/core-site.xml /user/test/output/

./bin/hdfs dfs -cat /user/test/output/*

在瀏覽器中查看:在這裡插入圖片描述

5. 啟動yarn(偽分佈式也可以不啟動)

上述通過 ./sbin/start-dfs.sh 啟動 Hadoop,是啟動 MapReduce 環境,我們可以啟動 YARN ,讓 YARN 來負責資源管理與任務調度。

  1. 修改配置文件 mapred-site.xml:
#修改內容如下
<configuration>
		<!--指定MR運行在YARN上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>
  1. 修改配置文件 yarn-site.xml:
<configuration>
		<!--Reducer獲取數據的方式-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <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>

PS:這裡不需要配置resourceManagerName.hostname。
3. 啟動 YARN
啟動前必須保證NameNode和DataNode已經啟動:

# 啟動YARN
./sbin/start-yarn.sh    

# 停止
./sbin/stop-yarn.sh

這裡可以訪問 ResourceManager – //localhost:8088/
4. 開啟歷史服務器
在Web中查看任務運行情況 – //localhost:19888/

mapred --daemon start historyserver

關閉

./sbin/stop-all.sh
# 歷史進程要單獨關閉
mapred --daemon stop historyserver

6.運行測試實例

  $ bin/hdfs dfs -mkdir /user
  $ bin/hdfs dfs -mkdir /user/input
  # 將配置文件作為輸入文件
  $ bin/hdfs dfs -put etc/hadoop/*.xml /user/input   
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/input/core-site.xml /user/output/

  $ bin/hdfs dfs -cat /user/output/*

  # Hadoop 運行程序時,輸出目錄不能存在
  $ bin/hdfs dfs -rm -r /user/output

7. 配置日誌保存在HDFS

應用運行完成以後,將程序運行日誌信息上傳到HDFS系統上,方便的查看到程序運行詳情,方便開發調試。

修改配置文件 yarn-site.xml

    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!--日誌保留時間設置7天-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

注意:開啟日誌聚集功能,需要重新啟動NodeManager 、ResourceManager和HistoryManager。
重新執行上面的wordcount,然後在JobHistory裏面可以找到相應的日誌。
http:localhost:8088

分佈式

準備好三台服務器,按照前面的前置操作(注意SSH免密要配置好),下載安裝的步驟準備好。(如果是Vmware則關機克隆)
注意!!!三台均要配置SSH免密
此處使用ssh-copy-id命令,可以把本地主機的公鑰複製到遠程主機的authorized_keys文件上,ssh-copy-id命令也會給遠程主機的用戶主目錄(home)和~/.ssh, 和~/.ssh/authorized_keys設置合適的權限。

[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
#另外同理

Linux手冊——ssh-copy-id

規劃

hadoop1 hadoop2 hadoop3
HDFS NameNode SecondaryNameNode
DataNode DataNode DataNode
YARN ResourceManager
NodeManager NodeManager NodeManager
#### 集群:修改主機名
[[email protected] ~] hostnamectl set-hostname hadoop1
[[email protected] ~] hostnamectl set-hostname hadoop2
[[email protected] ~] hostnamectl set-hostname hadoop3

如果在SecureCRT中,可以用Ctrl+D重新登陸就可顯示為hadoop主機名

修改配置文件

hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers

位置在hadoop文件路徑/etc/hadoop
定位52行,配置自己的jdk路徑即可

  1. hadoop-env.sh
cd /opt/{hadoop}/etc/hadoop
# 指定jdk路徑
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
  1. core-site.xml
    <!--指定HDFS中NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
		<!--指定HDFS中NameNode的地址-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/data/hadoop/tmp</value>
    </property>
  1. hdfs-site.xml
    <!--指定備份數-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--nn web端訪問地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop1:9870</value>
	</property>
	<!--指定輔助名稱節點-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop3:9868</value>
    </property>
  1. yarn-site.xml
    <!--Reducer獲取數據的方式-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!--指定resourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop2</value>
    </property>
		<!--日誌聚集功能開啟-->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!--日誌保留時間設置7天-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
  1. mapred-site.xml
    <!--指定MR運行在YARN上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
  1. workers 添加主從節點【都要添加】刪除localhost
hadoop1
hadoop2
hadoop3

在hadoop3.2之前workers還是為slaves
主節點修改【Hadoop1】傳送給其他兩個節點

單點啟動

先格式化NameNode,在hadoop1上執行

hdfs namenode -format

注意,盡量少格式化NameNode

在master節點啟動start.sh

sh /export/servers/hadoop-3.3.1/sbin/start-all.sh 
#或者進入sbin路徑
./start-all.sh
啟動服務如果出現這樣的錯誤

Starting namenodes on [hadoop1]
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 [hadoop3]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.

解決方案一
vi /etc/profile
#輸入如下命令,在環境變量中添加下面的配置
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

生效

source /etc/profile
解決方案二:

將start-dfs.sh,stop-dfs.sh(在hadoop安裝目錄的sbin里)兩個文件頂部添加以下參數

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

將start-yarn.sh,stop-yarn.sh(在hadoop安裝目錄的sbin里)兩個文件頂部添加以下參數

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

按規劃啟動對應服務

# hadoop1
bin/hdfs --daemon start namenode
bin/hdfs --daemon start datanode

bin/yarn --daemon start nodemanager

如果dataNode節點未啟動成功或者是啟動自動宕掉
一、清理hadoop數據temp文件
二、重新把初次得namenode clusterID
通過日誌查看,得到/var/data/hadoop/dfs/data/current

# hadoop2
bin/hdfs --daemon start datanode

bin/yarn --daemon start resourcemanager
bin/yarn --daemon start nodemanager
# hadoop3
bin/hdfs --daemon start datanode
bin/hdfs --daemon start secondarynamenode

bin/yarn --daemon start nodemanager

這裡要把/etc/hosts裏面的127.0.01的映射注釋掉,在沒有注釋掉的時候啟動時節點之間不能連接。

群集啟動

直接在NameNode節點執行 sbin/start-dfs.sh

# hadoop1
sbin/start-dfs.sh

# hadoop2,hadoop3 這裡單獨去啟動了dataNode
bin/hdfs --daemon start datanode


# hadoop2
sbin/start-yarn.sh 

# hadoop1,hadoop3
bin/yarn --daemon start nodemanager

Shell定時採集數據到HDFS

找到對應的data/logs。不存在則提前創建

配置環境變量

該目錄下創建upload2HDFS.sh 腳(jio)本文件。寫入java環境變量,主要是為了提高系統的可靠性,哪怕沒有配置環境變量也能運行

vi upload2HDFS.sh

輸入命令

export JAVA_HOME = "你的jdk安裝路徑"
export JRE_HOME = ${JAVA_HOME}/jre
export CLASSPATH = .:{JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH = ${JAVA_HOME}/bin:$PATH

export HADOOP_HOME = "你的Hadoop路徑"
export PATH = ${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

準備日誌存放目錄和待上傳文件

##需要提前創建好文件目錄
#日誌存放的目錄
log_src_dir = "自定義" #/export/data/logs/log
#待上傳存放的目錄
log_toupload_dir = "自定義/toupload" #/export/data/log/toupload

設置日誌文件上傳的路徑

命名格式以時間結尾、並輸出打印信息

#設置日期
date1=`date-d last-day + %Y_%m_%d`
#日誌文件上傳到hdfs的根目錄
hdfs_root_dir=/data/clickLog/$date1/
#打印環境變量信息
echo "envs: hadoop_home: $AHDOOP_HOME"
#讀取日誌文件的目錄,判斷是否有需要上傳的文件
echo "log_src_dir:"$log_src_dir

實現文件上傳

ls $log_src_dir | while read fileName
do
  if [[ "$fileName"==access.log.* ]];then
      date = `date + %Y%d_%H_%M_%S`
      #將文件移動到待上傳目錄並重命名
      echo "moving $log_src_dir$fileName to
                   $log_toupload_dir"xxxxx_click_log_$fileName"date"
      mv $log_src_dir$fileName
                     $log_toupload_dir"xxxxx_click_log_$fileName"date
      #將待上傳的文件path寫入一個列表文件willDoing,
      echo $log_toupload_dir"xxxxx_click_log_$fileName"date >>
                             $log_toupload_dir"willDoing."date
  fi
done               

最後將文件從待上傳目錄傳至HDFS中

#找到列表文件willDoing
ls $log_toupload_dir | grep will | grep -v "_COPY_" | grep -v "_HOME_" | while
read line
do
    #打印信息
    echo "toupload is in file:"$line
    #將待上傳文件列表willDoing改名為willDoing_COPY_
    mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_"
    # 讀列表文件willDoing_COPY_的內容(一個一個的待上傳文件名)
    # 此處的line就是列表中的一個待上傳文件的path
    cat $log_toupload_dir$line"_COPY_" | while read line
    do
        #打印信息
        echo "puting...$line to hdfs path...$hdfs_root_dir"
        hadoop fs -mkdir -p $hdfs_root_dir
        hadoop fs -put $line $hdfs_root_dir
    done
    mv $log_toupload_dir$line"_COPY_" $log_toupload_dir$line"_DONE_"
done

現在每天12點執行一次,Linux crontab表達式執行定時任務

0 0 * * * /shell/upload2HDFS.sh

上述Crontab6個參數,分時日月周命令組成

啟動命令匯總說明

sbin/start-all.sh 啟動所有的Hadoop守護進程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager
sbin/stop-all.sh 停止所有的Hadoop守護進程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager

sbin/start-dfs.sh 啟動Hadoop HDFS守護進程NameNode、SecondaryNameNode、DataNode
sbin/stop-dfs.sh 停止Hadoop HDFS守護進程NameNode、SecondaryNameNode、DataNode

sbin/start-yarn.sh 啟動ResourceManager、NodeManager
sbin/stop-yarn.sh 停止ResourceManager、NodeManager

# 單獨啟動/停止的
bin/hdfs --daemon start namenode
bin/hdfs --daemon start datanode
bin/hdfs --daemon start secondarynamenode

bin/yarn --daemon start resourcemanager
bin/yarn --daemon start nodemanager

mapred --daemon start historyserver 
mapred --daemon stop historyserver  

--------------------------------------------------------------------------

# 舊版本的命令
sbin/hadoop-daemons.sh start namenode 單獨啟動NameNode守護進程

sbin/hadoop-daemons.sh stop namenode 單獨停止NameNode守護進程

sbin/hadoop-daemons.sh start datanode 單獨啟動DataNode守護進程

sbin/hadoop-daemons.sh stop datanode 單獨停止DataNode守護進程

sbin/hadoop-daemons.sh start secondarynamenode 單獨啟動SecondaryNameNode守護進程

sbin/hadoop-daemons.sh stop secondarynamenode 單獨停止SecondaryNameNode守護進程

sbin/yarn-daemon.sh start resourcemanager 單獨啟動ResourceManager

sbin/yarn-daemons.sh start nodemanager  單獨啟動NodeManager

sbin/yarn-daemon.sh stop resourcemanager 單獨停止ResourceManager

sbin/yarn-daemons.sh stopnodemanager  單獨停止NodeManager

sbin/mr-jobhistory-daemon.sh start historyserver 手動啟動jobhistory

sbin/mr-jobhistory-daemon.sh stop historyserver 手動停止jobhistory

雲服務器
虛擬機和配置網卡 建議使用NAT模式

Hadoop 3 端口號的改變

分類 應用 Haddop 2.x port Haddop 3 port
NNPorts Namenode 8020 9820
NNPorts NN HTTP UI 50070 9870
NNPorts NN HTTPS UI 50470 9871
SNN ports SNN HTTP 50091 9869
SNN ports SNN HTTP UI 50090 9868
DN ports DN IPC 50020 9867
DN ports DN 50010 9866
DN ports DN HTTP UI 50075 9864
DN ports Namenode 50475 9865
## Hadoop 3 新特徵
  • 基於JDK1.8(最低版本要求)
  • 剔除過期的API和實現,廢棄hftp轉為webhfs替代
  • Classpath isolation:新增的防止不同版本 jar 包衝突
  • Shell重寫 (修復了Hadoop2腳本的bug,啟動時的腳本命令也有不同,建議運行Hadoop3的腳本,大概有三分之一的地方不一樣)
  • 支持HDFS的擦除編碼 Erasure Encoding:默認EC策略可以節省50%的存儲空間,同時還可以承受更多的存儲故障(還在Haddoop2的基礎上增加恢復功能)
  • DataNode 內部添加了負載均衡 Disk Balancer,磁盤之間的負載均衡(假定有3台服務器的磁盤都滿了數據,數據存儲在DataNode當中,可以在買一塊磁盤插入,但其他磁盤還是滿的,新磁盤是空的,這就產生了數據傾斜,所以Hadoop3提供了 Disk Balancer 磁盤平衡器自動幫我們將滿磁盤分配到其他磁盤當中)
  • MapReduce任務級本地優化
  • MapReduce內存參數自動推斷
    • mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts (在Hadoop2中是需要配置這兩項,但在3中就會根據任務執行級別自動推斷所需要的內存,所以3比2要快)
    • 基於 cgroup 的內存隔離和 IO Disk 隔離
    • 支持更改分配容器的資源 Container resizing

參考://blog.csdn.net/qq_35975685/article/details/84311627