@
前言
官方映象下載地址: Centos,hadoop,Java
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. 操作叢集
- 在HDFS系統上建立一個input資料夾
./bin/hdfs dfs -mkdir -p /user/test/input
- 將測試檔案內容上傳到檔案系統上
./bin/hdfs dfs -put input/core-site.xml /user/test/input/
- 檢視上傳的檔案是否正確
./bin/hdfs dfs -ls /user/test/input/
./bin/hdfs dfs -cat /user/test/input/core-site.xml
- 執行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 來負責資源管理與任務排程。
- 修改配置檔案 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>
- 修改配置檔案 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
#另外同理
規劃
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路徑即可
- hadoop-env.sh
cd /opt/{hadoop}/etc/hadoop
# 指定jdk路徑
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
- 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>
- 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>
- 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>
- mapred-site.xml
<!--指定MR執行在YARN上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 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