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

李好秀發表於2021-11-13

@

前言

官方映象下載地址: 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頁面,前面配置過的 http://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 - http://localhost:8088/
4. 開啟歷史伺服器
在Web中檢視任務執行情況 - http://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 root@192.168.100.20
[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.100.30
#另外同理

Linux手冊——ssh-copy-id

規劃

hadoop1 hadoop2 hadoop3
HDFS NameNode SecondaryNameNode
DataNode DataNode DataNode
YARN ResourceManager
NodeManager NodeManager NodeManager
#### 叢集:修改主機名
[root@192.168.100.10 ~] hostnamectl set-hostname hadoop1
[root@192.168.100.20 ~] hostnamectl set-hostname hadoop2
[root@192.168.100.30 ~] 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

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

相關文章