hadoop運行模式介紹
hadoop有三種運行模式
- 本地模式(默認模式):
不需要啟用單獨進程撑蚌,直接可以運行上遥,測試和開發(fā)時使用。 - 偽分布式模式:
等同于完全分布式争涌,只有一個節(jié)點粉楚。 - 完全分布式模式:
多個節(jié)點一起運行。
本地模式運行Hadoop案例
本地運行官方grep案例
- 在hadoop-2.8.3文件夾下面創(chuàng)建一個input文件夾
mkdir input - 將hadoop的xml配置文件復(fù)制到input
cp etc/hadoop/*.xml input - 執(zhí)行share目錄下的mapreduce程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar grep input output 'dfs[a-z.]+' - 查看輸出結(jié)果
本地運行官方wordcount案例
- 在hadoop-2.8.3文件夾下面創(chuàng)建一個wcinput文件夾
mkdir wcinput - 在wcinput文件下創(chuàng)建一個wc.input文件,并輸入以下內(nèi)容
hello hadoop
hello mapreduce
hello yarn - 回到hadoop-2.8.3文件夾下亮垫,執(zhí)行程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount wcinput wcoutput - 查看結(jié)果
偽分布式運行
啟動HDFS并運行MapReduce程序
- 配置
1.1. 配置hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
1.2. 配置core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-00:9000</value>
</property>
<!-- 指定hadoop運行時產(chǎn)生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.8.3/data/tmp</value>
</property>
1.3. 配置hdfs-site.xml
<!-- 指定HDFS副本的數(shù)量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
- 啟動
2.1. 格式化namenode
第一次啟動時格式化模软,以后就不要總格式化
hdfs namenode -format
2.2. 啟動namenode
hadoop-daemon.sh start namenode
2.3. 啟動datanode
hadoop-daemon.sh start datanode - 查看集群
3.1. 查看是否啟動成功
使用jps命令
3.2. 查看產(chǎn)生的log日志
hadoop-2.8.3/logs下是相關(guān)日志
3.3. web端查看hdfs文件系統(tǒng)
http://hadoop-00:50070/dfshealth.html#tab-overview - 操作集群
4.1. 在hdfs文件系統(tǒng)上創(chuàng)建一個input文件夾
hdfs dfs -mkdir -p /user/hadoop/input
4.2. 將測試文件上傳到文件系統(tǒng)上
hdfs dfs -put hello.txt /user/hadoop/input
4.3. 查看上傳文件是否正確
hdfs dfs -ls /user/hadoop/input
hdfs dfs -cat /user/hadoop/input/hello.txt
4.4. 運行mapreduce程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount /user/hadoop/input /user/hadoop/output
4.5. 查看輸出結(jié)果
hdfs dfs -ls /user/hadoop/output
hdfs dfs -cat /user/hadoop/output/part-r-00000
4.6. 將輸出結(jié)果下載到本地
hdfs dfs -get /user/hadoop/output output
4.8 刪除輸出結(jié)果文件夾
hdfs dfs -rm -r /user/hadoop/output
YARN上運行MapReduce程序
- 配置
1.1. 配置yarn-env.sh
JAVA_HOME=/opt/module/jdk1.8.0_181
1.2. 配置yarn-site.xml
<!-- reducer獲取數(shù)據(jù)的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-00</value>
</property>
1.3. 配置mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
1.4. 配置mapred-site.xml
對mapred-site.xml.template重新命名為mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 啟動
2.1. 啟動resourcemanager
yarn-daemon.sh start resourcemanager
2.2. 啟動nodemanager
yarn-daemon.sh start nodemanager - 操作
3.1. yarn的瀏覽器頁面查看
http://hadoop-00:8088/cluster
3.2. 執(zhí)行mapreduce程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount /user/hadoop/input /user/hadoop/output
3.3. 查看運行結(jié)果
hdfs dfs -ls /user/hadoop/output
hdfs dfs -cat /user/hadoop/output/part-r-00000
配置歷史服務(wù)器
點上圖的history是點不開的,需要配置歷史服務(wù)器
- 配置mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-00:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop-00:19888</value>
</property>
- 啟動歷史服務(wù)器
/mr-jobhistory-daemon.sh start historyserver - 查看是否啟動
使用jps 或者訪問http://hadoop-00:19888/jobhistory
日志的聚集
日志聚集概念:應(yīng)用運行完成以后包警,將日志信息上傳到HDFS系統(tǒng)上撵摆。
點擊上圖的logs,訪問不到害晦,開啟日志聚集
步驟如下
- 配置yarn-site.xml
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留時間設(shè)置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 把正在運行的相關(guān)進程停止
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop datanode
mr-jobhistory-daemon.sh stop historyserver - 啟動相關(guān)進程
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
mr-jobhistory-daemon.sh start historyserver - 刪除已經(jīng)存在的文件并執(zhí)行wordcount案例
hdfs dfs -rm -r /user/hadoop/output
分布式部署運行
準(zhǔn)備三臺虛擬機特铝,ip,主機名壹瘟,防火墻關(guān)閉鲫剿,安裝好jdk和hadoop
scp命令
scp可以實現(xiàn)服務(wù)器與服務(wù)器之間的數(shù)據(jù)拷貝
具體使用
- 將hadoop-100 的/home/hadoop/test 文件復(fù)制到hadoop-101上
scp -r /home/hadoop/test hadoop@hadoop-101:/home/hadoop - 將服務(wù)器/etc/profile 文件復(fù)制到hadoop-101上
scp /etc/profile hadoop@hadoop-101:/etc/profile - hadoop-100上實現(xiàn)hadoop-101和hadoop-102的數(shù)據(jù)傳輸
scp hadoop@hadoop-101:/etc/profile hadoop@hadoop-102:/etc/profile
SSH無密碼登錄
免密登錄原理
.ssh文件夾下文件功能解釋
- known_hosts,記錄ssh訪問過計算機的公鑰(public key)
- id_rsa稻轨,生成的私鑰
- id_rsa.pub灵莲,生成的公鑰
- authorized_keys,存放授權(quán)過得無秘登錄服務(wù)器公鑰
具體步驟
- 進入到我的home目錄下的.ssh目錄
cd ~
cd .ssh - 生成公鑰和私鑰
ssh-keygen -t rsa
敲三個回車殴俱,會生成兩個文件 - 將公鑰拷貝到要免密登錄的目標(biāo)服務(wù)器上
ssh-copy-id hadoop-101
ssh-copy-id hadoop-102
rsync
rsync遠程同步工具政冻,主要用于備份和鏡像。具有速度快线欲、避免復(fù)制相同內(nèi)容和支持符號鏈接的優(yōu)點明场。
rsync和scp區(qū)別:用rsync做文件的復(fù)制要比scp的速度快,rsync只對差異文件做更新李丰。scp是把所有文件都復(fù)制過去苦锨。
命令安裝
yum -y install rsync
命令解釋
rsync -rvl fname host:$pdir
命令 命令參數(shù) 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑
選項解釋
-r 遞歸
-v 顯示復(fù)制過程
-l 拷貝符號連接
案例
把本機/opt/tmp目錄同步到hadoop-102服務(wù)器的root用戶下的/opt/tmp目錄
rsync -rvl /opt/tmp root@hadoop-102:/opt
編寫集群分發(fā)腳本xsync
需求分析
循環(huán)復(fù)制文件到所有節(jié)點的相同目錄下。
原始拷貝:rsync -rvl /opt/module root@hadoop103:/opt/
期望腳本:xsync 要同步的文件名稱
在/usr/local/bin這個目錄下存放的腳本趴泌,可以在系統(tǒng)任何地方直接執(zhí)行舟舒。
實現(xiàn)
在hadoop-100上操作
- 在/usr/local/bin目錄下創(chuàng)建xsync文件
vim xsync - 使該文件成可執(zhí)行文件
chmod 777 xsync - 改變擁有者為hadoop
chown hadoop:hadoop xsync - 輸入如下內(nèi)容
#!/bin/bash
#1 獲取輸入?yún)?shù)個數(shù),如果沒有參數(shù)嗜憔,直接退出
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 獲取當(dāng)前用戶名稱
user=`whoami`
#5 循環(huán)
for((host=101;host<103;host++));do
echo $pdir/$fname $user@hadoop-$host:$pdir
rsync -rvl $pdir/$fname $user@hadoop-$host:$pdir
done
配置集群
集群部署規(guī)劃
hadoop-100 | hadoop-101 | hadoop-102 | |
---|---|---|---|
HDFS | NameNode DateNode | DateNode | SecondaryNameNode DateNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
配置文件修改
- core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-100:9000</value>
</property>
<!-- 指定hadoop運行時產(chǎn)生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.8.3/data/tmp</value>
</property>
- hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
- hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-102:50090</value>
</property>
- slaves
hadoop-100
hadoop-101
hadoop-102
- yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
- yarn-site.xml
<!-- reducer獲取數(shù)據(jù)的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
- mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
- mapred-site.xml
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
在集群上分發(fā)以上所有文件
進入etc目錄
xsync hadoop/
查看分發(fā)情況
到hadoop-101 和 hadoop-102
cat slaves
集群啟動及測試
啟動集群
- 如果集群是第一次啟動秃励,需要格式化namenode,在namenode上格式化
/hdfs namenode -format - 啟動hdfs吉捶,在namenode上啟動hdfs
start-dfs.sh - 啟動yarn夺鲜,在ResourceManager所在的機器啟動yarn
同樣需要配置ssh無密登錄
start-yarn.sh
集群基本測試
- 上傳文件到集群
hdfs dfs -mkdir -p /user/hadoop
上傳小文件
hdfs dfs -put /home/hadoop/hello.txt /user/hadoop/
上傳大文件
hdfs dfs -put hadoop-2.8.3.tar.gz /user/hadoop/
hdfs dfs -put jdk-8u181-linux-x64.tar.gz /user/hadoop -
上傳文件后文件存放在什么位置
/opt/module/hadoop-2.8.3/data/tmp/dfs/data/current/BP-922234044-192.168.114.100-1535772143813/current/finalized/subdir0/subdir0
可以查看下該路徑下一個文件內(nèi)容
cat blk_1073741825
-
對大文件進行拼接
cat blk_1073741826>>test.file
cat blk_1073741827>>test.file
tar -zxvf test.file
- 下載
hdfs dfs -get /user/hadoop/hadoop-2.8.3.tar.gz hadoop-2.8.3.tar.gz
Hadoop啟動停止方式
- 各個服務(wù)組件逐一啟動
啟動hdfs組件
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
啟動yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager - 各個模塊分開啟動(配置ssh是前提)
整體啟動/停止hdfs
start-dfs.sh
stop-dfs.sh
整體啟動/停止yarn
start-yarn.sh
stop-yarn.sh - 全部啟動(不建議使用)
start-all.sh
stop-all.sh
集群時間同步
時間同步的方式:找一個機器廓鞠,作為時間服務(wù)器,所有的機器與這臺集群時間進行定時的同步谣旁,比如床佳,每隔十分鐘,同步一次時間榄审。
時間服務(wù)器操作步驟
使用root用戶進行如下操作
-
檢查ntp是否安裝
rpm -qa|grep ntp
沒有安裝的話砌们,執(zhí)行下yum -y install ntp
- 修改ntp配置文件
vi /etc/ntp.conf
分別做如下修改
修改1
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap為
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
修改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
添加3
server 127.127.1.0
fudge 127.127.1.0 stratum 10 - 修改/etc/sysconfig/ntpd 文件
vim /etc/sysconfig/ntpd
添加如下內(nèi)容
SYNC_HWCLOCK=yes - 啟動ntpd
service ntpd restart - 執(zhí)行
chkconfig ntpd on
其他機器配置
必須是root用戶
- 在其他機器配置10分鐘與時間服務(wù)器同步一次
crontab -e
0-59/10 * * * * /usr/sbin/ntpdate hadoop-100 - 修改任意機器時間
date -s "2018-9-5 11:11:11" - 十分鐘后查看機器是否與時間服務(wù)器同步
date