4.1 本地運行模式
4.1.1 官方Grep案例(參照官網文檔)
1. 創建在hadoop-2.7.2文件下面創建一個input文件夾
[atguigu@hadoop101 hadoop-2.7.2]$ mkdir input
2. 將Hadoop的xml配置文件複製到input
[atguigu@hadoop101 hadoop-2.7.2]$ cp etc/hadoop/*.xml input
3. 執行share目錄下的MapReduce程序
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
注意:output必須不能存在,否則會報錯
4. 查看輸出結果
[atguigu@hadoop101 hadoop-2.7.2]$ cat output/*
4.1.2 官方WordCount案例
1. 創建在hadoop-2.7.2文件下面創建一個wcinput文件夾
[atguigu@hadoop101 hadoop-2.7.2]$ mkdir wcinput
2. 在wcinput文件下創建一個wc.input文件
[atguigu@hadoop101 hadoop-2.7.2]$ cd wcinput
[atguigu@hadoop101 wcinput]$ touch wc.input
3. 編輯wc.input文件
[atguigu@hadoop101 wcinput]$ vi wc.input
在文件中輸入如下內容
hadoop yarn
hadoop mapreduce
atguigu
atguigu
保存退出::wq
4. 回到Hadoop目錄/opt/module/hadoop-2.7.2
5. 執行程序
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
6. 查看結果
[atguigu@hadoop101 hadoop-2.7.2]$ cat wcoutput/part-r-00000
atguigu 2
hadoop 2
mapreduce 1
yarn 1
4.2 僞分佈式運行模式
4.2.1 啓動HDFS並運行MapReduce程序
1. 分析
(1)配置集羣
(2)啓動、測試集羣增、刪、查
(3)執行WordCount案例
2. 執行步驟
(1)配置集羣
(a)配置:hadoop-env.sh
Linux系統中獲取JDK的安裝路徑:
[atguigu@ hadoop101 ~]# echo $JAVA_HOME
/opt/module/jdk1.8.0_144
修改JAVA_HOME 路徑:
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置:core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property>
<!-- 指定Hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property> |
(c)配置:hdfs-site.xml
<!-- 指定HDFS副本的數量 --> <property> <name>dfs.replication</name> <value>1</value> </property> |
(2)啓動集羣
(a)格式化NameNode(第一次啓動時格式化,以後就不要總格式化)
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -format
(b)啓動NameNode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
(c)啓動DataNode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
(3)查看集羣
(a)查看是否啓動成功
[atguigu@hadoop101 hadoop-2.7.2]$ jps
13586 NameNode
13668 DataNode
13786 Jps
注意:jps是JDK中的命令,不是Linux命令。不安裝JDK不能使用jps
(b)web端查看HDFS文件系統
http://hadoop101:50070/dfshealth.html#tab-overview
注意:如果不能查看,看如下帖子處理
http://www.cnblogs.com/zlslch/p/6604189.html
(c)查看產生的Log日誌
說明:在企業中遇到Bug時,經常根據日誌提示信息去分析問題、解決Bug。
當前目錄:/opt/module/hadoop-2.7.2/logs
[atguigu@hadoop101 logs]$ ls
hadoop-atguigu-datanode-hadoop.atguigu.com.log
hadoop-atguigu-datanode-hadoop.atguigu.com.out
hadoop-atguigu-namenode-hadoop.atguigu.com.log
hadoop-atguigu-namenode-hadoop.atguigu.com.out
SecurityAuth-root.audit
[atguigu@hadoop101 logs]# cat hadoop-atguigu-datanode-hadoop101.log
(d)思考:爲什麼不能一直格式化NameNode,格式化NameNode,要注意什麼?
[atguigu@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/name/current/
[atguigu@hadoop101 current]$ cat VERSION
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
[atguigu@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/data/current/
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
注意:格式化NameNode,會產生新的集羣id,導致NameNode和DataNode的集羣id不一致,集羣找不到已往數據。所以,格式NameNode時,一定要停止相關進程,刪除data數據和log日誌,然後再格式化NameNode。
(4)操作集羣
(a)在HDFS文件系統上創建一個input文件夾
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/atguigu/input
(b)將測試文件內容上傳到文件系統上
[atguigu@hadoop101 hadoop-2.7.2]$bin/hdfs dfs -put wcinput/wc.input
/user/atguigu/input/
(c)查看上傳的文件是否正確
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -ls /user/atguigu/input/
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/ input/wc.input
(d)運行MapReduce程序
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input/ /user/atguigu/output
(e)查看輸出結果
命令行查看:
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
瀏覽器查看,如圖2-34所示
圖2-34 查看output文件
(f)將測試文件內容下載到本地
[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -get /user/atguigu/output/part-r-00000 ./wcoutput/
(g)刪除輸出結果
[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -r /user/atguigu/output
4.2.2 啓動YARN並運行MapReduce程序
1. 分析
(1)配置集羣在YARN上運行MR
(2)啓動、測試集羣增、刪、查
(3)在YARN上執行WordCount案例
2. 執行步驟
(1)配置集羣
(a)配置yarn-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置yarn-site.xml
<!-- Reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
(c)配置:mapred-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(d)配置: (對mapred-site.xml.template重新命名爲) mapred-site.xml
[atguigu@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml
[atguigu@hadoop101 hadoop]$ vi mapred-site.xml
<!-- 指定MR運行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(2)啓動集羣
(a)啓動前必須保證NameNode和DataNode已經啓動
(b)啓動ResourceManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
(c)啓動NodeManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
(3)集羣操作
(a)YARN的瀏覽器頁面查看,如圖2-35所示
http://hadoop101:8088/cluster
圖2-35 YARN的瀏覽器頁面
(b)刪除文件系統上的output文件
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
(c)執行MapReduce程序
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
(d)查看運行結果,如圖2-36所示
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
圖2-36 查看運行結果
4.2.3 配置歷史服務器
爲了查看程序的歷史運行情況,需要配置一下歷史服務器。具體配置步驟如下:
1. 配置mapred-site.xml
[atguigu@hadoop101 hadoop]$ vi mapred-site.xml
在該文件裏面增加如下配置。
<!-- 歷史服務器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 歷史服務器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
2. 啓動歷史服務器
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
3. 查看歷史服務器是否啓動
[atguigu@hadoop101 hadoop-2.7.2]$ jps
4. 查看JobHistory
http://hadoop101:19888/jobhistory
4.2.4 配置日誌的聚集
日誌聚集概念:應用運行完成以後,將程序運行日誌信息上傳到HDFS系統上。
日誌聚集功能好處:可以方便的查看到程序運行詳情,方便開發調試。
注意:開啓日誌聚集功能,需要重新啓動NodeManager 、ResourceManager和HistoryManager。
開啓日誌聚集功能具體步驟如下:
- 配置yarn-site.xml
[atguigu@hadoop101 hadoop]$ vi 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
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver
- 啓動NodeManager 、ResourceManager和HistoryManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
- 刪除HDFS上已經存在的輸出文件
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
- 執行WordCount程序
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
- 查看日誌,如圖2-37,2-38,2-39所示
http://hadoop101:19888/jobhistory
圖2-37 Job History
圖2-38 job運行情況
圖2-39 查看日誌
4.2.5 配置文件說明
Hadoop配置文件分兩類:默認配置文件和自定義配置文件,只有用戶想修改某一默認配置值時,才需要修改自定義配置文件,更改相應屬性值。
在2.資料\01_jar包\03_linux編譯過的hadoop jar包\hadoop-2.7.2\share\hadoop下查找所有jar包,放到\2.資料\01_jar包\_lib目錄下查看
(1)默認配置文件:
表2-1
要獲取的默認文件 |
文件存放在Hadoop的jar包中的位置 |
[core-default.xml] |
hadoop-common-2.7.2.jar/ core-default.xml |
[hdfs-default.xml] |
hadoop-hdfs-2.7.2.jar/ hdfs-default.xml |
[yarn-default.xml] |
hadoop-yarn-common-2.7.2.jar/ yarn-default.xml |
[mapred-default.xml] |
hadoop-mapreduce-client-core-2.7.2.jar/ mapred-default.xml |
(2)自定義配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四個配置文件存放在$HADOOP_HOME/etc/hadoop這個路徑上,用戶可以根據項目需求重新進行修改配置。
4.3 完全分佈式運行模式(開發重點)
分析:
1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)
2)安裝JDK
3)配置環境變量
4)安裝Hadoop
5)配置環境變量
6)配置集羣
7)單點啓動
8)配置ssh
9)羣起並測試集羣
4.3.1 虛擬機準備
詳見3.1章。
4.3.2 編寫集羣分發腳本xsync
1. scp(secure copy)安全拷貝
(1)scp定義:
scp可以實現服務器與服務器之間的數據拷貝。(from server1 to server2)
(2)基本語法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 遞歸 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
注意:
如果目標目錄不存在,直接將源test放到opt目錄下
scp -r test/ root@hadoop102:/opt/目標目錄/
如果目標目錄存在,將源test放到opt/test目錄下
scp -r test/ root@hadoop102:/opt/目標目錄/
將源內容直接拷貝到目標目錄下
scp -r test/* root@hadoop102:/opt/目標目錄/
(3)案例實操
(a)在hadoop101上,將hadoop101中/opt/module目錄下的軟件拷貝到hadoop102上。
[atguigu@hadoop101 /]$ scp -r /opt/module root@hadoop102:/opt/module
(b)在hadoop103上,將hadoop101服務器上的/opt/module目錄下的軟件拷貝到hadoop103上。
[atguigu@hadoop103 opt]$sudo scp -r atguigu@hadoop101:/opt/module root@hadoop103:/opt./module
(c)在hadoop103上操作將hadoop101中/opt/module目錄下的軟件拷貝到hadoop104上。
[atguigu@hadoop103 opt]$ scp -r atguigu@hadoop101:/opt/module root@hadoop104:/opt/module
注意:拷貝過來的/opt/module目錄,別忘了在hadoop102、hadoop103、hadoop104上修改所有文件的,所有者和所有者組。sudo chown atguigu:atguigu -R /opt/module
(d)將hadoop101中/etc/profile文件拷貝到hadoop102的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile
(e)將hadoop101中/etc/profile文件拷貝到hadoop103的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile
(f)將hadoop101中/etc/profile文件拷貝到hadoop104的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile
注意:拷貝過來的配置文件別忘了source一下/etc/profile,。
2. rsync 遠程同步工具
rsync主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。
rsync和scp區別:用rsync做文件的複製要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都複製過去。
(1)基本語法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 選項參數 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
選項參數說明
表2-2
選項 |
功能 |
-r |
遞歸 |
-v |
顯示覆制過程 |
-l |
拷貝符號連接 |
(2)案例實操
(a)把hadoop101機器上的/opt/software目錄同步到hadoop102服務器的root用戶下的/opt/目錄
[atguigu@hadoop101 opt]$ rsync -rvl /opt/software/ root@hadoop102:/opt/software
3. xsync集羣分發腳本
(1)需求:循環複製文件到所有節點的相同目錄下
(2)需求分析:
(a)rsync命令原始拷貝:
rsync -rvl /opt/module root@hadoop103:/opt/
(b)期望腳本:
xsync要同步的文件名稱
(c)說明:在/home/atguigu/bin這個目錄下存放的腳本,atguigu用戶可以在系統任何地方直接執行。
(3)腳本實現
(a)在/home/atguigu目錄下創建bin目錄,並在bin目錄下xsync創建文件,文件內容如下:
[atguigu@hadoop102 ~]$ mkdir bin
[atguigu@hadoop102 ~]$ cd bin/
[atguigu@hadoop102 bin]$ touch xsync
[atguigu@hadoop102 bin]$ vi xsync
在該文件中編寫如下代碼
#!/bin/bash
#1 獲取輸入參數個數,如果沒有參數,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 獲取文件名稱
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 獲取上級目錄到絕對路徑 –P指向實際物理地址,防止軟連接
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 獲取當前用戶名稱
user=`whoami`
#5 循環
for((host=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
(b)修改腳本 xsync 具有執行權限
[atguigu@hadoop102 bin]$ chmod 777 xsync
(c)調用腳本形式:xsync 文件名稱
[atguigu@hadoop102 bin]$ xsync /home/atguigu/bin
注意:如果將xsync放到/home/atguigu/bin目錄下仍然不能實現全局使用,可以將xsync移動到/usr/local/bin目錄下。
4.3.3 集羣配置
1. 集羣部署規劃
表2-3
|
hadoop102 |
hadoop103 |
hadoop104 |
HDFS
|
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
2. 配置集羣
(1)核心配置文件
配置core-site.xml
[atguigu@hadoop102 hadoop]$ vi core-site.xml
在該文件中編寫如下配置
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定Hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(2)HDFS配置文件
配置hadoop-env.sh
[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置hdfs-site.xml
[atguigu@hadoop102 hadoop]$ vi hdfs-site.xml
在該文件中編寫如下配置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
(3)YARN配置文件
配置yarn-env.sh
[atguigu@hadoop102 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml
[atguigu@hadoop102 hadoop]$ vi yarn-site.xml
在該文件中增加如下配置
<!-- Reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
(4)MapReduce配置文件
配置mapred-env.sh
[atguigu@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置mapred-site.xml
[atguigu@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[atguigu@hadoop102 hadoop]$ vi mapred-site.xml
在該文件中增加如下配置
<!-- 指定MR運行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.在集羣上分發配置好的Hadoop配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
4.查看文件分發情況
[atguigu@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
4.3.4 集羣單點啓動
(1)如果集羣是第一次啓動,需要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
(2)在hadoop102上啓動NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[atguigu@hadoop102 hadoop-2.7.2]$ jps
3461 NameNode
(3)在hadoop102、hadoop103以及hadoop104上分別啓動DataNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop102 hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[atguigu@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop103 hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[atguigu@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop104 hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode
訪問http://hadoop102:50070/查看效果
測試
在hadoop102上創建目錄
在hadoop104上上傳文件
在hadoop103上刪除目錄
(4)思考:每次都一個一個節點啓動,如果節點數增加到1000個怎麼辦?
早上來了開始一個一個節點啓動,到晚上下班剛好完成,下班?
4.3.5 SSH無密登錄配置
1. 配置ssh
(1)基本語法
ssh另一臺電腦的ip地址
(2)ssh連接時出現Host key verification failed的解決方法
[atguigu@hadoop102 opt] $ ssh 192.168.1.103
The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
(3)解決方案如下:直接輸入yes
2. 無密鑰配置
(1)免密登錄原理,如圖2-40所示
圖2-40 免密登陸原理
(2)生成公鑰和私鑰:
[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
(3)將公鑰拷貝到要免密登錄的目標機器上
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104
注意:ssh訪問自己也需要輸入密碼,所以我們需要將公鑰也拷貝給102
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
注意:
還需要在ResourceManager節點hadoop103上採用atguigu賬號配置一下無密登錄到hadoop102、hadoop103、hadoop104服務器上。
如果在hadoop102上需要採用root賬號訪問其它服務器,配置一下無密登錄到hadoop102、hadoop103、hadoop104;
3. .ssh文件夾下(~/.ssh)的文件功能解釋
表2-4
known_hosts |
記錄ssh訪問過計算機的公鑰(public key) |
id_rsa |
生成的私鑰 |
id_rsa.pub |
生成的公鑰 |
authorized_keys |
存放授權過得無密登錄服務器公鑰 |
4.3.6 羣起集羣
1. 配置slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[atguigu@hadoop102 hadoop]$ vi slaves
在該文件中增加如下內容:
hadoop102
hadoop103
hadoop104
注意:該文件中添加的內容結尾不允許有空格,文件中不允許有空行。
同步所有節點配置文件
[atguigu@hadoop102 hadoop]$ xsync slaves
2. 啓動集羣
(1)如果集羣是第一次啓動,需要格式化NameNode(注意格式化之前,一定要先停止上次啓動的所有namenode和datanode進程,然後再刪除data和log數據)
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format
(2)啓動HDFS
[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop102 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[atguigu@hadoop103 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
[atguigu@hadoop104 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
(3)啓動YARN
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一臺機器,不能在NameNode上啓動 YARN,應該在ResouceManager所在的機器上啓動YARN。
(4)Web端查看SecondaryNameNode
(a)瀏覽器中輸入:http://hadoop104:50090/status.html
(b)查看SecondaryNameNode信息,如圖2-41所示。
圖2-41 SecondaryNameNode的Web端
3. 集羣基本測試
(1)上傳文件到集羣
上傳小文件
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/atguigu/input
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/atguigu/input
上傳大文件
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put
/opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input
(2)上傳文件後查看文件存放在什麼位置
(a)查看HDFS文件存儲路徑
[atguigu@hadoop102 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
(b)查看HDFS在磁盤存儲文件內容
[atguigu@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
atguigu
atguigu
(3)拼接
-rw-rw-r--. 1 atguigu atguigu 134217728 5月 23 16:01 blk_1073741836
-rw-rw-r--. 1 atguigu atguigu 1048583 5月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 atguigu atguigu 63439959 5月 23 16:01 blk_1073741837
-rw-rw-r--. 1 atguigu atguigu 495635 5月 23 16:01 blk_1073741837_1013.meta
[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file
[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file
[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file
(4)下載
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get
/user/atguigu/input/hadoop-2.7.2.tar.gz ./
4.3.7 集羣啓動/停止方式總結
1. 各個服務組件逐一啓動/停止
(1)分別啓動/停止HDFS組件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
(2)啓動/停止YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
這種方式的使用場景,一般集羣已經啓動完畢了,單獨添加或者刪除節點的時候使用
2. 各個模塊分開啓動/停止(配置ssh是前提)常用
(1)整體啓動/停止HDFS
start-dfs.sh / stop-dfs.sh
(2)整體啓動/停止YARN
start-yarn.sh / stop-yarn.sh