CentOS7 hadoop3.3.1安裝(單機分佈式、偽分佈式、分佈式)
@
前言
官方鏡像下載地址: 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頁面,前面配置過的 //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 – //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]
#另外同理
規劃
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路徑即可
- 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
參考://blog.csdn.net/qq_35975685/article/details/84311627