1、安裝Hadoop
注意:安裝JDK類似,解壓後配置環境變量
1.0. Hadoop下載下傳位址:
https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
1.1. 用SecureCRT工具将hadoop-2.7.2.tar.gz導入到opt目錄下面的software檔案夾下面
切換到sftp連接配接頁面,選擇Linux下編譯的hadoop jar包拖入,如圖2-32所示
圖2-32 拖入hadoop的tar包
圖2-33 拖入Hadoop的tar包成功
1.2. 進入到Hadoop安裝包路徑下
[[email protected] ~]$ cd /opt/software/
1.3. 解壓安裝檔案到/opt/module下面
[[email protected] software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
1.4. 檢視是否解壓成功
[[email protected] software]$ ls /opt/module/
hadoop-2.7.2
1.5. 将Hadoop添加到環境變量
(1)擷取Hadoop安裝路徑
[[email protected] hadoop-2.7.2]$ pwd
/opt/module/hadoop-2.7.2
(2)打開/etc/profile檔案
[[email protected] hadoop-2.7.2]$ sudo vi /etc/profile
在profile檔案末尾添加JDK路徑:(shitf+g)
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(3)儲存後退出
:wq
(4)讓修改後的檔案生效
[atguigu@ hadoop101 hadoop-2.7.2]$ source /etc/profile
1.6. 測試是否安裝成功
[[email protected] hadoop-2.7.2]$ hadoop version
Hadoop 2.7.2
1.7. 重新開機(如果Hadoop指令不能用再重新開機)
[atguigu@ hadoop101 hadoop-2.7.2]$ sync
[atguigu@ hadoop101 hadoop-2.7.2]$ sudo reboot
2、配置Hadoop
2.1 運作Hadoop叢集的準備工作
解壓所下載下傳的Hadoop發行版。編輯 vim etc/hadoop/hadoop-env.sh (注意:Hadoop下面的etc檔案)檔案,至少需要将JAVA_HOME設定為Java安裝根路徑。
vim etc/hadoop/hadoop-env.sh
嘗試如下指令:
$ bin/hadoop
将會顯示hadoop 腳本的使用文檔。
現在你可以用以下三種支援的模式中的一種啟動Hadoop叢集:
- 單機模式
- 僞分布式模式
- 完全分布式模式
2.2 單機模式的操作方法
預設情況下,Hadoop被配置成以非分布式模式運作的一個獨立Java程序。這對調試非常有幫助。
下面的執行個體将已解壓的 etc/hadoop目錄拷貝作為輸入,查找并顯示比對給定正規表達式的條目。輸出寫入到指定的output目錄。
2.2.1.建立在hadoop-2.7.2檔案下面建立一個input檔案夾
[[email protected] hadoop-2.7.2]$ mkdir input
2.2.2.将Hadoop的xml配置檔案複制到input
[[email protected] hadoop-2.7.2]$ cp etc/hadoop/*.xml input
2.2.3.執行share目錄下的MapReduce程式
[[email protected] hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
2.2.4.檢視輸出結果
[[email protected] hadoop-2.7.2]$ cat output/*
2.3 僞分布式模式的操作方法
Hadoop可以在單節點上以所謂的僞分布式模式運作,此時每一個Hadoop守護程序都作為一個獨立的Java程序運作。
2.3.1 啟動HDFS并運作MapReduce程式
1. 分析
(1)配置叢集
(2)啟動、測試叢集增、删、查
(3)執行WordCount案例
2. 執行步驟
(1)配置叢集
(a)配置:vim etc/hadoop/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)配置:vim etc/hadoop/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)配置:vim etc/hadoop/hdfs-site.xml
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
(2)啟動叢集
(a)格式化NameNode (第一次啟動時格式化,以後就不要總格式化)
[[email protected] hadoop-2.7.2]$ bin/hdfs namenode -format
(b)啟動NameNode
[atguig[email protected] hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
(c)啟動DataNode
[atguig[email protected] hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
(3)檢視叢集
(a)檢視是否啟動成功
[[email protected] 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
[[email protected] 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
[atg[email protected] logs]# cat hadoop-atguigu-datanode-hadoop101.log
(d)思考:為什麼不能一直格式化NameNode,格式化NameNode,要注意什麼?
[[email protected] hadoop-2.7.2]$ cd data/tmp/dfs/name/current/
[[email protected] current]$ cat VERSION
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
[[email protected] 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檔案夾
[[email protected] hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/atguigu/input
(b)将測試檔案内容上傳到檔案系統上
[[email protected] hadoop-2.7.2]$bin/hdfs dfs -put wcinput/wc.input
/user/atguigu/input/
(c)檢視上傳的檔案是否正确
[[email protected] hadoop-2.7.2]$ bin/hdfs dfs -ls /user/atguigu/input/
[[email protected] hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/ input/wc.input
(d)運作MapReduce程式
[[email protected] 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)檢視輸出結果
指令行檢視:
[[email protected] hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
浏覽器檢視,如圖2-34所示
圖2-34 檢視output檔案
(f)将測試檔案内容下載下傳到本地
[[email protected] hadoop-2.7.2]$ hdfs dfs -get /user/atguigu/output/part-r-00000 ./wcoutput/
(g)删除輸出結果
[atguig[email protected] hadoop-2.7.2]$ hdfs dfs -rm -r /user/atguigu/output
2.3.2 啟動YARN并運作MapReduce程式
1. 分析
(1)配置叢集在YARN上運作MR
(2)啟動、測試叢集增、删、查
(3)在YARN上執行WordCount案例
2. 執行步驟
(1)配置叢集
(a)配置vim etc/hadoop/yarn-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置vim etc/hadoop/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)配置:vim etc/hadoop/mapred-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(d)配置: (對mapred-site.xml.template重新命名為) mapred-site.xml
[[email protected] hadoop]$ mv mapred-site.xml.template mapred-site.xml
[[email protected] hadoop]$ vi mapred-site.xml
<!-- 指定MR運作在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(2)啟動叢集
(a)啟動前必須保證NameNode和DataNode已經啟動
(b)啟動ResourceManager
[[email protected] 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檔案
[[email protected] hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
(c)執行MapReduce程式
[[email protected] 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所示
[[email protected] hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
圖2-36 檢視運作結果
2.3.3 配置曆史伺服器
為了檢視程式的曆史運作情況,需要配置一下曆史伺服器。具體配置步驟如下:
1. 配置mapred-site.xml
[[email protected] 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. 啟動曆史伺服器
[[email protected] hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
3. 檢視曆史伺服器是否啟動
[[email protected] hadoop-2.7.2]$ jps
4. 檢視JobHistory
http://hadoop101:19888/jobhistory
2.3.4 配置日志的聚集
日志聚集概念:應用運作完成以後,将程式運作日志資訊上傳到HDFS系統上。
日志聚集功能好處:可以友善的檢視到程式運作詳情,友善開發調試。
注意:開啟日志聚集功能,需要重新啟動NodeManager 、ResourceManager和HistoryManager。
開啟日志聚集功能具體步驟如下:
1.配置yarn-site.xml
[[email protected] 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>
2.關閉NodeManager 、ResourceManager和HistoryServer
[[email protected] hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager
[[email protected] hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
[[email protected] hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver
3.啟動NodeManager 、ResourceManager和HistoryServer
[[email protected] hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
[[email protected] hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
[[email protected] hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
4.删除HDFS上已經存在的輸出檔案
[[email protected] hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
5.執行WordCount程式
[[email protected] hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
6.檢視日志,如圖2-37,2-38,2-39所示
http://hadoop101:19888/jobhistory
圖2-37 Job History
圖2-38 job運作情況
圖2-39 檢視日志
2.3.5 配置檔案說明
Hadoop配置檔案分兩類:預設配置檔案和自定義配置檔案,隻有使用者想修改某一預設配置值時,才需要修改自定義配置檔案,更改相應屬性值。
(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這個路徑上,使用者可以根據項目需求重新進行修改配置。
2.4 完全分布式運作模式(開發重點)
xsync叢集分發腳本
需求:循環複制檔案到所有叢集節點的相同目錄下
rsync -av $pdir/$fname [email protected]$host:$pdir/$fname
指令 選項參數 要拷貝的檔案路徑/名稱 目的使用者@主機:目的路徑/名稱
示例:rsync -av /opt/software/ hadoop102:/opt/software
選項參數說明
選項 | 功能 |
-a | 歸檔拷貝 |
-v | 顯示複制過程 |
切換到root使用者,并在/usr/bin目錄下xsync建立檔案,檔案内容如下:
[[email protected] local]$ su root
密碼:
[[email protected] ~]$ cd /usr/local/bin
[[email protected] bin]$ touch xsync
[[email protected] bin]$ vi xsync
說明:在/usr/local/bin這個目錄下存放的腳本,所有使用者可以在系統任何地方直接執行。
在該檔案中編寫如下代碼
#!/bin/bash
#1 擷取輸入參數個數,如果沒有參數,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 擷取檔案名稱
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 擷取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 擷取目前使用者名稱
user=`whoami`
#5 循環
for((host=101; host<104; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname [email protected]$host:$pdir
done
修改腳本 xsync 具有執行權限
[[email protected] bin]$ chmod 777 xsync
(c)調用腳本形式:xsync 檔案名稱(把hadoop、jdk、環境變量檔案分發到叢集)
[[email protected] module]$ xsync hadoop-2.7.2
[[email protected] module]# xsync jdk1.8.0_144/
[[email protected] module]# xsync /etc/profile
為了友善其它虛拟機也能使用分發腳本,我們把分發腳本也發過去。
[[email protected] hadoop]# xsync /usr/local/bin/xsync
注意:也可以将xsync放到/home/atguigu/bin目錄下供目前使用者使用。
叢集配置
1. 叢集部署規劃
hadoop101 | hadoop102 | hadoop103 | |
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
2. 配置叢集
(1)核心配置檔案
配置core-site.xml
[[email protected] hadoop]$ vi 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>
(2)HDFS配置檔案
配置hadoop-env.sh
[[email protected] hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置hdfs-site.xml
[[email protected] hadoop]$ vi hdfs-site.xml
在該檔案中編寫如下配置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
(3)YARN配置檔案
配置yarn-env.sh
[[email protected] hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml
[[email protected] 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>hadoop102</value>
</property>
(4)MapReduce配置檔案
配置mapred-env.sh
[[email protected] hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置mapred-site.xml
[atguigu@hadoop101 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[[email protected] hadoop]$ vi mapred-site.xml
在該檔案中增加如下配置
<!-- 指定MR運作在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.在叢集上分發配置好的Hadoop配置檔案
[[email protected] hadoop]$ xsync /opt/module/hadoop-2.7.2/
4.檢視檔案分發情況
[[email protected] hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
叢集單點啟動
(1)如果叢集是第一次啟動,需要格式化NameNode
[[email protected] hadoop-2.7.2]$ hdfs namenode -format
(2)在hadoop101上啟動NameNode
[[email protected] hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[[email protected] hadoop-2.7.2]$ jps
3461 NameNode
(3)在hadoop101、hadoop102以及hadoop103上分别啟動DataNode
[[email protected] hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[[email protected] hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[[email protected] hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[[email protected] hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[[email protected] hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[[email protected] hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode
(4)思考:每次都一個一個節點啟動,如果節點數增加到1000個怎麼辦?
早上來了開始一個一個節點啟動,到晚上下班剛好完成,下班?
SSH無密登入配置
如圖在根目錄執行 ssh-keygen -t rsa
生成公鑰和私鑰:
[[email protected] ~]# ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個檔案id_rsa(私鑰)、id_rsa.pub(公鑰)
[[email protected] /]# cd ~
[[email protected] ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c7:85:3b:2b:75:9d:0a:80:70:cb:d3:eb:79:c0:ac:6e [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| . . |
| + + . |
| = o . . |
| o + o . . |
| S B . o |
| . * = . |
| = o . |
| E. o |
| oo |
+-----------------+
第一種方式:(這種方式比較麻煩)
将公鑰拷貝到要免密登入的目标機器上:如下,hadoop1,hadoop2,hadoop3都能通路,hadoop1.
[[email protected] .ssh]$ ssh-copy-id hadoop101
[[email protected] .ssh]$ ssh-copy-id hadoop102
[[email protected] .ssh]$ ssh-copy-id hadoop103
注意:
還需要在hadoop102上采用root賬号,配置一下無密登入到hadoop102、hadoop103、hadoop104;
還需要在hadoop103上采用atguigu賬号配置一下無密登入到hadoop102、hadoop103、hadoop104伺服器上。
第二種方式:
首先設定hadoop1自己能免密登入自己
[[email protected] .ssh]# ssh-copy-id hadoop101
生成authorized_key
然後~~把.ssh整個檔案夾發送到各個機器,這樣各個機器之間都能免密登入了!
[[email protected] .ssh]# cd ..
[[email protected] ~]# xsync .ssh
fname=.ssh
pdir=/root
------------------- hadoop101 --------------
sending incremental file list
sent 132 bytes received 13 bytes 290.00 bytes/sec
total size is 3685 speedup is 25.41
------------------- hadoop102 --------------
[email protected]'s password:
sending incremental file list
.ssh/
.ssh/authorized_keys
.ssh/id_rsa
.ssh/id_rsa.pub
.ssh/known_hosts
sent 3992 bytes received 92 bytes 480.47 bytes/sec
total size is 3685 speedup is 0.90
------------------- hadoop103 --------------
[email protected]'s password:
sending incremental file list
.ssh/
.ssh/authorized_keys
.ssh/id_rsa
.ssh/id_rsa.pub
.ssh/known_hosts
sent 3992 bytes received 92 bytes 907.56 bytes/sec
total size is 3685 speedup is 0.90
[[email protected] ~]#
.ssh檔案夾下(~/.ssh)的檔案功能解釋
known_hosts | 記錄ssh通路過計算機的公鑰(public key) |
id_rsa | 生成的私鑰 |
id_rsa.pub | 生成的公鑰 |
authorized_keys | 存放授權過得無密登入伺服器公鑰 |
群起叢集
1. 配置slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[[email protected] hadoop]$ vi slaves
在該檔案中增加如下内容:
hadoop101
hadoop102
hadoop103
注意:該檔案中添加的内容結尾不允許有空格,檔案中不允許有空行。
同步所有節點配置檔案
[[email protected] hadoop]$ xsync slaves
2. 啟動叢集
(1)如果叢集是第一次啟動,需要格式化NameNode(注意格式化之前,一定要先停止上次啟動的所有namenode和datanode程序,然後再删除data和log資料)
[[email protected] hadoop-2.7.2]$ bin/hdfs namenode -format
(2)啟動HDFS
[[email protected] hadoop-2.7.2]$ sbin/start-dfs.sh
[[email protected] hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[[email protected] hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
[[email protected] hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
(3)啟動YARN
[[email protected] hadoop-2.7.2]$ sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台機器,不能在NameNode上啟動 YARN,應該在ResouceManager所在的機器上啟動YARN。
(4)Web端檢視SecondaryNameNode
(a)浏覽器中輸入:http://hadoop103:50090/status.html
(b)檢視SecondaryNameNode資訊,如圖2-41所示。
3. 叢集基本測試
(1)上傳檔案到叢集
上傳小檔案
[[email protected] hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/atguigu/input
[[email protected] hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/atguigu/input
上傳大檔案
[[email protected] hadoop-2.7.2]$ bin/hadoop fs -put
/opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input
(2)上傳檔案後檢視檔案存放在什麼位置
(a)檢視HDFS檔案存儲路徑
[[email protected] 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在磁盤存儲檔案内容
[[email protected] 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
[[email protected] subdir0]$ cat blk_1073741836>>tmp.file
[[email protected] subdir0]$ cat blk_1073741837>>tmp.file
[[email protected] subdir0]$ tar -zxvf tmp.file
(4)下載下傳
[[email protected] hadoop-2.7.2]$ bin/hadoop fs -get
/user/atguigu/input/hadoop-2.7.2.tar.gz ./
叢集啟動/停止方式總結
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
叢集時間同步
注意:叢集時間同步就是叢集之間的時間保持一緻,這和hadoop無關,Hbase也要求叢集需要時間同步;
時間同步的方式:找一個機器,作為時間伺服器,所有的機器與這台叢集時間進行定時的同步,比如,每隔十分鐘,同步一次時間。
配置時間同步具體實操:
1. 時間伺服器配置(必須root使用者)
(1)檢查ntp是否安裝(如下說明ntp服務已經安裝)
[[email protected] 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
(2)檢查ntp服務有沒有啟動
[[email protected] /]# service ntpd status
ntpd 已停
已停:是可以的,如果正在運作需要暫停服務;
service ntpd stop;
chkconfig ntpd off; #檢查服務是否關閉
chkconfig --list ntpd; #檢查服務是否關閉
(3)修改ntp配置檔案
[[email protected] 桌面]# vi /etc/ntp.conf
修改内容如下
a)修改1(授權192.168.1.0-192.168.1.255網段上的所有機器可以從這台機器上查詢和同步時間)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 放開注釋--改為
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b)修改2(叢集在區域網路中,不使用其他網際網路上的時間)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
把上面四行注釋掉---改為如下
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
c)添加3(當該節點丢失網絡連接配接,依然可以采用本地時間作為時間伺服器為叢集中的其他節點提供時間同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(4)修改/etc/sysconfig/ntpd 檔案
[[email protected] 桌面]# vim /etc/sysconfig/ntpd
增加内容如下(讓硬體時間與系統時間一起同步)
SYNC_HWCLOCK=yes
(5)重新啟動ntpd服務
[[email protected] 桌面]# service ntpd status
ntpd 已停
[[email protected] 桌面]# service ntpd start
正在啟動 ntpd: [确定]
(6)設定ntpd服務開機啟動
[[email protected] 桌面]# chkconfig ntpd on
2. 其他機器配置(必須root使用者)
(1)在其他機器配置10分鐘與時間伺服器同步一次
[[email protected] 桌面]# crontab -e
編寫定時任務如下:(如下代表每隔10分鐘去hadoop101去同步時間)
*/10 * * * * /usr/sbin/ntpdate hadoop101
(2)修改任意機器時間(測試使用:10分鐘後修改回來)
[[email protected] 桌面]# date -s "2017-9-11 11:11:11"
(3)十分鐘後檢視機器是否與時間伺服器同步
[[email protected] 桌面]# date
說明:測試的時候可以将10分鐘調整為1分鐘,節省時間。